diff options
| -rw-r--r-- | drivers/hid/hid-core.c | 1 | ||||
| -rw-r--r-- | drivers/hid/hid-egalax.c | 9 | ||||
| -rw-r--r-- | drivers/hid/hid-ids.h | 1 | ||||
| -rw-r--r-- | drivers/hid/hid-picolcd.c | 4 | ||||
| -rw-r--r-- | drivers/hid/usbhid/hiddev.c | 11 |
5 files changed, 20 insertions, 6 deletions
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index e635199a0cd2..0c52899be964 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c | |||
| @@ -1299,6 +1299,7 @@ static const struct hid_device_id hid_blacklist[] = { | |||
| 1299 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, | 1299 | { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, |
| 1300 | { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) }, | 1300 | { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) }, |
| 1301 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) }, | 1301 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) }, |
| 1302 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) }, | ||
| 1302 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) }, | 1303 | { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) }, |
| 1303 | { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) }, | 1304 | { HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) }, |
| 1304 | { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) }, | 1305 | { HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) }, |
diff --git a/drivers/hid/hid-egalax.c b/drivers/hid/hid-egalax.c index f44bdc084cb2..8ca7f65cf2f8 100644 --- a/drivers/hid/hid-egalax.c +++ b/drivers/hid/hid-egalax.c | |||
| @@ -159,6 +159,13 @@ static int egalax_event(struct hid_device *hid, struct hid_field *field, | |||
| 159 | { | 159 | { |
| 160 | struct egalax_data *td = hid_get_drvdata(hid); | 160 | struct egalax_data *td = hid_get_drvdata(hid); |
| 161 | 161 | ||
| 162 | /* Note, eGalax has two product lines: the first is resistive and | ||
| 163 | * uses a standard parallel multitouch protocol (product ID == | ||
| 164 | * 48xx). The second is capacitive and uses an unusual "serial" | ||
| 165 | * protocol with a different message for each multitouch finger | ||
| 166 | * (product ID == 72xx). We do not yet generate a correct event | ||
| 167 | * sequence for the capacitive/serial protocol. | ||
| 168 | */ | ||
| 162 | if (hid->claimed & HID_CLAIMED_INPUT) { | 169 | if (hid->claimed & HID_CLAIMED_INPUT) { |
| 163 | struct input_dev *input = field->hidinput->input; | 170 | struct input_dev *input = field->hidinput->input; |
| 164 | 171 | ||
| @@ -246,6 +253,8 @@ static void egalax_remove(struct hid_device *hdev) | |||
| 246 | static const struct hid_device_id egalax_devices[] = { | 253 | static const struct hid_device_id egalax_devices[] = { |
| 247 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | 254 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, |
| 248 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) }, | 255 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) }, |
| 256 | { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, | ||
| 257 | USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) }, | ||
| 249 | { } | 258 | { } |
| 250 | }; | 259 | }; |
| 251 | MODULE_DEVICE_TABLE(hid, egalax_devices); | 260 | MODULE_DEVICE_TABLE(hid, egalax_devices); |
diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index d3fc13ae094d..85c6d13c9ffa 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h | |||
| @@ -188,6 +188,7 @@ | |||
| 188 | #define USB_VENDOR_ID_DWAV 0x0eef | 188 | #define USB_VENDOR_ID_DWAV 0x0eef |
| 189 | #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001 | 189 | #define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001 |
| 190 | #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d | 190 | #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d |
| 191 | #define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c | ||
| 191 | 192 | ||
| 192 | #define USB_VENDOR_ID_ELECOM 0x056e | 193 | #define USB_VENDOR_ID_ELECOM 0x056e |
| 193 | #define USB_DEVICE_ID_ELECOM_BM084 0x0061 | 194 | #define USB_DEVICE_ID_ELECOM_BM084 0x0061 |
diff --git a/drivers/hid/hid-picolcd.c b/drivers/hid/hid-picolcd.c index 346f0e34987e..bc2e07740628 100644 --- a/drivers/hid/hid-picolcd.c +++ b/drivers/hid/hid-picolcd.c | |||
| @@ -547,11 +547,11 @@ static void picolcd_fb_destroy(struct fb_info *info) | |||
| 547 | ref_cnt--; | 547 | ref_cnt--; |
| 548 | mutex_lock(&info->lock); | 548 | mutex_lock(&info->lock); |
| 549 | (*ref_cnt)--; | 549 | (*ref_cnt)--; |
| 550 | may_release = !ref_cnt; | 550 | may_release = !*ref_cnt; |
| 551 | mutex_unlock(&info->lock); | 551 | mutex_unlock(&info->lock); |
| 552 | if (may_release) { | 552 | if (may_release) { |
| 553 | framebuffer_release(info); | ||
| 554 | vfree((u8 *)info->fix.smem_start); | 553 | vfree((u8 *)info->fix.smem_start); |
| 554 | framebuffer_release(info); | ||
| 555 | } | 555 | } |
| 556 | } | 556 | } |
| 557 | 557 | ||
diff --git a/drivers/hid/usbhid/hiddev.c b/drivers/hid/usbhid/hiddev.c index 254a003af048..0a29c51114aa 100644 --- a/drivers/hid/usbhid/hiddev.c +++ b/drivers/hid/usbhid/hiddev.c | |||
| @@ -266,13 +266,15 @@ static int hiddev_open(struct inode *inode, struct file *file) | |||
| 266 | { | 266 | { |
| 267 | struct hiddev_list *list; | 267 | struct hiddev_list *list; |
| 268 | struct usb_interface *intf; | 268 | struct usb_interface *intf; |
| 269 | struct hid_device *hid; | ||
| 269 | struct hiddev *hiddev; | 270 | struct hiddev *hiddev; |
| 270 | int res; | 271 | int res; |
| 271 | 272 | ||
| 272 | intf = usb_find_interface(&hiddev_driver, iminor(inode)); | 273 | intf = usb_find_interface(&hiddev_driver, iminor(inode)); |
| 273 | if (!intf) | 274 | if (!intf) |
| 274 | return -ENODEV; | 275 | return -ENODEV; |
| 275 | hiddev = usb_get_intfdata(intf); | 276 | hid = usb_get_intfdata(intf); |
| 277 | hiddev = hid->hiddev; | ||
| 276 | 278 | ||
| 277 | if (!(list = kzalloc(sizeof(struct hiddev_list), GFP_KERNEL))) | 279 | if (!(list = kzalloc(sizeof(struct hiddev_list), GFP_KERNEL))) |
| 278 | return -ENOMEM; | 280 | return -ENOMEM; |
| @@ -587,7 +589,7 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 587 | struct hiddev_list *list = file->private_data; | 589 | struct hiddev_list *list = file->private_data; |
| 588 | struct hiddev *hiddev = list->hiddev; | 590 | struct hiddev *hiddev = list->hiddev; |
| 589 | struct hid_device *hid = hiddev->hid; | 591 | struct hid_device *hid = hiddev->hid; |
| 590 | struct usb_device *dev = hid_to_usb_dev(hid); | 592 | struct usb_device *dev; |
| 591 | struct hiddev_collection_info cinfo; | 593 | struct hiddev_collection_info cinfo; |
| 592 | struct hiddev_report_info rinfo; | 594 | struct hiddev_report_info rinfo; |
| 593 | struct hiddev_field_info finfo; | 595 | struct hiddev_field_info finfo; |
| @@ -601,9 +603,11 @@ static long hiddev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) | |||
| 601 | /* Called without BKL by compat methods so no BKL taken */ | 603 | /* Called without BKL by compat methods so no BKL taken */ |
| 602 | 604 | ||
| 603 | /* FIXME: Who or what stop this racing with a disconnect ?? */ | 605 | /* FIXME: Who or what stop this racing with a disconnect ?? */ |
| 604 | if (!hiddev->exist) | 606 | if (!hiddev->exist || !hid) |
| 605 | return -EIO; | 607 | return -EIO; |
| 606 | 608 | ||
| 609 | dev = hid_to_usb_dev(hid); | ||
| 610 | |||
| 607 | switch (cmd) { | 611 | switch (cmd) { |
| 608 | 612 | ||
| 609 | case HIDIOCGVERSION: | 613 | case HIDIOCGVERSION: |
| @@ -888,7 +892,6 @@ int hiddev_connect(struct hid_device *hid, unsigned int force) | |||
| 888 | hid->hiddev = hiddev; | 892 | hid->hiddev = hiddev; |
| 889 | hiddev->hid = hid; | 893 | hiddev->hid = hid; |
| 890 | hiddev->exist = 1; | 894 | hiddev->exist = 1; |
| 891 | usb_set_intfdata(usbhid->intf, usbhid); | ||
| 892 | retval = usb_register_dev(usbhid->intf, &hiddev_class); | 895 | retval = usb_register_dev(usbhid->intf, &hiddev_class); |
| 893 | if (retval) { | 896 | if (retval) { |
| 894 | err_hid("Not able to get a minor for this device."); | 897 | err_hid("Not able to get a minor for this device."); |
