Skip to content

Commit

Permalink
HID: lenovo-tpkbd: remove usb dependency
Browse files Browse the repository at this point in the history
lenovo tpkbd currently relies on the usb interface number to detect
if it is dealing with the touchpad interface or not.
As the report descriptors of the interface 0 does not contain the
button 3, we can use this to remove the need to check for usb.

Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
  • Loading branch information
Benjamin Tissoires authored and Jiri Kosina committed Sep 24, 2013
1 parent 01ab35f commit 0c52183
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 15 deletions.
2 changes: 1 addition & 1 deletion drivers/hid/Kconfig
Original file line number Diff line number Diff line change
Expand Up @@ -322,7 +322,7 @@ config HID_LCPOWER

config HID_LENOVO_TPKBD
tristate "Lenovo ThinkPad USB Keyboard with TrackPoint"
depends on USB_HID
depends on HID
select NEW_LEDS
select LEDS_CLASS
---help---
Expand Down
20 changes: 6 additions & 14 deletions drivers/hid/hid-lenovo-tpkbd.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,11 +14,9 @@
#include <linux/module.h>
#include <linux/sysfs.h>
#include <linux/device.h>
#include <linux/usb.h>
#include <linux/hid.h>
#include <linux/input.h>
#include <linux/leds.h>
#include "usbhid/usbhid.h"

#include "hid-ids.h"

Expand All @@ -41,10 +39,9 @@ static int tpkbd_input_mapping(struct hid_device *hdev,
struct hid_input *hi, struct hid_field *field,
struct hid_usage *usage, unsigned long **bit, int *max)
{
struct usbhid_device *uhdev;

uhdev = (struct usbhid_device *) hdev->driver_data;
if (uhdev->ifnum == 1 && usage->hid == (HID_UP_BUTTON | 0x0010)) {
if (usage->hid == (HID_UP_BUTTON | 0x0010)) {
/* mark the device as pointer */
hid_set_drvdata(hdev, (void *)1);
map_key_clear(KEY_MICMUTE);
return 1;
}
Expand Down Expand Up @@ -398,7 +395,6 @@ static int tpkbd_probe(struct hid_device *hdev,
const struct hid_device_id *id)
{
int ret;
struct usbhid_device *uhdev;

ret = hid_parse(hdev);
if (ret) {
Expand All @@ -412,9 +408,8 @@ static int tpkbd_probe(struct hid_device *hdev,
goto err;
}

uhdev = (struct usbhid_device *) hdev->driver_data;

if (uhdev->ifnum == 1) {
if (hid_get_drvdata(hdev)) {
hid_set_drvdata(hdev, NULL);
ret = tpkbd_probe_tp(hdev);
if (ret)
goto err_hid;
Expand Down Expand Up @@ -442,10 +437,7 @@ static void tpkbd_remove_tp(struct hid_device *hdev)

static void tpkbd_remove(struct hid_device *hdev)
{
struct usbhid_device *uhdev;

uhdev = (struct usbhid_device *) hdev->driver_data;
if (uhdev->ifnum == 1)
if (hid_get_drvdata(hdev))
tpkbd_remove_tp(hdev);

hid_hw_stop(hdev);
Expand Down

0 comments on commit 0c52183

Please sign in to comment.