|
@@ -48,6 +48,7 @@
|
|
|
#define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0)
|
|
|
#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)
|
|
|
#define I2C_HID_QUIRK_RESEND_REPORT_DESCR BIT(2)
|
|
|
+#define I2C_HID_QUIRK_NO_RUNTIME_PM BIT(3)
|
|
|
|
|
|
/* flags */
|
|
|
#define I2C_HID_STARTED 0
|
|
@@ -169,7 +170,8 @@ static const struct i2c_hid_quirks {
|
|
|
{ USB_VENDOR_ID_WEIDA, USB_DEVICE_ID_WEIDA_8755,
|
|
|
I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV },
|
|
|
{ I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
|
|
|
- I2C_HID_QUIRK_NO_IRQ_AFTER_RESET },
|
|
|
+ I2C_HID_QUIRK_NO_IRQ_AFTER_RESET |
|
|
|
+ I2C_HID_QUIRK_NO_RUNTIME_PM },
|
|
|
{ USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS10FB_TOUCH,
|
|
|
I2C_HID_QUIRK_RESEND_REPORT_DESCR },
|
|
|
{ 0, 0 }
|
|
@@ -1105,7 +1107,9 @@ static int i2c_hid_probe(struct i2c_client *client,
|
|
|
goto err_mem_free;
|
|
|
}
|
|
|
|
|
|
- pm_runtime_put(&client->dev);
|
|
|
+ if (!(ihid->quirks & I2C_HID_QUIRK_NO_RUNTIME_PM))
|
|
|
+ pm_runtime_put(&client->dev);
|
|
|
+
|
|
|
return 0;
|
|
|
|
|
|
err_mem_free:
|
|
@@ -1130,7 +1134,8 @@ static int i2c_hid_remove(struct i2c_client *client)
|
|
|
struct i2c_hid *ihid = i2c_get_clientdata(client);
|
|
|
struct hid_device *hid;
|
|
|
|
|
|
- pm_runtime_get_sync(&client->dev);
|
|
|
+ if (!(ihid->quirks & I2C_HID_QUIRK_NO_RUNTIME_PM))
|
|
|
+ pm_runtime_get_sync(&client->dev);
|
|
|
pm_runtime_disable(&client->dev);
|
|
|
pm_runtime_set_suspended(&client->dev);
|
|
|
pm_runtime_put_noidle(&client->dev);
|