Lines Matching refs:hanwang
68 struct hanwang { struct
125 static void hanwang_parse_packet(struct hanwang *hanwang) in hanwang_parse_packet() argument
127 unsigned char *data = hanwang->data; in hanwang_parse_packet()
128 struct input_dev *input_dev = hanwang->dev; in hanwang_parse_packet()
129 struct usb_device *dev = hanwang->usbdev; in hanwang_parse_packet()
130 enum hanwang_tablet_type type = hanwang->features->type; in hanwang_parse_packet()
135 hanwang->current_tool = BTN_TOOL_PEN; in hanwang_parse_packet()
136 hanwang->current_id = STYLUS_DEVICE_ID; in hanwang_parse_packet()
144 hanwang->current_id = 0; in hanwang_parse_packet()
146 hanwang->current_tool, 0); in hanwang_parse_packet()
152 hanwang->current_id = 0; in hanwang_parse_packet()
154 hanwang->current_tool, 0); in hanwang_parse_packet()
162 hanwang->current_id = STYLUS_DEVICE_ID; in hanwang_parse_packet()
163 hanwang->current_tool = BTN_TOOL_PEN; in hanwang_parse_packet()
168 hanwang->current_id = ERASER_DEVICE_ID; in hanwang_parse_packet()
169 hanwang->current_tool = BTN_TOOL_RUBBER; in hanwang_parse_packet()
173 hanwang->current_id = 0; in hanwang_parse_packet()
216 input_report_abs(input_dev, ABS_MISC, hanwang->current_id); in hanwang_parse_packet()
218 hanwang->features->pid); in hanwang_parse_packet()
223 hanwang->current_id = PAD_DEVICE_ID; in hanwang_parse_packet()
258 input_report_abs(input_dev, ABS_MISC, hanwang->current_id); in hanwang_parse_packet()
272 struct hanwang *hanwang = urb->context; in hanwang_irq() local
273 struct usb_device *dev = hanwang->usbdev; in hanwang_irq()
279 hanwang_parse_packet(hanwang); in hanwang_irq()
302 struct hanwang *hanwang = input_get_drvdata(dev); in hanwang_open() local
304 hanwang->irq->dev = hanwang->usbdev; in hanwang_open()
305 if (usb_submit_urb(hanwang->irq, GFP_KERNEL)) in hanwang_open()
313 struct hanwang *hanwang = input_get_drvdata(dev); in hanwang_close() local
315 usb_kill_urb(hanwang->irq); in hanwang_close()
318 static bool get_features(struct usb_device *dev, struct hanwang *hanwang) in get_features() argument
325 hanwang->features = &features_array[i]; in get_features()
338 struct hanwang *hanwang; in hanwang_probe() local
343 hanwang = kzalloc(sizeof(struct hanwang), GFP_KERNEL); in hanwang_probe()
345 if (!hanwang || !input_dev) { in hanwang_probe()
350 if (!get_features(dev, hanwang)) { in hanwang_probe()
355 hanwang->data = usb_alloc_coherent(dev, hanwang->features->pkg_len, in hanwang_probe()
356 GFP_KERNEL, &hanwang->data_dma); in hanwang_probe()
357 if (!hanwang->data) { in hanwang_probe()
362 hanwang->irq = usb_alloc_urb(0, GFP_KERNEL); in hanwang_probe()
363 if (!hanwang->irq) { in hanwang_probe()
368 hanwang->usbdev = dev; in hanwang_probe()
369 hanwang->dev = input_dev; in hanwang_probe()
371 usb_make_path(dev, hanwang->phys, sizeof(hanwang->phys)); in hanwang_probe()
372 strlcat(hanwang->phys, "/input0", sizeof(hanwang->phys)); in hanwang_probe()
374 strlcpy(hanwang->name, hanwang->features->name, sizeof(hanwang->name)); in hanwang_probe()
375 input_dev->name = hanwang->name; in hanwang_probe()
376 input_dev->phys = hanwang->phys; in hanwang_probe()
380 input_set_drvdata(input_dev, hanwang); in hanwang_probe()
398 0, hanwang->features->max_x, 4, 0); in hanwang_probe()
400 0, hanwang->features->max_y, 4, 0); in hanwang_probe()
402 0, hanwang->features->max_tilt_x, 0, 0); in hanwang_probe()
404 0, hanwang->features->max_tilt_y, 0, 0); in hanwang_probe()
406 0, hanwang->features->max_pressure, 0, 0); in hanwang_probe()
409 usb_fill_int_urb(hanwang->irq, dev, in hanwang_probe()
411 hanwang->data, hanwang->features->pkg_len, in hanwang_probe()
412 hanwang_irq, hanwang, endpoint->bInterval); in hanwang_probe()
413 hanwang->irq->transfer_dma = hanwang->data_dma; in hanwang_probe()
414 hanwang->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; in hanwang_probe()
416 error = input_register_device(hanwang->dev); in hanwang_probe()
420 usb_set_intfdata(intf, hanwang); in hanwang_probe()
424 fail3: usb_free_urb(hanwang->irq); in hanwang_probe()
425 fail2: usb_free_coherent(dev, hanwang->features->pkg_len, in hanwang_probe()
426 hanwang->data, hanwang->data_dma); in hanwang_probe()
428 kfree(hanwang); in hanwang_probe()
435 struct hanwang *hanwang = usb_get_intfdata(intf); in hanwang_disconnect() local
437 input_unregister_device(hanwang->dev); in hanwang_disconnect()
438 usb_free_urb(hanwang->irq); in hanwang_disconnect()
440 hanwang->features->pkg_len, hanwang->data, in hanwang_disconnect()
441 hanwang->data_dma); in hanwang_disconnect()
442 kfree(hanwang); in hanwang_disconnect()