Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Jiri writes: "HID fixes: - hantick touchpad fix from Anisse Astier - device ID addition for Ice Lake mobile from Srinivas Pandruvada - touchscreen resume fix for certain i2c-hid driven devices from Hans de Goede" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: intel-ish-hid: Enable Ice Lake mobile HID: i2c-hid: Remove RESEND_REPORT_DESCR quirk and its handling HID: i2c-hid: disable runtime PM operations on hantick touchpadhifive-unleashed-5.1
commit
5b372600cc
|
@ -976,7 +976,6 @@
|
||||||
#define USB_DEVICE_ID_SIS817_TOUCH 0x0817
|
#define USB_DEVICE_ID_SIS817_TOUCH 0x0817
|
||||||
#define USB_DEVICE_ID_SIS_TS 0x1013
|
#define USB_DEVICE_ID_SIS_TS 0x1013
|
||||||
#define USB_DEVICE_ID_SIS1030_TOUCH 0x1030
|
#define USB_DEVICE_ID_SIS1030_TOUCH 0x1030
|
||||||
#define USB_DEVICE_ID_SIS10FB_TOUCH 0x10fb
|
|
||||||
|
|
||||||
#define USB_VENDOR_ID_SKYCABLE 0x1223
|
#define USB_VENDOR_ID_SKYCABLE 0x1223
|
||||||
#define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
|
#define USB_DEVICE_ID_SKYCABLE_WIRELESS_PRESENTER 0x3F07
|
||||||
|
|
|
@ -47,7 +47,7 @@
|
||||||
/* quirks to control the device */
|
/* quirks to control the device */
|
||||||
#define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0)
|
#define I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV BIT(0)
|
||||||
#define I2C_HID_QUIRK_NO_IRQ_AFTER_RESET BIT(1)
|
#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(2)
|
||||||
|
|
||||||
/* flags */
|
/* flags */
|
||||||
#define I2C_HID_STARTED 0
|
#define I2C_HID_STARTED 0
|
||||||
|
@ -169,9 +169,8 @@ static const struct i2c_hid_quirks {
|
||||||
{ USB_VENDOR_ID_WEIDA, USB_DEVICE_ID_WEIDA_8755,
|
{ USB_VENDOR_ID_WEIDA, USB_DEVICE_ID_WEIDA_8755,
|
||||||
I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV },
|
I2C_HID_QUIRK_SET_PWR_WAKEUP_DEV },
|
||||||
{ I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
|
{ I2C_VENDOR_ID_HANTICK, I2C_PRODUCT_ID_HANTICK_5288,
|
||||||
I2C_HID_QUIRK_NO_IRQ_AFTER_RESET },
|
I2C_HID_QUIRK_NO_IRQ_AFTER_RESET |
|
||||||
{ USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS10FB_TOUCH,
|
I2C_HID_QUIRK_NO_RUNTIME_PM },
|
||||||
I2C_HID_QUIRK_RESEND_REPORT_DESCR },
|
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1105,7 +1104,9 @@ static int i2c_hid_probe(struct i2c_client *client,
|
||||||
goto err_mem_free;
|
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;
|
return 0;
|
||||||
|
|
||||||
err_mem_free:
|
err_mem_free:
|
||||||
|
@ -1130,7 +1131,8 @@ static int i2c_hid_remove(struct i2c_client *client)
|
||||||
struct i2c_hid *ihid = i2c_get_clientdata(client);
|
struct i2c_hid *ihid = i2c_get_clientdata(client);
|
||||||
struct hid_device *hid;
|
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_disable(&client->dev);
|
||||||
pm_runtime_set_suspended(&client->dev);
|
pm_runtime_set_suspended(&client->dev);
|
||||||
pm_runtime_put_noidle(&client->dev);
|
pm_runtime_put_noidle(&client->dev);
|
||||||
|
@ -1236,22 +1238,13 @@ static int i2c_hid_resume(struct device *dev)
|
||||||
|
|
||||||
/* Instead of resetting device, simply powers the device on. This
|
/* Instead of resetting device, simply powers the device on. This
|
||||||
* solves "incomplete reports" on Raydium devices 2386:3118 and
|
* solves "incomplete reports" on Raydium devices 2386:3118 and
|
||||||
* 2386:4B33
|
* 2386:4B33 and fixes various SIS touchscreens no longer sending
|
||||||
|
* data after a suspend/resume.
|
||||||
*/
|
*/
|
||||||
ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
|
ret = i2c_hid_set_power(client, I2C_HID_PWR_ON);
|
||||||
if (ret)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
/* Some devices need to re-send report descr cmd
|
|
||||||
* after resume, after this it will be back normal.
|
|
||||||
* otherwise it issues too many incomplete reports.
|
|
||||||
*/
|
|
||||||
if (ihid->quirks & I2C_HID_QUIRK_RESEND_REPORT_DESCR) {
|
|
||||||
ret = i2c_hid_command(client, &hid_report_descr_cmd, NULL, 0);
|
|
||||||
if (ret)
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hid->driver && hid->driver->reset_resume) {
|
if (hid->driver && hid->driver->reset_resume) {
|
||||||
ret = hid->driver->reset_resume(hid);
|
ret = hid->driver->reset_resume(hid);
|
||||||
return ret;
|
return ret;
|
||||||
|
|
|
@ -29,6 +29,7 @@
|
||||||
#define CNL_Ax_DEVICE_ID 0x9DFC
|
#define CNL_Ax_DEVICE_ID 0x9DFC
|
||||||
#define GLK_Ax_DEVICE_ID 0x31A2
|
#define GLK_Ax_DEVICE_ID 0x31A2
|
||||||
#define CNL_H_DEVICE_ID 0xA37C
|
#define CNL_H_DEVICE_ID 0xA37C
|
||||||
|
#define ICL_MOBILE_DEVICE_ID 0x34FC
|
||||||
#define SPT_H_DEVICE_ID 0xA135
|
#define SPT_H_DEVICE_ID 0xA135
|
||||||
|
|
||||||
#define REVISION_ID_CHT_A0 0x6
|
#define REVISION_ID_CHT_A0 0x6
|
||||||
|
|
|
@ -38,6 +38,7 @@ static const struct pci_device_id ish_pci_tbl[] = {
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_Ax_DEVICE_ID)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_Ax_DEVICE_ID)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, GLK_Ax_DEVICE_ID)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, GLK_Ax_DEVICE_ID)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_H_DEVICE_ID)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, CNL_H_DEVICE_ID)},
|
||||||
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, ICL_MOBILE_DEVICE_ID)},
|
||||||
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_H_DEVICE_ID)},
|
{PCI_DEVICE(PCI_VENDOR_ID_INTEL, SPT_H_DEVICE_ID)},
|
||||||
{0, }
|
{0, }
|
||||||
};
|
};
|
||||||
|
|
Loading…
Reference in New Issue