Commit 81e97f01 authored by Linus Torvalds's avatar Linus Torvalds

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
parents 6d90eb7b d471b6b2
...@@ -124,6 +124,8 @@ static const struct hid_device_id hammer_devices[] = { ...@@ -124,6 +124,8 @@ static const struct hid_device_id hammer_devices[] = {
USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) }, USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },
{ HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WAND) }, USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WAND) },
{ HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_WHISKERS) },
{ } { }
}; };
MODULE_DEVICE_TABLE(hid, hammer_devices); MODULE_DEVICE_TABLE(hid, hammer_devices);
......
...@@ -452,6 +452,7 @@ ...@@ -452,6 +452,7 @@
#define USB_DEVICE_ID_GOOGLE_TOUCH_ROSE 0x5028 #define USB_DEVICE_ID_GOOGLE_TOUCH_ROSE 0x5028
#define USB_DEVICE_ID_GOOGLE_STAFF 0x502b #define USB_DEVICE_ID_GOOGLE_STAFF 0x502b
#define USB_DEVICE_ID_GOOGLE_WAND 0x502d #define USB_DEVICE_ID_GOOGLE_WAND 0x502d
#define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030
#define USB_VENDOR_ID_GOTOP 0x08f2 #define USB_VENDOR_ID_GOTOP 0x08f2
#define USB_DEVICE_ID_SUPER_Q2 0x007f #define USB_DEVICE_ID_SUPER_Q2 0x007f
......
...@@ -573,7 +573,7 @@ static bool steam_is_valve_interface(struct hid_device *hdev) ...@@ -573,7 +573,7 @@ static bool steam_is_valve_interface(struct hid_device *hdev)
static int steam_client_ll_parse(struct hid_device *hdev) static int steam_client_ll_parse(struct hid_device *hdev)
{ {
struct steam_device *steam = hid_get_drvdata(hdev); struct steam_device *steam = hdev->driver_data;
return hid_parse_report(hdev, steam->hdev->dev_rdesc, return hid_parse_report(hdev, steam->hdev->dev_rdesc,
steam->hdev->dev_rsize); steam->hdev->dev_rsize);
...@@ -590,7 +590,7 @@ static void steam_client_ll_stop(struct hid_device *hdev) ...@@ -590,7 +590,7 @@ static void steam_client_ll_stop(struct hid_device *hdev)
static int steam_client_ll_open(struct hid_device *hdev) static int steam_client_ll_open(struct hid_device *hdev)
{ {
struct steam_device *steam = hid_get_drvdata(hdev); struct steam_device *steam = hdev->driver_data;
int ret; int ret;
ret = hid_hw_open(steam->hdev); ret = hid_hw_open(steam->hdev);
...@@ -605,7 +605,7 @@ static int steam_client_ll_open(struct hid_device *hdev) ...@@ -605,7 +605,7 @@ static int steam_client_ll_open(struct hid_device *hdev)
static void steam_client_ll_close(struct hid_device *hdev) static void steam_client_ll_close(struct hid_device *hdev)
{ {
struct steam_device *steam = hid_get_drvdata(hdev); struct steam_device *steam = hdev->driver_data;
mutex_lock(&steam->mutex); mutex_lock(&steam->mutex);
steam->client_opened = false; steam->client_opened = false;
...@@ -623,7 +623,7 @@ static int steam_client_ll_raw_request(struct hid_device *hdev, ...@@ -623,7 +623,7 @@ static int steam_client_ll_raw_request(struct hid_device *hdev,
size_t count, unsigned char report_type, size_t count, unsigned char report_type,
int reqtype) int reqtype)
{ {
struct steam_device *steam = hid_get_drvdata(hdev); struct steam_device *steam = hdev->driver_data;
return hid_hw_raw_request(steam->hdev, reportnum, buf, count, return hid_hw_raw_request(steam->hdev, reportnum, buf, count,
report_type, reqtype); report_type, reqtype);
...@@ -710,7 +710,7 @@ static int steam_probe(struct hid_device *hdev, ...@@ -710,7 +710,7 @@ static int steam_probe(struct hid_device *hdev,
ret = PTR_ERR(steam->client_hdev); ret = PTR_ERR(steam->client_hdev);
goto client_hdev_fail; goto client_hdev_fail;
} }
hid_set_drvdata(steam->client_hdev, steam); steam->client_hdev->driver_data = steam;
/* /*
* With the real steam controller interface, do not connect hidraw. * With the real steam controller interface, do not connect hidraw.
......
...@@ -205,8 +205,7 @@ static void ish_remove(struct pci_dev *pdev) ...@@ -205,8 +205,7 @@ static void ish_remove(struct pci_dev *pdev)
kfree(ishtp_dev); kfree(ishtp_dev);
} }
#ifdef CONFIG_PM static struct device __maybe_unused *ish_resume_device;
static struct device *ish_resume_device;
/* 50ms to get resume response */ /* 50ms to get resume response */
#define WAIT_FOR_RESUME_ACK_MS 50 #define WAIT_FOR_RESUME_ACK_MS 50
...@@ -220,7 +219,7 @@ static struct device *ish_resume_device; ...@@ -220,7 +219,7 @@ static struct device *ish_resume_device;
* in that case a simple resume message is enough, others we need * in that case a simple resume message is enough, others we need
* a reset sequence. * a reset sequence.
*/ */
static void ish_resume_handler(struct work_struct *work) static void __maybe_unused ish_resume_handler(struct work_struct *work)
{ {
struct pci_dev *pdev = to_pci_dev(ish_resume_device); struct pci_dev *pdev = to_pci_dev(ish_resume_device);
struct ishtp_device *dev = pci_get_drvdata(pdev); struct ishtp_device *dev = pci_get_drvdata(pdev);
...@@ -262,7 +261,7 @@ static void ish_resume_handler(struct work_struct *work) ...@@ -262,7 +261,7 @@ static void ish_resume_handler(struct work_struct *work)
* *
* Return: 0 to the pm core * Return: 0 to the pm core
*/ */
static int ish_suspend(struct device *device) static int __maybe_unused ish_suspend(struct device *device)
{ {
struct pci_dev *pdev = to_pci_dev(device); struct pci_dev *pdev = to_pci_dev(device);
struct ishtp_device *dev = pci_get_drvdata(pdev); struct ishtp_device *dev = pci_get_drvdata(pdev);
...@@ -288,7 +287,7 @@ static int ish_suspend(struct device *device) ...@@ -288,7 +287,7 @@ static int ish_suspend(struct device *device)
return 0; return 0;
} }
static DECLARE_WORK(resume_work, ish_resume_handler); static __maybe_unused DECLARE_WORK(resume_work, ish_resume_handler);
/** /**
* ish_resume() - ISH resume callback * ish_resume() - ISH resume callback
* @device: device pointer * @device: device pointer
...@@ -297,7 +296,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler); ...@@ -297,7 +296,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler);
* *
* Return: 0 to the pm core * Return: 0 to the pm core
*/ */
static int ish_resume(struct device *device) static int __maybe_unused ish_resume(struct device *device)
{ {
struct pci_dev *pdev = to_pci_dev(device); struct pci_dev *pdev = to_pci_dev(device);
struct ishtp_device *dev = pci_get_drvdata(pdev); struct ishtp_device *dev = pci_get_drvdata(pdev);
...@@ -311,21 +310,14 @@ static int ish_resume(struct device *device) ...@@ -311,21 +310,14 @@ static int ish_resume(struct device *device)
return 0; return 0;
} }
static const struct dev_pm_ops ish_pm_ops = { static SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
.suspend = ish_suspend,
.resume = ish_resume,
};
#define ISHTP_ISH_PM_OPS (&ish_pm_ops)
#else
#define ISHTP_ISH_PM_OPS NULL
#endif /* CONFIG_PM */
static struct pci_driver ish_driver = { static struct pci_driver ish_driver = {
.name = KBUILD_MODNAME, .name = KBUILD_MODNAME,
.id_table = ish_pci_tbl, .id_table = ish_pci_tbl,
.probe = ish_probe, .probe = ish_probe,
.remove = ish_remove, .remove = ish_remove,
.driver.pm = ISHTP_ISH_PM_OPS, .driver.pm = &ish_pm_ops,
}; };
module_pci_driver(ish_driver); module_pci_driver(ish_driver);
......
...@@ -395,6 +395,14 @@ static void wacom_usage_mapping(struct hid_device *hdev, ...@@ -395,6 +395,14 @@ static void wacom_usage_mapping(struct hid_device *hdev,
} }
} }
/* 2nd-generation Intuos Pro Large has incorrect Y maximum */
if (hdev->vendor == USB_VENDOR_ID_WACOM &&
hdev->product == 0x0358 &&
WACOM_PEN_FIELD(field) &&
wacom_equivalent_usage(usage->hid) == HID_GD_Y) {
field->logical_maximum = 43200;
}
switch (usage->hid) { switch (usage->hid) {
case HID_GD_X: case HID_GD_X:
features->x_max = field->logical_maximum; features->x_max = field->logical_maximum;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment