mirror of
https://github.com/FEX-Emu/linux.git
synced 2025-03-01 17:11:59 +00:00
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:
commit
81e97f0137
@ -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 @@
|
|||||||
#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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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)
|
|||||||
|
|
||||||
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,
|
|||||||
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,
|
|||||||
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)
|
|||||||
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;
|
|||||||
* 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)
|
|||||||
*
|
*
|
||||||
* 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)
|
|||||||
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);
|
|||||||
*
|
*
|
||||||
* 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)
|
|||||||
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,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 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;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user