Merge branch 'for-4.14/wacom' into for-linus
- name generation improvement for Wacom devices from Jason Gerecke - Kconfig dependency fix for Wacom driver from Arnd Bergmann
This commit is contained in:
commit
de6c5070ad
7 changed files with 50 additions and 42 deletions
|
@ -924,7 +924,7 @@ config HID_UDRAW_PS3
|
|||
|
||||
config HID_WACOM
|
||||
tristate "Wacom Intuos/Graphire tablet support (USB)"
|
||||
depends on HID
|
||||
depends on USB_HID
|
||||
select POWER_SUPPLY
|
||||
select NEW_LEDS
|
||||
select LEDS_CLASS
|
||||
|
|
|
@ -780,7 +780,7 @@ static int i2c_hid_power(struct hid_device *hid, int lvl)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static struct hid_ll_driver i2c_hid_ll_driver = {
|
||||
struct hid_ll_driver i2c_hid_ll_driver = {
|
||||
.parse = i2c_hid_parse,
|
||||
.start = i2c_hid_start,
|
||||
.stop = i2c_hid_stop,
|
||||
|
@ -790,6 +790,7 @@ static struct hid_ll_driver i2c_hid_ll_driver = {
|
|||
.output_report = i2c_hid_output_report,
|
||||
.raw_request = i2c_hid_raw_request,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(i2c_hid_ll_driver);
|
||||
|
||||
static int i2c_hid_init_irq(struct i2c_client *client)
|
||||
{
|
||||
|
|
|
@ -369,7 +369,7 @@ static int uhid_hid_output_report(struct hid_device *hid, __u8 *buf,
|
|||
return uhid_hid_output_raw(hid, buf, count, HID_OUTPUT_REPORT);
|
||||
}
|
||||
|
||||
static struct hid_ll_driver uhid_hid_driver = {
|
||||
struct hid_ll_driver uhid_hid_driver = {
|
||||
.start = uhid_hid_start,
|
||||
.stop = uhid_hid_stop,
|
||||
.open = uhid_hid_open,
|
||||
|
@ -378,6 +378,7 @@ static struct hid_ll_driver uhid_hid_driver = {
|
|||
.raw_request = uhid_hid_raw_request,
|
||||
.output_report = uhid_hid_output_report,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(uhid_hid_driver);
|
||||
|
||||
#ifdef CONFIG_COMPAT
|
||||
|
||||
|
|
|
@ -1265,7 +1265,7 @@ static int usbhid_idle(struct hid_device *hid, int report, int idle,
|
|||
return hid_set_idle(dev, ifnum, report, idle);
|
||||
}
|
||||
|
||||
static struct hid_ll_driver usb_hid_driver = {
|
||||
struct hid_ll_driver usb_hid_driver = {
|
||||
.parse = usbhid_parse,
|
||||
.start = usbhid_start,
|
||||
.stop = usbhid_stop,
|
||||
|
@ -1278,6 +1278,7 @@ static struct hid_ll_driver usb_hid_driver = {
|
|||
.output_report = usbhid_output_report,
|
||||
.idle = usbhid_idle,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(usb_hid_driver);
|
||||
|
||||
static int usbhid_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
{
|
||||
|
|
|
@ -1671,10 +1671,7 @@ static ssize_t wacom_show_remote_mode(struct kobject *kobj,
|
|||
u8 mode;
|
||||
|
||||
mode = wacom->led.groups[index].select;
|
||||
if (mode >= 0 && mode < 3)
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", mode);
|
||||
else
|
||||
return snprintf(buf, PAGE_SIZE, "%d\n", -1);
|
||||
return sprintf(buf, "%d\n", mode < 3 ? mode : -1);
|
||||
}
|
||||
|
||||
#define DEVICE_EKR_ATTR_GROUP(SET_ID) \
|
||||
|
@ -2028,41 +2025,37 @@ static void wacom_update_name(struct wacom *wacom, const char *suffix)
|
|||
|
||||
/* Generic devices name unspecified */
|
||||
if ((features->type == HID_GENERIC) && !strcmp("Wacom HID", features->name)) {
|
||||
if (strstr(wacom->hdev->name, "Wacom") ||
|
||||
strstr(wacom->hdev->name, "wacom") ||
|
||||
strstr(wacom->hdev->name, "WACOM")) {
|
||||
/* name is in HID descriptor, use it */
|
||||
strlcpy(name, wacom->hdev->name, sizeof(name));
|
||||
char *product_name = wacom->hdev->name;
|
||||
|
||||
/* strip out excess whitespaces */
|
||||
while (1) {
|
||||
char *gap = strstr(name, " ");
|
||||
if (gap == NULL)
|
||||
break;
|
||||
/* shift everything including the terminator */
|
||||
memmove(gap, gap+1, strlen(gap));
|
||||
}
|
||||
|
||||
/* strip off excessive prefixing */
|
||||
if (strstr(name, "Wacom Co.,Ltd. Wacom ") == name) {
|
||||
int n = strlen(name);
|
||||
int x = strlen("Wacom Co.,Ltd. ");
|
||||
memmove(name, name+x, n-x+1);
|
||||
}
|
||||
if (strstr(name, "Wacom Co., Ltd. Wacom ") == name) {
|
||||
int n = strlen(name);
|
||||
int x = strlen("Wacom Co., Ltd. ");
|
||||
memmove(name, name+x, n-x+1);
|
||||
}
|
||||
|
||||
/* get rid of trailing whitespace */
|
||||
if (name[strlen(name)-1] == ' ')
|
||||
name[strlen(name)-1] = '\0';
|
||||
} else {
|
||||
/* no meaningful name retrieved. use product ID */
|
||||
snprintf(name, sizeof(name),
|
||||
"%s %X", features->name, wacom->hdev->product);
|
||||
if (hid_is_using_ll_driver(wacom->hdev, &usb_hid_driver)) {
|
||||
struct usb_interface *intf = to_usb_interface(wacom->hdev->dev.parent);
|
||||
struct usb_device *dev = interface_to_usbdev(intf);
|
||||
product_name = dev->product;
|
||||
}
|
||||
|
||||
if (wacom->hdev->bus == BUS_I2C) {
|
||||
snprintf(name, sizeof(name), "%s %X",
|
||||
features->name, wacom->hdev->product);
|
||||
} else if (strstr(product_name, "Wacom") ||
|
||||
strstr(product_name, "wacom") ||
|
||||
strstr(product_name, "WACOM")) {
|
||||
strlcpy(name, product_name, sizeof(name));
|
||||
} else {
|
||||
snprintf(name, sizeof(name), "Wacom %s", product_name);
|
||||
}
|
||||
|
||||
/* strip out excess whitespaces */
|
||||
while (1) {
|
||||
char *gap = strstr(name, " ");
|
||||
if (gap == NULL)
|
||||
break;
|
||||
/* shift everything including the terminator */
|
||||
memmove(gap, gap+1, strlen(gap));
|
||||
}
|
||||
|
||||
/* get rid of trailing whitespace */
|
||||
if (name[strlen(name)-1] == ' ')
|
||||
name[strlen(name)-1] = '\0';
|
||||
} else {
|
||||
strlcpy(name, features->name, sizeof(name));
|
||||
}
|
||||
|
|
|
@ -780,6 +780,17 @@ struct hid_ll_driver {
|
|||
int (*idle)(struct hid_device *hdev, int report, int idle, int reqtype);
|
||||
};
|
||||
|
||||
extern struct hid_ll_driver i2c_hid_ll_driver;
|
||||
extern struct hid_ll_driver hidp_hid_driver;
|
||||
extern struct hid_ll_driver uhid_hid_driver;
|
||||
extern struct hid_ll_driver usb_hid_driver;
|
||||
|
||||
static inline bool hid_is_using_ll_driver(struct hid_device *hdev,
|
||||
struct hid_ll_driver *driver)
|
||||
{
|
||||
return hdev->ll_driver == driver;
|
||||
}
|
||||
|
||||
#define PM_HINT_FULLON 1<<5
|
||||
#define PM_HINT_NORMAL 1<<1
|
||||
|
||||
|
|
|
@ -734,7 +734,7 @@ static void hidp_stop(struct hid_device *hid)
|
|||
hid->claimed = 0;
|
||||
}
|
||||
|
||||
static struct hid_ll_driver hidp_hid_driver = {
|
||||
struct hid_ll_driver hidp_hid_driver = {
|
||||
.parse = hidp_parse,
|
||||
.start = hidp_start,
|
||||
.stop = hidp_stop,
|
||||
|
@ -743,6 +743,7 @@ static struct hid_ll_driver hidp_hid_driver = {
|
|||
.raw_request = hidp_raw_request,
|
||||
.output_report = hidp_output_report,
|
||||
};
|
||||
EXPORT_SYMBOL_GPL(hidp_hid_driver);
|
||||
|
||||
/* This function sets up the hid device. It does not add it
|
||||
to the HID system. That is done in hidp_add_connection(). */
|
||||
|
|
Loading…
Reference in a new issue