Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 81e97f01 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
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
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -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);
+1 −0
Original line number Diff line number Diff line
@@ -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
+5 −5
Original line number Diff line number Diff line
@@ -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.
+7 −15
Original line number Diff line number Diff line
@@ -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);
+8 −0
Original line number Diff line number Diff line
@@ -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;