usb-test.c 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include <linux/kernel.h>
  2. #include <linux/errno.h>
  3. #include <linux/module.h>
  4. #include <linux/init.h>
  5. #include <linux/usb.h>
  6. #include <linux/slab.h>
  7. #define USB_VENDOR_ID_MICROCHIP 0x04d8
  8. #define USB_PRODUCT_ID_USBIO 0x003f
  9. MODULE_LICENSE("GPL");
  10. MODULE_AUTHOR("encrypt");
  11. MODULE_DESCRIPTION("Dummy led");
  12. struct usbio_led {
  13. struct usb_device *udev;
  14. int status;
  15. };
  16. static struct usb_device_id usbio_id_table[] = {
  17. { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_PRODUCT_ID_USBIO) },
  18. {}
  19. };
  20. MODULE_DEVICE_TABLE(usb, usbio_id_table);
  21. static int usbio_probe(struct usb_interface *interface, const struct usb_device_id *id)
  22. {
  23. struct usb_device *udev = interface_to_usbdev(interface);
  24. struct usbio_led *dev = NULL;
  25. int retval = -ENOMEM;
  26. int actual_len = 1;
  27. u8 data[] = { 0x80 };
  28. printk("SCONTRI");
  29. dev = kmalloc(sizeof(struct usbio_led), GFP_KERNEL);
  30. if(dev == NULL) {
  31. dev_err(&interface->dev, "Out of memory\n");
  32. goto error;
  33. }
  34. memset(dev, 0x00, sizeof(*dev));
  35. dev->udev = usb_get_dev(udev);
  36. usb_set_intfdata(interface, dev);
  37. dev_info(&interface->dev, "USBIO LED device attacched\n");
  38. usb_interrupt_msg(dev->udev,
  39. usb_sndintpipe(dev->udev, 1),
  40. data, sizeof(data), &actual_len, USB_CTRL_SET_TIMEOUT);
  41. /* usb_interrupt_msg(dev->udev, */
  42. /* usb_sndintpipe(dev->udev, 0x80), */
  43. /* NULL, sizeof(NULL), &actual_len, USB_CTRL_SET_TIMEOUT); */
  44. return 0;
  45. error:
  46. kfree(dev);
  47. return retval;
  48. }
  49. static void usbio_disconnect(struct usb_interface *interface)
  50. {
  51. struct usbio_led *dev;
  52. dev = usb_get_intfdata(interface);
  53. usb_set_intfdata(interface, NULL);
  54. usb_put_dev(dev->udev);
  55. kfree(dev);
  56. dev_info(&interface->dev, "USBIO disconnected\n");
  57. }
  58. static struct usb_driver usbio_driver = {
  59. .name = "usbio",
  60. .probe = usbio_probe,
  61. .disconnect = usbio_disconnect,
  62. .id_table = usbio_id_table
  63. };
  64. //module_usb_driver(usbio_driver);
  65. static int __init usb_led_init(void)
  66. {
  67. int retval = 0;
  68. retval = usb_register(&usbio_driver);
  69. if (retval)
  70. printk("usb_register failed. Error number %d", retval);
  71. return retval;
  72. }
  73. static void __exit usb_led_exit(void)
  74. {
  75. usb_deregister(&usbio_driver);
  76. }
  77. module_init (usb_led_init);
  78. module_exit (usb_led_exit);