aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--drivers/hid/wacom_sys.c26
-rw-r--r--drivers/hid/wacom_wac.c19
-rw-r--r--drivers/hid/wacom_wac.h4
3 files changed, 40 insertions, 9 deletions
diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c
index a4884e78b3f8..a8e68dc2ca99 100644
--- a/drivers/hid/wacom_sys.c
+++ b/drivers/hid/wacom_sys.c
@@ -2053,6 +2053,24 @@ static void wacom_release_resources(struct wacom *wacom)
2053 wacom->wacom_wac.pad_input = NULL; 2053 wacom->wacom_wac.pad_input = NULL;
2054} 2054}
2055 2055
2056static void wacom_set_shared_values(struct wacom_wac *wacom_wac)
2057{
2058 if (wacom_wac->features.device_type & WACOM_DEVICETYPE_TOUCH) {
2059 wacom_wac->shared->type = wacom_wac->features.type;
2060 wacom_wac->shared->touch_input = wacom_wac->touch_input;
2061 }
2062
2063 if (wacom_wac->has_mute_touch_switch)
2064 wacom_wac->shared->has_mute_touch_switch = true;
2065
2066 if (wacom_wac->shared->has_mute_touch_switch &&
2067 wacom_wac->shared->touch_input) {
2068 set_bit(EV_SW, wacom_wac->shared->touch_input->evbit);
2069 input_set_capability(wacom_wac->shared->touch_input, EV_SW,
2070 SW_MUTE_DEVICE);
2071 }
2072}
2073
2056static int wacom_parse_and_register(struct wacom *wacom, bool wireless) 2074static int wacom_parse_and_register(struct wacom *wacom, bool wireless)
2057{ 2075{
2058 struct wacom_wac *wacom_wac = &wacom->wacom_wac; 2076 struct wacom_wac *wacom_wac = &wacom->wacom_wac;
@@ -2172,13 +2190,7 @@ static int wacom_parse_and_register(struct wacom *wacom, bool wireless)
2172 if (features->device_type & WACOM_DEVICETYPE_WL_MONITOR) 2190 if (features->device_type & WACOM_DEVICETYPE_WL_MONITOR)
2173 error = hid_hw_open(hdev); 2191 error = hid_hw_open(hdev);
2174 2192
2175 if ((wacom_wac->features.type == INTUOSHT || 2193 wacom_set_shared_values(wacom_wac);
2176 wacom_wac->features.type == INTUOSHT2) &&
2177 (wacom_wac->features.device_type & WACOM_DEVICETYPE_TOUCH)) {
2178 wacom_wac->shared->type = wacom_wac->features.type;
2179 wacom_wac->shared->touch_input = wacom_wac->touch_input;
2180 }
2181
2182 devres_close_group(&hdev->dev, wacom); 2194 devres_close_group(&hdev->dev, wacom);
2183 2195
2184 return 0; 2196 return 0;
diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c
index 2eeaa05e2068..06d152a286a0 100644
--- a/drivers/hid/wacom_wac.c
+++ b/drivers/hid/wacom_wac.c
@@ -1728,7 +1728,17 @@ static void wacom_wac_pad_usage_mapping(struct hid_device *hdev,
1728 features->device_type |= WACOM_DEVICETYPE_PAD; 1728 features->device_type |= WACOM_DEVICETYPE_PAD;
1729 break; 1729 break;
1730 case WACOM_HID_WD_TOUCHONOFF: 1730 case WACOM_HID_WD_TOUCHONOFF:
1731 wacom_map_usage(input, usage, field, EV_SW, SW_MUTE_DEVICE, 0); 1731 /*
1732 * This usage, which is used to mute touch events, comes
1733 * from the pad packet, but is reported on the touch
1734 * interface. Because the touch interface may not have
1735 * been created yet, we cannot call wacom_map_usage(). In
1736 * order to process this usage when we receive it, we set
1737 * the usage type and code directly.
1738 */
1739 wacom_wac->has_mute_touch_switch = true;
1740 usage->type = EV_SW;
1741 usage->code = SW_MUTE_DEVICE;
1732 features->device_type |= WACOM_DEVICETYPE_PAD; 1742 features->device_type |= WACOM_DEVICETYPE_PAD;
1733 break; 1743 break;
1734 case WACOM_HID_WD_TOUCHSTRIP: 1744 case WACOM_HID_WD_TOUCHSTRIP:
@@ -1807,6 +1817,13 @@ static void wacom_wac_pad_event(struct hid_device *hdev, struct hid_field *field
1807 input_event(input, usage->type, usage->code, 0); 1817 input_event(input, usage->type, usage->code, 0);
1808 break; 1818 break;
1809 1819
1820 case WACOM_HID_WD_TOUCHONOFF:
1821 if (wacom_wac->shared->touch_input) {
1822 input_report_switch(wacom_wac->shared->touch_input,
1823 SW_MUTE_DEVICE, !value);
1824 input_sync(wacom_wac->shared->touch_input);
1825 }
1826 break;
1810 default: 1827 default:
1811 input_event(input, usage->type, usage->code, value); 1828 input_event(input, usage->type, usage->code, value);
1812 break; 1829 break;
diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h
index da38f7736a7a..4feaf94fb08b 100644
--- a/drivers/hid/wacom_wac.h
+++ b/drivers/hid/wacom_wac.h
@@ -115,6 +115,7 @@
115#define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402) 115#define WACOM_HID_WD_ACCELEROMETER_Y (WACOM_HID_UP_WACOMDIGITIZER | 0x0402)
116#define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403) 116#define WACOM_HID_WD_ACCELEROMETER_Z (WACOM_HID_UP_WACOMDIGITIZER | 0x0403)
117#define WACOM_HID_WD_BATTERY_CHARGING (WACOM_HID_UP_WACOMDIGITIZER | 0x0404) 117#define WACOM_HID_WD_BATTERY_CHARGING (WACOM_HID_UP_WACOMDIGITIZER | 0x0404)
118#define WACOM_HID_WD_TOUCHONOFF (WACOM_HID_UP_WACOMDIGITIZER | 0x0454)
118#define WACOM_HID_WD_BATTERY_LEVEL (WACOM_HID_UP_WACOMDIGITIZER | 0x043b) 119#define WACOM_HID_WD_BATTERY_LEVEL (WACOM_HID_UP_WACOMDIGITIZER | 0x043b)
119#define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910) 120#define WACOM_HID_WD_EXPRESSKEY00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0910)
120#define WACOM_HID_WD_EXPRESSKEYCAP00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0950) 121#define WACOM_HID_WD_EXPRESSKEYCAP00 (WACOM_HID_UP_WACOMDIGITIZER | 0x0950)
@@ -124,7 +125,6 @@
124#define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993) 125#define WACOM_HID_WD_BUTTONLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0993)
125#define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994) 126#define WACOM_HID_WD_BUTTONRIGHT (WACOM_HID_UP_WACOMDIGITIZER | 0x0994)
126#define WACOM_HID_WD_BUTTONCENTER (WACOM_HID_UP_WACOMDIGITIZER | 0x0995) 127#define WACOM_HID_WD_BUTTONCENTER (WACOM_HID_UP_WACOMDIGITIZER | 0x0995)
127#define WACOM_HID_WD_TOUCHONOFF (WACOM_HID_UP_WACOMDIGITIZER | 0x0996)
128#define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03) 128#define WACOM_HID_WD_FINGERWHEEL (WACOM_HID_UP_WACOMDIGITIZER | 0x0d03)
129#define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30) 129#define WACOM_HID_WD_OFFSETLEFT (WACOM_HID_UP_WACOMDIGITIZER | 0x0d30)
130#define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31) 130#define WACOM_HID_WD_OFFSETTOP (WACOM_HID_UP_WACOMDIGITIZER | 0x0d31)
@@ -268,6 +268,7 @@ struct wacom_shared {
268 struct input_dev *touch_input; 268 struct input_dev *touch_input;
269 struct hid_device *pen; 269 struct hid_device *pen;
270 struct hid_device *touch; 270 struct hid_device *touch;
271 bool has_mute_touch_switch;
271}; 272};
272 273
273struct hid_data { 274struct hid_data {
@@ -324,6 +325,7 @@ struct wacom_wac {
324 int mode_report; 325 int mode_report;
325 int mode_value; 326 int mode_value;
326 struct hid_data hid_data; 327 struct hid_data hid_data;
328 bool has_mute_touch_switch;
327}; 329};
328 330
329#endif 331#endif