mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-11-11 04:18:39 +08:00
Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid
Pull HID fixes from Jiri Kosina: "A few tiny HID subsystem fixes for 3.16" * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: use multi input quirk for 22b9:2968 HID: sensor-hub: fix potential memory leak HID: usbhid: quirk for PM1610 and PM1640 Touchscreen. HID: rmi: Protect PM-only functions by #ifdef CONFIG_PM HID: sensor-hub: introduce Kconfig dependency on IOMEM HID: sensor-hub: make dyn_callback_lock IRQ-safe
This commit is contained in:
commit
4c2f503aad
@ -810,7 +810,7 @@ config HID_ZYDACRON
|
||||
|
||||
config HID_SENSOR_HUB
|
||||
tristate "HID Sensors framework support"
|
||||
depends on HID
|
||||
depends on HID && HAS_IOMEM
|
||||
select MFD_CORE
|
||||
default n
|
||||
---help---
|
||||
|
@ -323,6 +323,7 @@
|
||||
|
||||
#define USB_VENDOR_ID_ETURBOTOUCH 0x22b9
|
||||
#define USB_DEVICE_ID_ETURBOTOUCH 0x0006
|
||||
#define USB_DEVICE_ID_ETURBOTOUCH_2968 0x2968
|
||||
|
||||
#define USB_VENDOR_ID_EZKEY 0x0518
|
||||
#define USB_DEVICE_ID_BTC_8193 0x0002
|
||||
@ -715,6 +716,8 @@
|
||||
|
||||
#define USB_VENDOR_ID_PENMOUNT 0x14e1
|
||||
#define USB_DEVICE_ID_PENMOUNT_PCI 0x3500
|
||||
#define USB_DEVICE_ID_PENMOUNT_1610 0x1610
|
||||
#define USB_DEVICE_ID_PENMOUNT_1640 0x1640
|
||||
|
||||
#define USB_VENDOR_ID_PETALYNX 0x18b1
|
||||
#define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE 0x0037
|
||||
|
@ -428,6 +428,7 @@ static int rmi_raw_event(struct hid_device *hdev,
|
||||
return 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_PM
|
||||
static int rmi_post_reset(struct hid_device *hdev)
|
||||
{
|
||||
return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
|
||||
@ -437,6 +438,7 @@ static int rmi_post_resume(struct hid_device *hdev)
|
||||
{
|
||||
return rmi_set_mode(hdev, RMI_MODE_ATTN_REPORTS);
|
||||
}
|
||||
#endif /* CONFIG_PM */
|
||||
|
||||
#define RMI4_MAX_PAGE 0xff
|
||||
#define RMI4_PAGE_SIZE 0x0100
|
||||
|
@ -159,17 +159,18 @@ int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev,
|
||||
{
|
||||
struct hid_sensor_hub_callbacks_list *callback;
|
||||
struct sensor_hub_data *pdata = hid_get_drvdata(hsdev->hdev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&pdata->dyn_callback_lock);
|
||||
spin_lock_irqsave(&pdata->dyn_callback_lock, flags);
|
||||
list_for_each_entry(callback, &pdata->dyn_callback_list, list)
|
||||
if (callback->usage_id == usage_id &&
|
||||
callback->hsdev == hsdev) {
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
return -EINVAL;
|
||||
}
|
||||
callback = kzalloc(sizeof(*callback), GFP_ATOMIC);
|
||||
if (!callback) {
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
return -ENOMEM;
|
||||
}
|
||||
callback->hsdev = hsdev;
|
||||
@ -177,7 +178,7 @@ int sensor_hub_register_callback(struct hid_sensor_hub_device *hsdev,
|
||||
callback->usage_id = usage_id;
|
||||
callback->priv = NULL;
|
||||
list_add_tail(&callback->list, &pdata->dyn_callback_list);
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -188,8 +189,9 @@ int sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev,
|
||||
{
|
||||
struct hid_sensor_hub_callbacks_list *callback;
|
||||
struct sensor_hub_data *pdata = hid_get_drvdata(hsdev->hdev);
|
||||
unsigned long flags;
|
||||
|
||||
spin_lock(&pdata->dyn_callback_lock);
|
||||
spin_lock_irqsave(&pdata->dyn_callback_lock, flags);
|
||||
list_for_each_entry(callback, &pdata->dyn_callback_list, list)
|
||||
if (callback->usage_id == usage_id &&
|
||||
callback->hsdev == hsdev) {
|
||||
@ -197,7 +199,7 @@ int sensor_hub_remove_callback(struct hid_sensor_hub_device *hsdev,
|
||||
kfree(callback);
|
||||
break;
|
||||
}
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -378,15 +380,16 @@ static int sensor_hub_suspend(struct hid_device *hdev, pm_message_t message)
|
||||
{
|
||||
struct sensor_hub_data *pdata = hid_get_drvdata(hdev);
|
||||
struct hid_sensor_hub_callbacks_list *callback;
|
||||
unsigned long flags;
|
||||
|
||||
hid_dbg(hdev, " sensor_hub_suspend\n");
|
||||
spin_lock(&pdata->dyn_callback_lock);
|
||||
spin_lock_irqsave(&pdata->dyn_callback_lock, flags);
|
||||
list_for_each_entry(callback, &pdata->dyn_callback_list, list) {
|
||||
if (callback->usage_callback->suspend)
|
||||
callback->usage_callback->suspend(
|
||||
callback->hsdev, callback->priv);
|
||||
}
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -395,15 +398,16 @@ static int sensor_hub_resume(struct hid_device *hdev)
|
||||
{
|
||||
struct sensor_hub_data *pdata = hid_get_drvdata(hdev);
|
||||
struct hid_sensor_hub_callbacks_list *callback;
|
||||
unsigned long flags;
|
||||
|
||||
hid_dbg(hdev, " sensor_hub_resume\n");
|
||||
spin_lock(&pdata->dyn_callback_lock);
|
||||
spin_lock_irqsave(&pdata->dyn_callback_lock, flags);
|
||||
list_for_each_entry(callback, &pdata->dyn_callback_list, list) {
|
||||
if (callback->usage_callback->resume)
|
||||
callback->usage_callback->resume(
|
||||
callback->hsdev, callback->priv);
|
||||
}
|
||||
spin_unlock(&pdata->dyn_callback_lock);
|
||||
spin_unlock_irqrestore(&pdata->dyn_callback_lock, flags);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -632,6 +636,7 @@ static int sensor_hub_probe(struct hid_device *hdev,
|
||||
if (name == NULL) {
|
||||
hid_err(hdev, "Failed MFD device name\n");
|
||||
ret = -ENOMEM;
|
||||
kfree(hsdev);
|
||||
goto err_no_mem;
|
||||
}
|
||||
sd->hid_sensor_hub_client_devs[
|
||||
|
@ -49,6 +49,7 @@ static const struct hid_blacklist {
|
||||
|
||||
{ USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II, HID_QUIRK_MULTI_INPUT },
|
||||
{ USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH, HID_QUIRK_MULTI_INPUT },
|
||||
{ USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_2968, HID_QUIRK_MULTI_INPUT },
|
||||
{ USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_USB_JOYPAD, HID_QUIRK_MULTI_INPUT },
|
||||
{ USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
|
||||
{ USB_VENDOR_ID_PLAYDOTCOM, USB_DEVICE_ID_PLAYDOTCOM_EMS_USBII, HID_QUIRK_MULTI_INPUT },
|
||||
@ -76,6 +77,8 @@ static const struct hid_blacklist {
|
||||
{ USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GX680R_LED_PANEL, HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0750, HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE, HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640, HID_QUIRK_NOGET },
|
||||
{ USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN, HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN1, HID_QUIRK_NO_INIT_REPORTS },
|
||||
{ USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH_SCREEN2, HID_QUIRK_NO_INIT_REPORTS },
|
||||
|
@ -122,6 +122,7 @@ config PHY_SUN4I_USB
|
||||
|
||||
config PHY_SAMSUNG_USB2
|
||||
tristate "Samsung USB 2.0 PHY driver"
|
||||
depends on HAS_IOMEM
|
||||
select GENERIC_PHY
|
||||
select MFD_SYSCON
|
||||
help
|
||||
|
Loading…
Reference in New Issue
Block a user