diff options
author | Benjamin Tissoires <benjamin.tissoires@redhat.com> | 2016-07-13 12:06:02 -0400 |
---|---|---|
committer | Jiri Kosina <jkosina@suse.cz> | 2016-08-05 07:39:16 -0400 |
commit | 83e6b40e2de6f8416ce6c8c3ca6c4bc8acfa8b32 (patch) | |
tree | 615def2263f412c2f4971a96b164b765e5921f7b | |
parent | e6f2813a6d3fd924a399f8b19bcd8b11487155bc (diff) |
HID: wacom: EKR: have the wacom resources dynamically allocated
If we want to have one input device per remote, it's better to have our
own struct wacom_remote which is dynamically allocated.
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@redhat.com>
Acked-by: Ping Cheng <pingc@wacom.com>
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
-rw-r--r-- | drivers/hid/wacom.h | 13 | ||||
-rw-r--r-- | drivers/hid/wacom_sys.c | 133 | ||||
-rw-r--r-- | drivers/hid/wacom_wac.c | 12 | ||||
-rw-r--r-- | drivers/hid/wacom_wac.h | 2 |
4 files changed, 94 insertions, 66 deletions
diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h index 1797e4b3662a..110ea6793b99 100644 --- a/drivers/hid/wacom.h +++ b/drivers/hid/wacom.h | |||
@@ -116,6 +116,14 @@ struct wacom_group_leds { | |||
116 | u8 select; /* status led selector (0..3) */ | 116 | u8 select; /* status led selector (0..3) */ |
117 | }; | 117 | }; |
118 | 118 | ||
119 | struct wacom_remote { | ||
120 | spinlock_t remote_lock; | ||
121 | struct kfifo remote_fifo; | ||
122 | struct kobject *remote_dir; | ||
123 | struct attribute_group remote_group[WACOM_MAX_REMOTES]; | ||
124 | __u32 serial[WACOM_MAX_REMOTES]; | ||
125 | }; | ||
126 | |||
119 | struct wacom { | 127 | struct wacom { |
120 | struct usb_device *usbdev; | 128 | struct usb_device *usbdev; |
121 | struct usb_interface *intf; | 129 | struct usb_interface *intf; |
@@ -125,8 +133,7 @@ struct wacom { | |||
125 | struct work_struct wireless_work; | 133 | struct work_struct wireless_work; |
126 | struct work_struct battery_work; | 134 | struct work_struct battery_work; |
127 | struct work_struct remote_work; | 135 | struct work_struct remote_work; |
128 | spinlock_t remote_lock; | 136 | struct wacom_remote *remote; |
129 | struct kfifo remote_fifo; | ||
130 | struct wacom_leds { | 137 | struct wacom_leds { |
131 | struct wacom_group_leds *groups; | 138 | struct wacom_group_leds *groups; |
132 | u8 llv; /* status led brightness no button (1..127) */ | 139 | u8 llv; /* status led brightness no button (1..127) */ |
@@ -137,8 +144,6 @@ struct wacom { | |||
137 | struct power_supply *ac; | 144 | struct power_supply *ac; |
138 | struct power_supply_desc battery_desc; | 145 | struct power_supply_desc battery_desc; |
139 | struct power_supply_desc ac_desc; | 146 | struct power_supply_desc ac_desc; |
140 | struct kobject *remote_dir; | ||
141 | struct attribute_group remote_group[5]; | ||
142 | bool resources; | 147 | bool resources; |
143 | }; | 148 | }; |
144 | 149 | ||
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c index 7e01117433dd..64acb71adde4 100644 --- a/drivers/hid/wacom_sys.c +++ b/drivers/hid/wacom_sys.c | |||
@@ -1298,18 +1298,18 @@ static int wacom_remote_create_attr_group(struct wacom *wacom, __u32 serial, | |||
1298 | int index) | 1298 | int index) |
1299 | { | 1299 | { |
1300 | int error = 0; | 1300 | int error = 0; |
1301 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | 1301 | struct wacom_remote *remote = wacom->remote; |
1302 | 1302 | ||
1303 | wacom_wac->serial[index] = serial; | 1303 | remote->serial[index] = serial; |
1304 | 1304 | ||
1305 | wacom->remote_group[index].name = devm_kasprintf(&wacom->hdev->dev, | 1305 | remote->remote_group[index].name = devm_kasprintf(&wacom->hdev->dev, |
1306 | GFP_KERNEL, | 1306 | GFP_KERNEL, |
1307 | "%d", serial); | 1307 | "%d", serial); |
1308 | if (!wacom->remote_group[index].name) | 1308 | if (!remote->remote_group[index].name) |
1309 | return -ENOMEM; | 1309 | return -ENOMEM; |
1310 | 1310 | ||
1311 | error = sysfs_create_group(wacom->remote_dir, | 1311 | error = sysfs_create_group(remote->remote_dir, |
1312 | &wacom->remote_group[index]); | 1312 | &remote->remote_group[index]); |
1313 | if (error) { | 1313 | if (error) { |
1314 | hid_err(wacom->hdev, | 1314 | hid_err(wacom->hdev, |
1315 | "cannot create sysfs group err: %d\n", error); | 1315 | "cannot create sysfs group err: %d\n", error); |
@@ -1321,22 +1321,22 @@ static int wacom_remote_create_attr_group(struct wacom *wacom, __u32 serial, | |||
1321 | 1321 | ||
1322 | static void wacom_remote_destroy_attr_group(struct wacom *wacom, __u32 serial) | 1322 | static void wacom_remote_destroy_attr_group(struct wacom *wacom, __u32 serial) |
1323 | { | 1323 | { |
1324 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | 1324 | struct wacom_remote *remote = wacom->remote; |
1325 | int i; | 1325 | int i; |
1326 | 1326 | ||
1327 | if (!serial) | 1327 | if (!serial) |
1328 | return; | 1328 | return; |
1329 | 1329 | ||
1330 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { | 1330 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { |
1331 | if (wacom_wac->serial[i] == serial) { | 1331 | if (remote->serial[i] == serial) { |
1332 | wacom_wac->serial[i] = 0; | 1332 | remote->serial[i] = 0; |
1333 | wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; | 1333 | wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; |
1334 | if (wacom->remote_group[i].name) { | 1334 | if (remote->remote_group[i].name) { |
1335 | sysfs_remove_group(wacom->remote_dir, | 1335 | sysfs_remove_group(remote->remote_dir, |
1336 | &wacom->remote_group[i]); | 1336 | &remote->remote_group[i]); |
1337 | devm_kfree(&wacom->hdev->dev, | 1337 | devm_kfree(&wacom->hdev->dev, |
1338 | (char *)wacom->remote_group[i].name); | 1338 | (char *)remote->remote_group[i].name); |
1339 | wacom->remote_group[i].name = NULL; | 1339 | remote->remote_group[i].name = NULL; |
1340 | } | 1340 | } |
1341 | } | 1341 | } |
1342 | } | 1342 | } |
@@ -1398,27 +1398,57 @@ static const struct attribute *remote_unpair_attrs[] = { | |||
1398 | NULL | 1398 | NULL |
1399 | }; | 1399 | }; |
1400 | 1400 | ||
1401 | static int wacom_initialize_remote(struct wacom *wacom) | 1401 | static void wacom_remotes_destroy(void *data) |
1402 | { | ||
1403 | struct wacom *wacom = data; | ||
1404 | struct wacom_remote *remote = wacom->remote; | ||
1405 | |||
1406 | if (!remote) | ||
1407 | return; | ||
1408 | |||
1409 | kobject_put(remote->remote_dir); | ||
1410 | kfifo_free(&remote->remote_fifo); | ||
1411 | wacom->remote = NULL; | ||
1412 | } | ||
1413 | |||
1414 | static int wacom_initialize_remotes(struct wacom *wacom) | ||
1402 | { | 1415 | { |
1403 | int error = 0; | 1416 | int error = 0; |
1404 | struct wacom_wac *wacom_wac = &(wacom->wacom_wac); | 1417 | struct wacom_remote *remote; |
1405 | int i; | 1418 | int i; |
1406 | 1419 | ||
1407 | if (wacom->wacom_wac.features.type != REMOTE) | 1420 | if (wacom->wacom_wac.features.type != REMOTE) |
1408 | return 0; | 1421 | return 0; |
1409 | 1422 | ||
1410 | wacom->remote_group[0] = remote0_serial_group; | 1423 | remote = devm_kzalloc(&wacom->hdev->dev, sizeof(*wacom->remote), |
1411 | wacom->remote_group[1] = remote1_serial_group; | 1424 | GFP_KERNEL); |
1412 | wacom->remote_group[2] = remote2_serial_group; | 1425 | if (!remote) |
1413 | wacom->remote_group[3] = remote3_serial_group; | 1426 | return -ENOMEM; |
1414 | wacom->remote_group[4] = remote4_serial_group; | ||
1415 | 1427 | ||
1416 | wacom->remote_dir = kobject_create_and_add("wacom_remote", | 1428 | wacom->remote = remote; |
1417 | &wacom->hdev->dev.kobj); | 1429 | |
1418 | if (!wacom->remote_dir) | 1430 | spin_lock_init(&remote->remote_lock); |
1431 | |||
1432 | error = kfifo_alloc(&remote->remote_fifo, | ||
1433 | 5 * sizeof(struct wacom_remote_data), | ||
1434 | GFP_KERNEL); | ||
1435 | if (error) { | ||
1436 | hid_err(wacom->hdev, "failed allocating remote_fifo\n"); | ||
1419 | return -ENOMEM; | 1437 | return -ENOMEM; |
1438 | } | ||
1420 | 1439 | ||
1421 | error = sysfs_create_files(wacom->remote_dir, remote_unpair_attrs); | 1440 | remote->remote_group[0] = remote0_serial_group; |
1441 | remote->remote_group[1] = remote1_serial_group; | ||
1442 | remote->remote_group[2] = remote2_serial_group; | ||
1443 | remote->remote_group[3] = remote3_serial_group; | ||
1444 | remote->remote_group[4] = remote4_serial_group; | ||
1445 | |||
1446 | remote->remote_dir = kobject_create_and_add("wacom_remote", | ||
1447 | &wacom->hdev->dev.kobj); | ||
1448 | if (!remote->remote_dir) | ||
1449 | return -ENOMEM; | ||
1450 | |||
1451 | error = sysfs_create_files(remote->remote_dir, remote_unpair_attrs); | ||
1422 | 1452 | ||
1423 | if (error) { | 1453 | if (error) { |
1424 | hid_err(wacom->hdev, | 1454 | hid_err(wacom->hdev, |
@@ -1428,9 +1458,14 @@ static int wacom_initialize_remote(struct wacom *wacom) | |||
1428 | 1458 | ||
1429 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { | 1459 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { |
1430 | wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; | 1460 | wacom->led.groups[i].select = WACOM_STATUS_UNKNOWN; |
1431 | wacom_wac->serial[i] = 0; | 1461 | remote->serial[i] = 0; |
1432 | } | 1462 | } |
1433 | 1463 | ||
1464 | error = devm_add_action_or_reset(&wacom->hdev->dev, | ||
1465 | wacom_remotes_destroy, wacom); | ||
1466 | if (error) | ||
1467 | return error; | ||
1468 | |||
1434 | return 0; | 1469 | return 0; |
1435 | } | 1470 | } |
1436 | 1471 | ||
@@ -1740,7 +1775,7 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless) | |||
1740 | if (error) | 1775 | if (error) |
1741 | goto fail_leds; | 1776 | goto fail_leds; |
1742 | 1777 | ||
1743 | error = wacom_initialize_remote(wacom); | 1778 | error = wacom_initialize_remotes(wacom); |
1744 | if (error) | 1779 | if (error) |
1745 | goto fail_remote; | 1780 | goto fail_remote; |
1746 | } | 1781 | } |
@@ -1792,7 +1827,6 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless) | |||
1792 | fail_quirks: | 1827 | fail_quirks: |
1793 | hid_hw_stop(hdev); | 1828 | hid_hw_stop(hdev); |
1794 | fail_hw_start: | 1829 | fail_hw_start: |
1795 | kobject_put(wacom->remote_dir); | ||
1796 | fail_remote: | 1830 | fail_remote: |
1797 | fail_leds: | 1831 | fail_leds: |
1798 | fail_register_inputs: | 1832 | fail_register_inputs: |
@@ -1893,58 +1927,58 @@ fail: | |||
1893 | static void wacom_remote_work(struct work_struct *work) | 1927 | static void wacom_remote_work(struct work_struct *work) |
1894 | { | 1928 | { |
1895 | struct wacom *wacom = container_of(work, struct wacom, remote_work); | 1929 | struct wacom *wacom = container_of(work, struct wacom, remote_work); |
1896 | struct wacom_wac *wacom_wac = &wacom->wacom_wac; | 1930 | struct wacom_remote *remote = wacom->remote; |
1897 | struct wacom_remote_data data; | 1931 | struct wacom_remote_data data; |
1898 | unsigned long flags; | 1932 | unsigned long flags; |
1899 | unsigned int count; | 1933 | unsigned int count; |
1900 | u32 serial; | 1934 | u32 serial; |
1901 | int i, k; | 1935 | int i, k; |
1902 | 1936 | ||
1903 | spin_lock_irqsave(&wacom->remote_lock, flags); | 1937 | spin_lock_irqsave(&remote->remote_lock, flags); |
1904 | 1938 | ||
1905 | count = kfifo_out(&wacom->remote_fifo, &data, sizeof(data)); | 1939 | count = kfifo_out(&remote->remote_fifo, &data, sizeof(data)); |
1906 | 1940 | ||
1907 | if (count != sizeof(data)) { | 1941 | if (count != sizeof(data)) { |
1908 | hid_err(wacom->hdev, | 1942 | hid_err(wacom->hdev, |
1909 | "workitem triggered without status available\n"); | 1943 | "workitem triggered without status available\n"); |
1910 | spin_unlock_irqrestore(&wacom->remote_lock, flags); | 1944 | spin_unlock_irqrestore(&remote->remote_lock, flags); |
1911 | return; | 1945 | return; |
1912 | } | 1946 | } |
1913 | 1947 | ||
1914 | if (!kfifo_is_empty(&wacom->remote_fifo)) | 1948 | if (!kfifo_is_empty(&remote->remote_fifo)) |
1915 | wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_REMOTE); | 1949 | wacom_schedule_work(&wacom->wacom_wac, WACOM_WORKER_REMOTE); |
1916 | 1950 | ||
1917 | spin_unlock_irqrestore(&wacom->remote_lock, flags); | 1951 | spin_unlock_irqrestore(&remote->remote_lock, flags); |
1918 | 1952 | ||
1919 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { | 1953 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { |
1920 | serial = data.remote[i].serial; | 1954 | serial = data.remote[i].serial; |
1921 | if (data.remote[i].connected) { | 1955 | if (data.remote[i].connected) { |
1922 | 1956 | ||
1923 | if (wacom_wac->serial[i] == serial) | 1957 | if (remote->serial[i] == serial) |
1924 | continue; | 1958 | continue; |
1925 | 1959 | ||
1926 | if (wacom_wac->serial[i]) { | 1960 | if (remote->serial[i]) { |
1927 | wacom_remote_destroy_attr_group(wacom, | 1961 | wacom_remote_destroy_attr_group(wacom, |
1928 | wacom_wac->serial[i]); | 1962 | remote->serial[i]); |
1929 | } | 1963 | } |
1930 | 1964 | ||
1931 | /* A remote can pair more than once with an EKR, | 1965 | /* A remote can pair more than once with an EKR, |
1932 | * check to make sure this serial isn't already paired. | 1966 | * check to make sure this serial isn't already paired. |
1933 | */ | 1967 | */ |
1934 | for (k = 0; k < WACOM_MAX_REMOTES; k++) { | 1968 | for (k = 0; k < WACOM_MAX_REMOTES; k++) { |
1935 | if (wacom_wac->serial[k] == serial) | 1969 | if (remote->serial[k] == serial) |
1936 | break; | 1970 | break; |
1937 | } | 1971 | } |
1938 | 1972 | ||
1939 | if (k < WACOM_MAX_REMOTES) { | 1973 | if (k < WACOM_MAX_REMOTES) { |
1940 | wacom_wac->serial[i] = serial; | 1974 | remote->serial[i] = serial; |
1941 | continue; | 1975 | continue; |
1942 | } | 1976 | } |
1943 | wacom_remote_create_attr_group(wacom, serial, i); | 1977 | wacom_remote_create_attr_group(wacom, serial, i); |
1944 | 1978 | ||
1945 | } else if (wacom_wac->serial[i]) { | 1979 | } else if (remote->serial[i]) { |
1946 | wacom_remote_destroy_attr_group(wacom, | 1980 | wacom_remote_destroy_attr_group(wacom, |
1947 | wacom_wac->serial[i]); | 1981 | remote->serial[i]); |
1948 | } | 1982 | } |
1949 | } | 1983 | } |
1950 | } | 1984 | } |
@@ -1992,16 +2026,6 @@ static int wacom_probe(struct hid_device *hdev, | |||
1992 | INIT_WORK(&wacom->wireless_work, wacom_wireless_work); | 2026 | INIT_WORK(&wacom->wireless_work, wacom_wireless_work); |
1993 | INIT_WORK(&wacom->battery_work, wacom_battery_work); | 2027 | INIT_WORK(&wacom->battery_work, wacom_battery_work); |
1994 | INIT_WORK(&wacom->remote_work, wacom_remote_work); | 2028 | INIT_WORK(&wacom->remote_work, wacom_remote_work); |
1995 | spin_lock_init(&wacom->remote_lock); | ||
1996 | |||
1997 | if (kfifo_alloc(&wacom->remote_fifo, | ||
1998 | 5 * sizeof(struct wacom_remote_data), | ||
1999 | GFP_KERNEL)) { | ||
2000 | dev_err(&hdev->dev, | ||
2001 | "%s:failed allocating remote_fifo\n", __func__); | ||
2002 | error = -ENOMEM; | ||
2003 | goto fail_type; | ||
2004 | } | ||
2005 | 2029 | ||
2006 | /* ask for the report descriptor to be loaded by HID */ | 2030 | /* ask for the report descriptor to be loaded by HID */ |
2007 | error = hid_parse(hdev); | 2031 | error = hid_parse(hdev); |
@@ -2025,7 +2049,6 @@ static int wacom_probe(struct hid_device *hdev, | |||
2025 | return 0; | 2049 | return 0; |
2026 | 2050 | ||
2027 | fail_parse: | 2051 | fail_parse: |
2028 | kfifo_free(&wacom->remote_fifo); | ||
2029 | fail_type: | 2052 | fail_type: |
2030 | hid_set_drvdata(hdev, NULL); | 2053 | hid_set_drvdata(hdev, NULL); |
2031 | return error; | 2054 | return error; |
@@ -2045,8 +2068,6 @@ static void wacom_remove(struct hid_device *hdev) | |||
2045 | cancel_work_sync(&wacom->wireless_work); | 2068 | cancel_work_sync(&wacom->wireless_work); |
2046 | cancel_work_sync(&wacom->battery_work); | 2069 | cancel_work_sync(&wacom->battery_work); |
2047 | cancel_work_sync(&wacom->remote_work); | 2070 | cancel_work_sync(&wacom->remote_work); |
2048 | kfifo_free(&wacom->remote_fifo); | ||
2049 | kobject_put(wacom->remote_dir); | ||
2050 | if (hdev->bus == BUS_BLUETOOTH) | 2071 | if (hdev->bus == BUS_BLUETOOTH) |
2051 | device_remove_file(&hdev->dev, &dev_attr_speed); | 2072 | device_remove_file(&hdev->dev, &dev_attr_speed); |
2052 | 2073 | ||
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index d54992967391..ce1089f1142d 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c | |||
@@ -753,6 +753,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len) | |||
753 | unsigned char *data = wacom_wac->data; | 753 | unsigned char *data = wacom_wac->data; |
754 | struct input_dev *input = wacom_wac->pad_input; | 754 | struct input_dev *input = wacom_wac->pad_input; |
755 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); | 755 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); |
756 | struct wacom_remote *remote = wacom->remote; | ||
756 | struct wacom_features *features = &wacom_wac->features; | 757 | struct wacom_features *features = &wacom_wac->features; |
757 | int bat_charging, bat_percent, touch_ring_mode; | 758 | int bat_charging, bat_percent, touch_ring_mode; |
758 | __u32 serial; | 759 | __u32 serial; |
@@ -807,7 +808,7 @@ static int wacom_remote_irq(struct wacom_wac *wacom_wac, size_t len) | |||
807 | touch_ring_mode = (data[11] & 0xC0) >> 6; | 808 | touch_ring_mode = (data[11] & 0xC0) >> 6; |
808 | 809 | ||
809 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { | 810 | for (i = 0; i < WACOM_MAX_REMOTES; i++) { |
810 | if (wacom_wac->serial[i] == serial) | 811 | if (remote->serial[i] == serial) |
811 | wacom->led.groups[i].select = touch_ring_mode; | 812 | wacom->led.groups[i].select = touch_ring_mode; |
812 | } | 813 | } |
813 | 814 | ||
@@ -827,6 +828,7 @@ static void wacom_remote_status_irq(struct wacom_wac *wacom_wac, size_t len) | |||
827 | { | 828 | { |
828 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); | 829 | struct wacom *wacom = container_of(wacom_wac, struct wacom, wacom_wac); |
829 | unsigned char *data = wacom_wac->data; | 830 | unsigned char *data = wacom_wac->data; |
831 | struct wacom_remote *remote = wacom->remote; | ||
830 | struct wacom_remote_data remote_data; | 832 | struct wacom_remote_data remote_data; |
831 | unsigned long flags; | 833 | unsigned long flags; |
832 | int i, ret; | 834 | int i, ret; |
@@ -845,16 +847,16 @@ static void wacom_remote_status_irq(struct wacom_wac *wacom_wac, size_t len) | |||
845 | remote_data.remote[i].connected = connected; | 847 | remote_data.remote[i].connected = connected; |
846 | } | 848 | } |
847 | 849 | ||
848 | spin_lock_irqsave(&wacom->remote_lock, flags); | 850 | spin_lock_irqsave(&remote->remote_lock, flags); |
849 | 851 | ||
850 | ret = kfifo_in(&wacom->remote_fifo, &remote_data, sizeof(remote_data)); | 852 | ret = kfifo_in(&remote->remote_fifo, &remote_data, sizeof(remote_data)); |
851 | if (ret != sizeof(remote_data)) { | 853 | if (ret != sizeof(remote_data)) { |
852 | spin_unlock_irqrestore(&wacom->remote_lock, flags); | 854 | spin_unlock_irqrestore(&remote->remote_lock, flags); |
853 | hid_err(wacom->hdev, "Can't queue Remote status event.\n"); | 855 | hid_err(wacom->hdev, "Can't queue Remote status event.\n"); |
854 | return; | 856 | return; |
855 | } | 857 | } |
856 | 858 | ||
857 | spin_unlock_irqrestore(&wacom->remote_lock, flags); | 859 | spin_unlock_irqrestore(&remote->remote_lock, flags); |
858 | 860 | ||
859 | wacom_schedule_work(wacom_wac, WACOM_WORKER_REMOTE); | 861 | wacom_schedule_work(wacom_wac, WACOM_WORKER_REMOTE); |
860 | } | 862 | } |
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h index c2c65b8c71c1..6be6cae0d093 100644 --- a/drivers/hid/wacom_wac.h +++ b/drivers/hid/wacom_wac.h | |||
@@ -234,7 +234,7 @@ struct wacom_wac { | |||
234 | unsigned char data[WACOM_PKGLEN_MAX]; | 234 | unsigned char data[WACOM_PKGLEN_MAX]; |
235 | int tool[2]; | 235 | int tool[2]; |
236 | int id[2]; | 236 | int id[2]; |
237 | __u32 serial[5]; | 237 | __u32 serial[2]; |
238 | bool reporting_data; | 238 | bool reporting_data; |
239 | struct wacom_features features; | 239 | struct wacom_features features; |
240 | struct wacom_shared *shared; | 240 | struct wacom_shared *shared; |