From 787fe9663dc25017ac059a451e457ecc43c29e8f Mon Sep 17 00:00:00 2001 From: Ben Hutchings Date: Fri, 31 Oct 2014 01:50:29 +0000 Subject: [PATCH] HID: i2c-hid: call the hid driver's suspend and resume callbacks (Closes: #767204) svn path=/dists/sid/linux/; revision=21994 --- debian/changelog | 2 + ...-the-hid-driver-s-suspend-and-resume.patch | 69 +++++++++++++++++++ debian/patches/series | 1 + 3 files changed, 72 insertions(+) create mode 100644 debian/patches/bugfix/all/HID-i2c-hid-call-the-hid-driver-s-suspend-and-resume.patch diff --git a/debian/changelog b/debian/changelog index 3b09bd59e..5cb205e2e 100644 --- a/debian/changelog +++ b/debian/changelog @@ -123,6 +123,8 @@ linux (3.16.7-1) UNRELEASED; urgency=medium parameters (Closes: #764285) * lockd: Try to reconnect if statd has moved (Closes: #767219) * m25p80: Fix module device ID table + * HID: i2c-hid: call the hid driver's suspend and resume callbacks + (Closes: #767204) [ Mauricio Faria de Oliveira ] * [ppc64el] Disable CONFIG_CMDLINE{,_BOOL} usage for setting consoles diff --git a/debian/patches/bugfix/all/HID-i2c-hid-call-the-hid-driver-s-suspend-and-resume.patch b/debian/patches/bugfix/all/HID-i2c-hid-call-the-hid-driver-s-suspend-and-resume.patch new file mode 100644 index 000000000..d0e6010ad --- /dev/null +++ b/debian/patches/bugfix/all/HID-i2c-hid-call-the-hid-driver-s-suspend-and-resume.patch @@ -0,0 +1,69 @@ +From: Andrew Duggan +Date: Fri, 11 Jul 2014 16:34:18 -0700 +Subject: HID: i2c-hid: call the hid driver's suspend and resume callbacks +Origin: https://git.kernel.org/linus/109571cf3ec78a39477eedd6b11927f52cbcb1e8 + +Currently, the i2c-hid driver does not call the suspend, resume, and +reset_resume callbacks in the hid_driver struct when those events occur. +This means that HID drivers for i2c-hid devices will not be able to execute +commands which may be needed during suspend or resume. One example is when a +touchpad using the hid-multitouch driver gets reset by i2c-hid coming out of +resume. Since the reset_resume callback never gets called the device is never +put back into the correct input mode. This patch calls the suspend and resume +callbacks and tries to duplicate the functionality of the usb-hid driver. + +Signed-off-by: Andrew Duggan +Signed-off-by: Vincent Huang +Reviewed-by: Benjamin Tissoires +Signed-off-by: Jiri Kosina +--- + drivers/hid/i2c-hid/i2c-hid.c | 15 ++++++++++++++- + 1 file changed, 14 insertions(+), 1 deletion(-) + +diff --git a/drivers/hid/i2c-hid/i2c-hid.c b/drivers/hid/i2c-hid/i2c-hid.c +index 21aafc8..747d544 100644 +--- a/drivers/hid/i2c-hid/i2c-hid.c ++++ b/drivers/hid/i2c-hid/i2c-hid.c +@@ -1054,21 +1054,29 @@ static int i2c_hid_remove(struct i2c_client *client) + static int i2c_hid_suspend(struct device *dev) + { + struct i2c_client *client = to_i2c_client(dev); ++ struct i2c_hid *ihid = i2c_get_clientdata(client); ++ struct hid_device *hid = ihid->hid; ++ int ret = 0; + + disable_irq(client->irq); + if (device_may_wakeup(&client->dev)) + enable_irq_wake(client->irq); + ++ if (hid->driver && hid->driver->suspend) ++ ret = hid->driver->suspend(hid, PMSG_SUSPEND); ++ + /* Save some power */ + i2c_hid_set_power(client, I2C_HID_PWR_SLEEP); + +- return 0; ++ return ret; + } + + static int i2c_hid_resume(struct device *dev) + { + int ret; + struct i2c_client *client = to_i2c_client(dev); ++ struct i2c_hid *ihid = i2c_get_clientdata(client); ++ struct hid_device *hid = ihid->hid; + + enable_irq(client->irq); + ret = i2c_hid_hwreset(client); +@@ -1078,6 +1086,11 @@ static int i2c_hid_resume(struct device *dev) + if (device_may_wakeup(&client->dev)) + disable_irq_wake(client->irq); + ++ if (hid->driver && hid->driver->reset_resume) { ++ ret = hid->driver->reset_resume(hid); ++ return ret; ++ } ++ + return 0; + } + #endif diff --git a/debian/patches/series b/debian/patches/series index bba21026f..428924d9c 100644 --- a/debian/patches/series +++ b/debian/patches/series @@ -401,3 +401,4 @@ bugfix/all/mtd-move-support-for-struct-flash_platform_data-into.patch bugfix/all/mtd-m25p80-get-rid-of-spi_get_device_id.patch bugfix/all/mtd-spi-nor-make-spi_nor_scan-take-a-chip-type-name-.patch bugfix/all/mtd-m25p80-spi-nor-Fix-module-aliases-for-m25p80.patch +bugfix/all/HID-i2c-hid-call-the-hid-driver-s-suspend-and-resume.patch