diff options
Diffstat (limited to 'drivers/input/tablet/wacom_sys.c')
-rw-r--r-- | drivers/input/tablet/wacom_sys.c | 174 |
1 files changed, 11 insertions, 163 deletions
diff --git a/drivers/input/tablet/wacom_sys.c b/drivers/input/tablet/wacom_sys.c index ed339e5eca86..58bb763b60dd 100644 --- a/drivers/input/tablet/wacom_sys.c +++ b/drivers/input/tablet/wacom_sys.c | |||
@@ -72,7 +72,7 @@ static int usb_set_report(struct usb_interface *intf, unsigned char type, | |||
72 | 72 | ||
73 | static struct input_dev * get_input_dev(struct wacom_combo *wcombo) | 73 | static struct input_dev * get_input_dev(struct wacom_combo *wcombo) |
74 | { | 74 | { |
75 | return wcombo->wacom->dev; | 75 | return wcombo->wacom->wacom_wac.input; |
76 | } | 76 | } |
77 | 77 | ||
78 | static void wacom_sys_irq(struct urb *urb) | 78 | static void wacom_sys_irq(struct urb *urb) |
@@ -110,26 +110,6 @@ static void wacom_sys_irq(struct urb *urb) | |||
110 | __func__, retval); | 110 | __func__, retval); |
111 | } | 111 | } |
112 | 112 | ||
113 | void wacom_report_key(void *wcombo, unsigned int key_type, int key_data) | ||
114 | { | ||
115 | input_report_key(get_input_dev((struct wacom_combo *)wcombo), key_type, key_data); | ||
116 | } | ||
117 | |||
118 | void wacom_report_abs(void *wcombo, unsigned int abs_type, int abs_data) | ||
119 | { | ||
120 | input_report_abs(get_input_dev((struct wacom_combo *)wcombo), abs_type, abs_data); | ||
121 | } | ||
122 | |||
123 | void wacom_report_rel(void *wcombo, unsigned int rel_type, int rel_data) | ||
124 | { | ||
125 | input_report_rel(get_input_dev((struct wacom_combo *)wcombo), rel_type, rel_data); | ||
126 | } | ||
127 | |||
128 | void wacom_input_event(void *wcombo, unsigned int type, unsigned int code, int value) | ||
129 | { | ||
130 | input_event(get_input_dev((struct wacom_combo *)wcombo), type, code, value); | ||
131 | } | ||
132 | |||
133 | __u16 wacom_be16_to_cpu(unsigned char *data) | 113 | __u16 wacom_be16_to_cpu(unsigned char *data) |
134 | { | 114 | { |
135 | __u16 value; | 115 | __u16 value; |
@@ -144,11 +124,6 @@ __u16 wacom_le16_to_cpu(unsigned char *data) | |||
144 | return value; | 124 | return value; |
145 | } | 125 | } |
146 | 126 | ||
147 | void wacom_input_sync(void *wcombo) | ||
148 | { | ||
149 | input_sync(get_input_dev((struct wacom_combo *)wcombo)); | ||
150 | } | ||
151 | |||
152 | static int wacom_open(struct input_dev *dev) | 127 | static int wacom_open(struct input_dev *dev) |
153 | { | 128 | { |
154 | struct wacom *wacom = input_get_drvdata(dev); | 129 | struct wacom *wacom = input_get_drvdata(dev); |
@@ -186,123 +161,6 @@ static void wacom_close(struct input_dev *dev) | |||
186 | mutex_unlock(&wacom->lock); | 161 | mutex_unlock(&wacom->lock); |
187 | } | 162 | } |
188 | 163 | ||
189 | void input_dev_mo(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
190 | { | ||
191 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_1) | | ||
192 | BIT_MASK(BTN_5); | ||
193 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 71, 0, 0); | ||
194 | } | ||
195 | |||
196 | void input_dev_g4(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
197 | { | ||
198 | input_dev->evbit[0] |= BIT_MASK(EV_MSC); | ||
199 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); | ||
200 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_FINGER); | ||
201 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_0) | | ||
202 | BIT_MASK(BTN_4); | ||
203 | } | ||
204 | |||
205 | void input_dev_g(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
206 | { | ||
207 | input_dev->evbit[0] |= BIT_MASK(EV_REL); | ||
208 | input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); | ||
209 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_LEFT) | | ||
210 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE); | ||
211 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | | ||
212 | BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_STYLUS) | | ||
213 | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_STYLUS2); | ||
214 | input_set_abs_params(input_dev, ABS_DISTANCE, | ||
215 | 0, wacom_wac->features.distance_max, 0, 0); | ||
216 | } | ||
217 | |||
218 | void input_dev_i3s(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
219 | { | ||
220 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_FINGER); | ||
221 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_0) | | ||
222 | BIT_MASK(BTN_1) | BIT_MASK(BTN_2) | BIT_MASK(BTN_3); | ||
223 | input_set_abs_params(input_dev, ABS_RX, 0, 4096, 0, 0); | ||
224 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); | ||
225 | } | ||
226 | |||
227 | void input_dev_i3(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
228 | { | ||
229 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_4) | | ||
230 | BIT_MASK(BTN_5) | BIT_MASK(BTN_6) | BIT_MASK(BTN_7); | ||
231 | input_set_abs_params(input_dev, ABS_RY, 0, 4096, 0, 0); | ||
232 | } | ||
233 | |||
234 | void input_dev_i4s(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
235 | { | ||
236 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_FINGER); | ||
237 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_0) | BIT_MASK(BTN_1) | BIT_MASK(BTN_2) | BIT_MASK(BTN_3); | ||
238 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_4) | BIT_MASK(BTN_5) | BIT_MASK(BTN_6); | ||
239 | input_set_abs_params(input_dev, ABS_Z, -900, 899, 0, 0); | ||
240 | } | ||
241 | |||
242 | void input_dev_i4(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
243 | { | ||
244 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_7) | BIT_MASK(BTN_8); | ||
245 | } | ||
246 | |||
247 | void input_dev_bee(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
248 | { | ||
249 | input_dev->keybit[BIT_WORD(BTN_MISC)] |= BIT_MASK(BTN_8) | BIT_MASK(BTN_9); | ||
250 | } | ||
251 | |||
252 | void input_dev_i(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
253 | { | ||
254 | input_dev->evbit[0] |= BIT_MASK(EV_MSC) | BIT_MASK(EV_REL); | ||
255 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); | ||
256 | input_dev->relbit[0] |= BIT_MASK(REL_WHEEL); | ||
257 | input_dev->keybit[BIT_WORD(BTN_MOUSE)] |= BIT_MASK(BTN_LEFT) | | ||
258 | BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE) | | ||
259 | BIT_MASK(BTN_SIDE) | BIT_MASK(BTN_EXTRA); | ||
260 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER) | | ||
261 | BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_STYLUS) | | ||
262 | BIT_MASK(BTN_TOOL_MOUSE) | BIT_MASK(BTN_TOOL_BRUSH) | | ||
263 | BIT_MASK(BTN_TOOL_PENCIL) | BIT_MASK(BTN_TOOL_AIRBRUSH) | | ||
264 | BIT_MASK(BTN_TOOL_LENS) | BIT_MASK(BTN_STYLUS2); | ||
265 | input_set_abs_params(input_dev, ABS_DISTANCE, | ||
266 | 0, wacom_wac->features.distance_max, 0, 0); | ||
267 | input_set_abs_params(input_dev, ABS_WHEEL, 0, 1023, 0, 0); | ||
268 | input_set_abs_params(input_dev, ABS_TILT_X, 0, 127, 0, 0); | ||
269 | input_set_abs_params(input_dev, ABS_TILT_Y, 0, 127, 0, 0); | ||
270 | input_set_abs_params(input_dev, ABS_RZ, -900, 899, 0, 0); | ||
271 | input_set_abs_params(input_dev, ABS_THROTTLE, -1023, 1023, 0, 0); | ||
272 | } | ||
273 | |||
274 | void input_dev_pl(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
275 | { | ||
276 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) | | ||
277 | BIT_MASK(BTN_STYLUS) | BIT_MASK(BTN_STYLUS2); | ||
278 | } | ||
279 | |||
280 | void input_dev_pt(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
281 | { | ||
282 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_RUBBER); | ||
283 | } | ||
284 | |||
285 | void input_dev_tpc(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
286 | { | ||
287 | struct wacom_features *features = &wacom_wac->features; | ||
288 | |||
289 | if (features->device_type == BTN_TOOL_DOUBLETAP || | ||
290 | features->device_type == BTN_TOOL_TRIPLETAP) { | ||
291 | input_set_abs_params(input_dev, ABS_RX, 0, features->x_phy, 0, 0); | ||
292 | input_set_abs_params(input_dev, ABS_RY, 0, features->y_phy, 0, 0); | ||
293 | __set_bit(BTN_TOOL_DOUBLETAP, input_dev->keybit); | ||
294 | } | ||
295 | } | ||
296 | |||
297 | void input_dev_tpc2fg(struct input_dev *input_dev, struct wacom_wac *wacom_wac) | ||
298 | { | ||
299 | if (wacom_wac->features.device_type == BTN_TOOL_TRIPLETAP) { | ||
300 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_TRIPLETAP); | ||
301 | input_dev->evbit[0] |= BIT_MASK(EV_MSC); | ||
302 | input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL); | ||
303 | } | ||
304 | } | ||
305 | |||
306 | static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, | 164 | static int wacom_parse_hid(struct usb_interface *intf, struct hid_descriptor *hid_desc, |
307 | struct wacom_features *features) | 165 | struct wacom_features *features) |
308 | { | 166 | { |
@@ -645,20 +503,12 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
645 | } | 503 | } |
646 | 504 | ||
647 | wacom->usbdev = dev; | 505 | wacom->usbdev = dev; |
648 | wacom->dev = input_dev; | ||
649 | wacom->intf = intf; | 506 | wacom->intf = intf; |
650 | mutex_init(&wacom->lock); | 507 | mutex_init(&wacom->lock); |
651 | usb_make_path(dev, wacom->phys, sizeof(wacom->phys)); | 508 | usb_make_path(dev, wacom->phys, sizeof(wacom->phys)); |
652 | strlcat(wacom->phys, "/input0", sizeof(wacom->phys)); | 509 | strlcat(wacom->phys, "/input0", sizeof(wacom->phys)); |
653 | 510 | ||
654 | usb_to_input_id(dev, &input_dev->id); | 511 | wacom_wac->input = input_dev; |
655 | |||
656 | input_dev->dev.parent = &intf->dev; | ||
657 | |||
658 | input_set_drvdata(input_dev, wacom); | ||
659 | |||
660 | input_dev->open = wacom_open; | ||
661 | input_dev->close = wacom_close; | ||
662 | 512 | ||
663 | endpoint = &intf->cur_altsetting->endpoint[0].desc; | 513 | endpoint = &intf->cur_altsetting->endpoint[0].desc; |
664 | 514 | ||
@@ -682,16 +532,14 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
682 | } | 532 | } |
683 | 533 | ||
684 | input_dev->name = wacom_wac->name; | 534 | input_dev->name = wacom_wac->name; |
535 | input_dev->name = wacom_wac->name; | ||
536 | input_dev->dev.parent = &intf->dev; | ||
537 | input_dev->open = wacom_open; | ||
538 | input_dev->close = wacom_close; | ||
539 | usb_to_input_id(dev, &input_dev->id); | ||
540 | input_set_drvdata(input_dev, wacom); | ||
685 | 541 | ||
686 | input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS); | 542 | wacom_setup_input_capabilities(input_dev, wacom_wac); |
687 | input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOUCH); | ||
688 | |||
689 | input_set_abs_params(input_dev, ABS_X, 0, features->x_max, 4, 0); | ||
690 | input_set_abs_params(input_dev, ABS_Y, 0, features->y_max, 4, 0); | ||
691 | input_set_abs_params(input_dev, ABS_PRESSURE, 0, features->pressure_max, 0, 0); | ||
692 | input_dev->absbit[BIT_WORD(ABS_MISC)] |= BIT_MASK(ABS_MISC); | ||
693 | |||
694 | wacom_init_input_dev(input_dev, wacom_wac); | ||
695 | 543 | ||
696 | usb_fill_int_urb(wacom->irq, dev, | 544 | usb_fill_int_urb(wacom->irq, dev, |
697 | usb_rcvintpipe(dev, endpoint->bEndpointAddress), | 545 | usb_rcvintpipe(dev, endpoint->bEndpointAddress), |
@@ -700,7 +548,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i | |||
700 | wacom->irq->transfer_dma = wacom->data_dma; | 548 | wacom->irq->transfer_dma = wacom->data_dma; |
701 | wacom->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; | 549 | wacom->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; |
702 | 550 | ||
703 | error = input_register_device(wacom->dev); | 551 | error = input_register_device(input_dev); |
704 | if (error) | 552 | if (error) |
705 | goto fail4; | 553 | goto fail4; |
706 | 554 | ||
@@ -725,7 +573,7 @@ static void wacom_disconnect(struct usb_interface *intf) | |||
725 | usb_set_intfdata(intf, NULL); | 573 | usb_set_intfdata(intf, NULL); |
726 | 574 | ||
727 | usb_kill_urb(wacom->irq); | 575 | usb_kill_urb(wacom->irq); |
728 | input_unregister_device(wacom->dev); | 576 | input_unregister_device(wacom->wacom_wac.input); |
729 | usb_free_urb(wacom->irq); | 577 | usb_free_urb(wacom->irq); |
730 | usb_buffer_free(interface_to_usbdev(intf), WACOM_PKGLEN_MAX, | 578 | usb_buffer_free(interface_to_usbdev(intf), WACOM_PKGLEN_MAX, |
731 | wacom->wacom_wac.data, wacom->data_dma); | 579 | wacom->wacom_wac.data, wacom->data_dma); |