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
This commit is contained in:
Коммит
81e97f0137
|
@ -124,6 +124,8 @@ static const struct hid_device_id hammer_devices[] = {
|
|||
USB_VENDOR_ID_GOOGLE, USB_DEVICE_ID_GOOGLE_STAFF) },
|
||||
{ HID_DEVICE(BUS_USB, HID_GROUP_GENERIC,
|
||||
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);
|
||||
|
|
|
@ -452,6 +452,7 @@
|
|||
#define USB_DEVICE_ID_GOOGLE_TOUCH_ROSE 0x5028
|
||||
#define USB_DEVICE_ID_GOOGLE_STAFF 0x502b
|
||||
#define USB_DEVICE_ID_GOOGLE_WAND 0x502d
|
||||
#define USB_DEVICE_ID_GOOGLE_WHISKERS 0x5030
|
||||
|
||||
#define USB_VENDOR_ID_GOTOP 0x08f2
|
||||
#define USB_DEVICE_ID_SUPER_Q2 0x007f
|
||||
|
|
|
@ -573,7 +573,7 @@ static bool steam_is_valve_interface(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,
|
||||
steam->hdev->dev_rsize);
|
||||
|
@ -590,7 +590,7 @@ static void steam_client_ll_stop(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;
|
||||
|
||||
ret = hid_hw_open(steam->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)
|
||||
{
|
||||
struct steam_device *steam = hid_get_drvdata(hdev);
|
||||
struct steam_device *steam = hdev->driver_data;
|
||||
|
||||
mutex_lock(&steam->mutex);
|
||||
steam->client_opened = false;
|
||||
|
@ -623,7 +623,7 @@ static int steam_client_ll_raw_request(struct hid_device *hdev,
|
|||
size_t count, unsigned char report_type,
|
||||
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,
|
||||
report_type, reqtype);
|
||||
|
@ -710,7 +710,7 @@ static int steam_probe(struct hid_device *hdev,
|
|||
ret = PTR_ERR(steam->client_hdev);
|
||||
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.
|
||||
|
|
|
@ -205,8 +205,7 @@ static void ish_remove(struct pci_dev *pdev)
|
|||
kfree(ishtp_dev);
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static struct device *ish_resume_device;
|
||||
static struct device __maybe_unused *ish_resume_device;
|
||||
|
||||
/* 50ms to get resume response */
|
||||
#define WAIT_FOR_RESUME_ACK_MS 50
|
||||
|
@ -220,7 +219,7 @@ static struct device *ish_resume_device;
|
|||
* in that case a simple resume message is enough, others we need
|
||||
* 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 ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
|
@ -262,7 +261,7 @@ static void ish_resume_handler(struct work_struct *work)
|
|||
*
|
||||
* 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 ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
|
@ -288,7 +287,7 @@ static int ish_suspend(struct device *device)
|
|||
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
|
||||
* @device: device pointer
|
||||
|
@ -297,7 +296,7 @@ static DECLARE_WORK(resume_work, ish_resume_handler);
|
|||
*
|
||||
* 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 ishtp_device *dev = pci_get_drvdata(pdev);
|
||||
|
@ -311,21 +310,14 @@ static int ish_resume(struct device *device)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static const struct dev_pm_ops ish_pm_ops = {
|
||||
.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 SIMPLE_DEV_PM_OPS(ish_pm_ops, ish_suspend, ish_resume);
|
||||
|
||||
static struct pci_driver ish_driver = {
|
||||
.name = KBUILD_MODNAME,
|
||||
.id_table = ish_pci_tbl,
|
||||
.probe = ish_probe,
|
||||
.remove = ish_remove,
|
||||
.driver.pm = ISHTP_ISH_PM_OPS,
|
||||
.driver.pm = &ish_pm_ops,
|
||||
};
|
||||
|
||||
module_pci_driver(ish_driver);
|
||||
|
|
|
@ -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) {
|
||||
case HID_GD_X:
|
||||
features->x_max = field->logical_maximum;
|
||||
|
|
Загрузка…
Ссылка в новой задаче