Lines Matching refs:hanwang
64 struct hanwang { struct
121 static void hanwang_parse_packet(struct hanwang *hanwang) in hanwang_parse_packet() argument
123 unsigned char *data = hanwang->data; in hanwang_parse_packet()
124 struct input_dev *input_dev = hanwang->dev; in hanwang_parse_packet()
125 struct usb_device *dev = hanwang->usbdev; in hanwang_parse_packet()
126 enum hanwang_tablet_type type = hanwang->features->type; in hanwang_parse_packet()
131 hanwang->current_tool = BTN_TOOL_PEN; in hanwang_parse_packet()
132 hanwang->current_id = STYLUS_DEVICE_ID; in hanwang_parse_packet()
140 hanwang->current_id = 0; in hanwang_parse_packet()
142 hanwang->current_tool, 0); in hanwang_parse_packet()
148 hanwang->current_id = 0; in hanwang_parse_packet()
150 hanwang->current_tool, 0); in hanwang_parse_packet()
158 hanwang->current_id = STYLUS_DEVICE_ID; in hanwang_parse_packet()
159 hanwang->current_tool = BTN_TOOL_PEN; in hanwang_parse_packet()
164 hanwang->current_id = ERASER_DEVICE_ID; in hanwang_parse_packet()
165 hanwang->current_tool = BTN_TOOL_RUBBER; in hanwang_parse_packet()
169 hanwang->current_id = 0; in hanwang_parse_packet()
212 input_report_abs(input_dev, ABS_MISC, hanwang->current_id); in hanwang_parse_packet()
214 hanwang->features->pid); in hanwang_parse_packet()
219 hanwang->current_id = PAD_DEVICE_ID; in hanwang_parse_packet()
254 input_report_abs(input_dev, ABS_MISC, hanwang->current_id); in hanwang_parse_packet()
268 struct hanwang *hanwang = urb->context; in hanwang_irq() local
269 struct usb_device *dev = hanwang->usbdev; in hanwang_irq()
275 hanwang_parse_packet(hanwang); in hanwang_irq()
298 struct hanwang *hanwang = input_get_drvdata(dev); in hanwang_open() local
300 hanwang->irq->dev = hanwang->usbdev; in hanwang_open()
301 if (usb_submit_urb(hanwang->irq, GFP_KERNEL)) in hanwang_open()
309 struct hanwang *hanwang = input_get_drvdata(dev); in hanwang_close() local
311 usb_kill_urb(hanwang->irq); in hanwang_close()
314 static bool get_features(struct usb_device *dev, struct hanwang *hanwang) in get_features() argument
321 hanwang->features = &features_array[i]; in get_features()
334 struct hanwang *hanwang; in hanwang_probe() local
342 hanwang = kzalloc(sizeof(struct hanwang), GFP_KERNEL); in hanwang_probe()
344 if (!hanwang || !input_dev) { in hanwang_probe()
349 if (!get_features(dev, hanwang)) { in hanwang_probe()
354 hanwang->data = usb_alloc_coherent(dev, hanwang->features->pkg_len, in hanwang_probe()
355 GFP_KERNEL, &hanwang->data_dma); in hanwang_probe()
356 if (!hanwang->data) { in hanwang_probe()
361 hanwang->irq = usb_alloc_urb(0, GFP_KERNEL); in hanwang_probe()
362 if (!hanwang->irq) { in hanwang_probe()
367 hanwang->usbdev = dev; in hanwang_probe()
368 hanwang->dev = input_dev; in hanwang_probe()
370 usb_make_path(dev, hanwang->phys, sizeof(hanwang->phys)); in hanwang_probe()
371 strlcat(hanwang->phys, "/input0", sizeof(hanwang->phys)); in hanwang_probe()
373 strlcpy(hanwang->name, hanwang->features->name, sizeof(hanwang->name)); in hanwang_probe()
374 input_dev->name = hanwang->name; in hanwang_probe()
375 input_dev->phys = hanwang->phys; in hanwang_probe()
379 input_set_drvdata(input_dev, hanwang); in hanwang_probe()
397 0, hanwang->features->max_x, 4, 0); in hanwang_probe()
399 0, hanwang->features->max_y, 4, 0); in hanwang_probe()
401 0, hanwang->features->max_tilt_x, 0, 0); in hanwang_probe()
403 0, hanwang->features->max_tilt_y, 0, 0); in hanwang_probe()
405 0, hanwang->features->max_pressure, 0, 0); in hanwang_probe()
408 usb_fill_int_urb(hanwang->irq, dev, in hanwang_probe()
410 hanwang->data, hanwang->features->pkg_len, in hanwang_probe()
411 hanwang_irq, hanwang, endpoint->bInterval); in hanwang_probe()
412 hanwang->irq->transfer_dma = hanwang->data_dma; in hanwang_probe()
413 hanwang->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in hanwang_probe()
415 error = input_register_device(hanwang->dev); in hanwang_probe()
419 usb_set_intfdata(intf, hanwang); in hanwang_probe()
423 fail3: usb_free_urb(hanwang->irq); in hanwang_probe()
424 fail2: usb_free_coherent(dev, hanwang->features->pkg_len, in hanwang_probe()
425 hanwang->data, hanwang->data_dma); in hanwang_probe()
427 kfree(hanwang); in hanwang_probe()
434 struct hanwang *hanwang = usb_get_intfdata(intf); in hanwang_disconnect() local
436 input_unregister_device(hanwang->dev); in hanwang_disconnect()
437 usb_free_urb(hanwang->irq); in hanwang_disconnect()
439 hanwang->features->pkg_len, hanwang->data, in hanwang_disconnect()
440 hanwang->data_dma); in hanwang_disconnect()
441 kfree(hanwang); in hanwang_disconnect()