kbtab.c 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211
  1. #include <linux/kernel.h>
  2. #include <linux/slab.h>
  3. #include <linux/module.h>
  4. #include <linux/usb/input.h>
  5. #include <asm/unaligned.h>
  6. /*
  7. * Version Information
  8. * v0.0.1 - Original, extremely basic version, 2.4.xx only
  9. * v0.0.2 - Updated, works with 2.5.62 and 2.4.20;
  10. * - added pressure-threshold modules param code from
  11. * Alex Perry <alex.perry@ieee.org>
  12. */
  13. #define DRIVER_VERSION "v0.0.2"
  14. #define DRIVER_AUTHOR "Josh Myer <josh@joshisanerd.com>"
  15. #define DRIVER_DESC "USB KB Gear JamStudio Tablet driver"
  16. #define DRIVER_LICENSE "GPL"
  17. MODULE_AUTHOR(DRIVER_AUTHOR);
  18. MODULE_DESCRIPTION(DRIVER_DESC);
  19. MODULE_LICENSE(DRIVER_LICENSE);
  20. #define USB_VENDOR_ID_KBGEAR 0x084e
  21. static int kb_pressure_click = 0x10;
  22. module_param(kb_pressure_click, int, 0);
  23. MODULE_PARM_DESC(kb_pressure_click, "pressure threshold for clicks");
  24. struct kbtab {
  25. unsigned char *data;
  26. dma_addr_t data_dma;
  27. struct input_dev *dev;
  28. struct usb_interface *intf;
  29. struct urb *irq;
  30. char phys[32];
  31. };
  32. static void kbtab_irq(struct urb *urb)
  33. {
  34. struct kbtab *kbtab = urb->context;
  35. unsigned char *data = kbtab->data;
  36. struct input_dev *dev = kbtab->dev;
  37. int pressure;
  38. int retval;
  39. switch (urb->status) {
  40. case 0:
  41. /* success */
  42. break;
  43. case -ECONNRESET:
  44. case -ENOENT:
  45. case -ESHUTDOWN:
  46. /* this urb is terminated, clean up */
  47. dev_dbg(&kbtab->intf->dev,
  48. "%s - urb shutting down with status: %d\n",
  49. __func__, urb->status);
  50. return;
  51. default:
  52. dev_dbg(&kbtab->intf->dev,
  53. "%s - nonzero urb status received: %d\n",
  54. __func__, urb->status);
  55. goto exit;
  56. }
  57. input_report_key(dev, BTN_TOOL_PEN, 1);
  58. input_report_abs(dev, ABS_X, get_unaligned_le16(&data[1]));
  59. input_report_abs(dev, ABS_Y, get_unaligned_le16(&data[3]));
  60. /*input_report_key(dev, BTN_TOUCH , data[0] & 0x01);*/
  61. input_report_key(dev, BTN_RIGHT, data[0] & 0x02);
  62. pressure = data[5];
  63. if (kb_pressure_click == -1)
  64. input_report_abs(dev, ABS_PRESSURE, pressure);
  65. else
  66. input_report_key(dev, BTN_LEFT, pressure > kb_pressure_click ? 1 : 0);
  67. input_sync(dev);
  68. exit:
  69. retval = usb_submit_urb(urb, GFP_ATOMIC);
  70. if (retval)
  71. dev_err(&kbtab->intf->dev,
  72. "%s - usb_submit_urb failed with result %d\n",
  73. __func__, retval);
  74. }
  75. static struct usb_device_id kbtab_ids[] = {
  76. { USB_DEVICE(USB_VENDOR_ID_KBGEAR, 0x1001), .driver_info = 0 },
  77. { }
  78. };
  79. MODULE_DEVICE_TABLE(usb, kbtab_ids);
  80. static int kbtab_open(struct input_dev *dev)
  81. {
  82. struct kbtab *kbtab = input_get_drvdata(dev);
  83. struct usb_device *udev = interface_to_usbdev(kbtab->intf);
  84. kbtab->irq->dev = udev;
  85. if (usb_submit_urb(kbtab->irq, GFP_KERNEL))
  86. return -EIO;
  87. return 0;
  88. }
  89. static void kbtab_close(struct input_dev *dev)
  90. {
  91. struct kbtab *kbtab = input_get_drvdata(dev);
  92. usb_kill_urb(kbtab->irq);
  93. }
  94. static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *id)
  95. {
  96. struct usb_device *dev = interface_to_usbdev(intf);
  97. struct usb_endpoint_descriptor *endpoint;
  98. struct kbtab *kbtab;
  99. struct input_dev *input_dev;
  100. int error = -ENOMEM;
  101. if (intf->cur_altsetting->desc.bNumEndpoints < 1)
  102. return -ENODEV;
  103. kbtab = kzalloc(sizeof(struct kbtab), GFP_KERNEL);
  104. input_dev = input_allocate_device();
  105. if (!kbtab || !input_dev)
  106. goto fail1;
  107. kbtab->data = usb_alloc_coherent(dev, 8, GFP_KERNEL, &kbtab->data_dma);
  108. if (!kbtab->data)
  109. goto fail1;
  110. kbtab->irq = usb_alloc_urb(0, GFP_KERNEL);
  111. if (!kbtab->irq)
  112. goto fail2;
  113. kbtab->intf = intf;
  114. kbtab->dev = input_dev;
  115. usb_make_path(dev, kbtab->phys, sizeof(kbtab->phys));
  116. strlcat(kbtab->phys, "/input0", sizeof(kbtab->phys));
  117. input_dev->name = "KB Gear Tablet";
  118. input_dev->phys = kbtab->phys;
  119. usb_to_input_id(dev, &input_dev->id);
  120. input_dev->dev.parent = &intf->dev;
  121. input_set_drvdata(input_dev, kbtab);
  122. input_dev->open = kbtab_open;
  123. input_dev->close = kbtab_close;
  124. input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
  125. input_dev->keybit[BIT_WORD(BTN_LEFT)] |=
  126. BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);
  127. input_dev->keybit[BIT_WORD(BTN_DIGI)] |=
  128. BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_TOUCH);
  129. input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0);
  130. input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0);
  131. input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0);
  132. endpoint = &intf->cur_altsetting->endpoint[0].desc;
  133. usb_fill_int_urb(kbtab->irq, dev,
  134. usb_rcvintpipe(dev, endpoint->bEndpointAddress),
  135. kbtab->data, 8,
  136. kbtab_irq, kbtab, endpoint->bInterval);
  137. kbtab->irq->transfer_dma = kbtab->data_dma;
  138. kbtab->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;
  139. error = input_register_device(kbtab->dev);
  140. if (error)
  141. goto fail3;
  142. usb_set_intfdata(intf, kbtab);
  143. return 0;
  144. fail3: usb_free_urb(kbtab->irq);
  145. fail2: usb_free_coherent(dev, 8, kbtab->data, kbtab->data_dma);
  146. fail1: input_free_device(input_dev);
  147. kfree(kbtab);
  148. return error;
  149. }
  150. static void kbtab_disconnect(struct usb_interface *intf)
  151. {
  152. struct kbtab *kbtab = usb_get_intfdata(intf);
  153. struct usb_device *udev = interface_to_usbdev(intf);
  154. usb_set_intfdata(intf, NULL);
  155. input_unregister_device(kbtab->dev);
  156. usb_free_urb(kbtab->irq);
  157. usb_free_coherent(udev, 8, kbtab->data, kbtab->data_dma);
  158. kfree(kbtab);
  159. }
  160. static struct usb_driver kbtab_driver = {
  161. .name = "kbtab",
  162. .probe = kbtab_probe,
  163. .disconnect = kbtab_disconnect,
  164. .id_table = kbtab_ids,
  165. };
  166. module_usb_driver(kbtab_driver);