|
47 | 47 | /* quirks to control the device */
|
48 | 48 | #define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0)
|
49 | 49 | #define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)
|
| 50 | +#define I2C_HID_QUIRK_RESEND_REPORT_DESCR BIT(2) |
50 | 51 |
|
51 | 52 | /* flags */
|
52 | 53 | #define I2C_HID_STARTED 0
|
@@ -171,6 +172,8 @@ static const struct i2c_hid_quirks {
|
171 | 172 | I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV },
|
172 | 173 | { I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
|
173 | 174 | I2C_HID_QUIRK_NO_IRQ_AFTER_RESET },
|
| 175 | + { I2C_VENDOR_ID_RAYD, I2C_PRODUCT_ID_RAYD_3118, |
| 176 | + I2C_HID_QUIRK_RESEND_REPORT_DESCR }, |
174 | 177 | { 0, 0 }
|
175 | 178 | };
|
176 | 179 |
|
@@ -1220,6 +1223,16 @@ static int i2c_hid_resume(struct device *dev)
|
1220 | 1223 | if (ret)
|
1221 | 1224 | return ret;
|
1222 | 1225 |
|
| 1226 | + /* RAYDIUM device (2386:3118) need to re-send report descr cmd |
| 1227 | + * after resume, after this it will be back normal. |
| 1228 | + * otherwise it issues too many incomplete reports. |
| 1229 | + */ |
| 1230 | + if (ihid->quirks & I2C_HID_QUIRK_RESEND_REPORT_DESCR) { |
| 1231 | + ret = i2c_hid_command(client, &hid_report_descr_cmd, NULL, 0); |
| 1232 | + if (!ret) |
| 1233 | + return ret; |
| 1234 | + } |
| 1235 | + |
1223 | 1236 | if (hid->driver && hid->driver->reset_resume) {
|
1224 | 1237 | ret = hid->driver->reset_resume(hid);
|
1225 | 1238 | return ret;
|
|
0 commit comments