aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLinus Torvalds <torvalds@linux-foundation.org>2018-06-20 03:42:39 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2018-06-20 03:42:39 -0400
commit81e97f01371f4e1701feeafe484665112cd9ddc2 (patch)
tree9e45a6841066f55230befe132d4fc3d1f146532d
parent6d90eb7ba341b3eb035121eff0b69d370cbc251e (diff)
parentd471b6b22d37bf9928c6d0202bdaaf76583b8b61 (diff)
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID fixes from Jiri Kosina: - Wacom 2nd-gen Intuos Pro large Y axis handling fix from Jason Gerecke - fix for hibernation in Intel ISH driver, from Even Xu - crash fix for hid-steam driver, from Rodrigo Rivas Costa - new device ID addition to google-hammer driver * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: wacom: Correct logical maximum Y for 2nd-gen Intuos Pro large HID: intel_ish-hid: ipc: register more pm callbacks to support hibernation HID: steam: use hid_device.driver_data instead of hid_set_drvdata() HID: google: Add support for whiskers
-rw-r--r--drivers/hid/hid-google-hammer.c2
-rw-r--r--drivers/hid/hid-ids.h1
-rw-r--r--drivers/hid/hid-steam.c10
-rw-r--r--drivers/hid/intel-ish-hid/ipc/pci-ish.c22
-rw-r--r--drivers/hid/wacom_sys.c8
5 files changed, 23 insertions, 20 deletions
diff --git a/drivers/hid/hid-google-hammer.c b/drivers/hid/hid-google-hammer.c
index 7b8e17b03cb8..6bf4da7ad63a 100644
--- a/drivers/hid/hid-google-hammer.c
+++ b/drivers/hid/hid-google-hammer.c
@@ -124,6 +124,8 @@ static const struct hid_device_id hammer_devices[] = {
124 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) }, 124 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },
125 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, 125 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
126 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WAND) }, 126 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WAND) },
127 { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
128 USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WHISKERS) },
127 { } 129 { }
128}; 130};
129MODULE_DEVICE_TABLE(hid, hammer_devices); 131MODULE_DEVICE_TABLE(hid, hammer_devices);
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
index a85634fe033f..c7981ddd8776 100644
--- a/drivers/hid/hid-ids.h
+++ b/drivers/hid/hid-ids.h
@@ -452,6 +452,7 @@
452#define USB_DEVICE_ID_GOOGLE_TOUCH_ROSE 0x5028 452#define USB_DEVICE_ID_GOOGLE_TOUCH_ROSE 0x5028
453#define USB_DEVICE_ID_GOOGLE_STAFF 0x502b 453#define USB_DEVICE_ID_GOOGLE_STAFF 0x502b
454#define USB_DEVICE_ID_GOOGLE_WAND 0x502d 454#define USB_DEVICE_ID_GOOGLE_WAND 0x502d
455#define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030
455 456
456#define USB_VENDOR_ID_GOTOP 0x08f2 457#define USB_VENDOR_ID_GOTOP 0x08f2
457#define USB_DEVICE_ID_SUPER_Q2 0x007f 458#define USB_DEVICE_ID_SUPER_Q2 0x007f
diff --git a/drivers/hid/hid-steam.c b/drivers/hid/hid-steam.c
index cb86cc834201..0422ec2b13d2 100644
--- a/drivers/hid/hid-steam.c
+++ b/drivers/hid/hid-steam.c
@@ -573,7 +573,7 @@ static bool steam_is_valve_interface(struct hid_device *hdev)
573 573
574static int steam_client_ll_parse(struct hid_device *hdev) 574static int steam_client_ll_parse(struct hid_device *hdev)
575{ 575{
576 struct steam_device *steam = hid_get_drvdata(hdev); 576 struct steam_device *steam = hdev->driver_data;
577 577
578 return hid_parse_report(hdev, steam->hdev->dev_rdesc, 578 return hid_parse_report(hdev, steam->hdev->dev_rdesc,
579 steam->hdev->dev_rsize); 579 steam->hdev->dev_rsize);
@@ -590,7 +590,7 @@ static void steam_client_ll_stop(struct hid_device *hdev)
590 590
591static int steam_client_ll_open(struct hid_device *hdev) 591static int steam_client_ll_open(struct hid_device *hdev)
592{ 592{
593 struct steam_device *steam = hid_get_drvdata(hdev); 593 struct steam_device *steam = hdev->driver_data;
594 int ret; 594 int ret;
595 595
596 ret = hid_hw_open(steam->hdev); 596 ret = hid_hw_open(steam->hdev);
@@ -605,7 +605,7 @@ static int steam_client_ll_open(struct hid_device *hdev)
605 605
606static void steam_client_ll_close(struct hid_device *hdev) 606static void steam_client_ll_close(struct hid_device *hdev)
607{ 607{
608 struct steam_device *steam = hid_get_drvdata(hdev); 608 struct steam_device *steam = hdev->driver_data;
609 609
610 mutex_lock(&steam->mutex); 610 mutex_lock(&steam->mutex);
611 steam->client_opened = false; 611 steam->client_opened = false;
@@ -623,7 +623,7 @@ static int steam_client_ll_raw_request(struct hid_device *hdev,
623 size_t count, unsigned char report_type, 623 size_t count, unsigned char report_type,
624 int reqtype) 624 int reqtype)
625{ 625{
626 struct steam_device *steam = hid_get_drvdata(hdev); 626 struct steam_device *steam = hdev->driver_data;
627 627
628 return hid_hw_raw_request(steam->hdev, reportnum, buf, count, 628 return hid_hw_raw_request(steam->hdev, reportnum, buf, count,
629 report_type, reqtype); 629 report_type, reqtype);
@@ -710,7 +710,7 @@ static int steam_probe(struct hid_device *hdev,
710 ret = PTR_ERR(steam->client_hdev); 710 ret = PTR_ERR(steam->client_hdev);
711 goto client_hdev_fail; 711 goto client_hdev_fail;
712 } 712 }
713 hid_set_drvdata(steam->client_hdev, steam); 713 steam->client_hdev->driver_data = steam;
714 714
715 /* 715 /*
716 * With the real steam controller interface, do not connect hidraw. 716 * With the real steam controller interface, do not connect hidraw.
diff --git a/drivers/hid/intel-ish-hid/ipc/pci-ish.c b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
index 582e449be9fe..a2c53ea3b5ed 100644
--- a/drivers/hid/intel-ish-hid/ipc/pci-ish.c
+++ b/drivers/hid/intel-ish-hid/ipc/pci-ish.c
@@ -205,8 +205,7 @@ static void ish_remove(struct pci_dev *pdev)
205 kfree(ishtp_dev); 205 kfree(ishtp_dev);
206} 206}
207 207
208#ifdef CONFIG_PM 208static struct device __maybe_unused *ish_resume_device;
209static struct device *ish_resume_device;
210 209
211/* 50ms to get resume response */ 210/* 50ms to get resume response */
212#define WAIT_FOR_RESUME_ACK_MS 50 211#define WAIT_FOR_RESUME_ACK_MS 50
@@ -220,7 +219,7 @@ static struct device *ish_resume_device;
220 * in that case a simple resume message is enough, others we need 219 * in that case a simple resume message is enough, others we need
221 * a reset sequence. 220 * a reset sequence.
222 */ 221 */
223static void ish_resume_handler(struct work_struct *work) 222static void __maybe_unused ish_resume_handler(struct work_struct *work)
224{ 223{
225 struct pci_dev *pdev = to_pci_dev(ish_resume_device); 224 struct pci_dev *pdev = to_pci_dev(ish_resume_device);
226 struct ishtp_device *dev = pci_get_drvdata(pdev); 225 struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -262,7 +261,7 @@ static void ish_resume_handler(struct work_struct *work)
262 * 261 *
263 * Return: 0 to the pm core 262 * Return: 0 to the pm core
264 */ 263 */
265static int ish_suspend(struct device *device) 264static int __maybe_unused ish_suspend(struct device *device)
266{ 265{
267 struct pci_dev *pdev = to_pci_dev(device); 266 struct pci_dev *pdev = to_pci_dev(device);
268 struct ishtp_device *dev = pci_get_drvdata(pdev); 267 struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -288,7 +287,7 @@ static int ish_suspend(struct device *device)
288 return 0; 287 return 0;
289} 288}
290 289
291static DECLARE_WORK(resume_work, ish_resume_handler); 290static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
292/** 291/**
293 * ish_resume() - ISH resume callback 292 * ish_resume() - ISH resume callback
294 * @device: device pointer 293 * @device: device pointer
@@ -297,7 +296,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler);
297 * 296 *
298 * Return: 0 to the pm core 297 * Return: 0 to the pm core
299 */ 298 */
300static int ish_resume(struct device *device) 299static int __maybe_unused ish_resume(struct device *device)
301{ 300{
302 struct pci_dev *pdev = to_pci_dev(device); 301 struct pci_dev *pdev = to_pci_dev(device);
303 struct ishtp_device *dev = pci_get_drvdata(pdev); 302 struct ishtp_device *dev = pci_get_drvdata(pdev);
@@ -311,21 +310,14 @@ static int ish_resume(struct device *device)
311 return 0; 310 return 0;
312} 311}
313 312
314static const struct dev_pm_ops ish_pm_ops = { 313static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
315 .suspend = ish_suspend,
316 .resume = ish_resume,
317};
318#define ISHTP_ISH_PM_OPS (&ish_pm_ops)
319#else
320#define ISHTP_ISH_PM_OPS NULL
321#endif /* CONFIG_PM */
322 314
323static struct pci_driver ish_driver = { 315static struct pci_driver ish_driver = {
324 .name = KBUILD_MODNAME, 316 .name = KBUILD_MODNAME,
325 .id_table = ish_pci_tbl, 317 .id_table = ish_pci_tbl,
326 .probe = ish_probe, 318 .probe = ish_probe,
327 .remove = ish_remove, 319 .remove = ish_remove,
328 .driver.pm = ISHTP_ISH_PM_OPS, 320 .driver.pm = &ish_pm_ops,
329}; 321};
330 322
331module_pci_driver(ish_driver); 323module_pci_driver(ish_driver);
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index c101369b51de..d6797535fff9 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -395,6 +395,14 @@ static void wacom_usage_mapping(struct hid_device *hdev,
395 } 395 }
396 } 396 }
397 397
398 /* 2nd-generation Intuos Pro Large has incorrect Y maximum */
399 if (hdev->vendor == USB_VENDOR_ID_WACOM &&
400 hdev->product == 0x0358 &&
401 WACOM_PEN_FIELD(field) &&
402 wacom_equivalent_usage(usage->hid) == HID_GD_Y) {
403 field->logical_maximum = 43200;
404 }
405
398 switch (usage->hid) { 406 switch (usage->hid) {
399 case HID_GD_X: 407 case HID_GD_X:
400 features->x_max = field->logical_maximum; 408 features->x_max = field->logical_maximum;