Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 5b372600 authored by Greg Kroah-Hartman's avatar Greg Kroah-Hartman
Browse files
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 touchpad
parents 73dec82d 9ff3541e
Loading
Loading
Loading
Loading
+0 −1
Original line number Original line Diff line number Diff line
@@ -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
+10 −17
Original line number Original line Diff line number Diff line
@@ -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;
	}
	}


	if (!(ihid->quirks & I2C_HID_QUIRK_NO_RUNTIME_PM))
		pm_runtime_put(&client->dev);
		pm_runtime_put(&client->dev);

	return 0;
	return 0;


err_mem_free:
err_mem_free:
@@ -1130,6 +1131,7 @@ 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;


	if (!(ihid->quirks & I2C_HID_QUIRK_NO_RUNTIME_PM))
		pm_runtime_get_sync(&client->dev);
		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);
@@ -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;
+1 −0
Original line number Original line Diff line number Diff line
@@ -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
+1 −0
Original line number Original line Diff line number Diff line
@@ -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, }
};
};