#include #include #include #include #include #include #define USB_VENDOR_ID_MICROCHIP 0x04d8 #define USB_PRODUCT_ID_USBIO 0x003f MODULE_LICENSE("GPL"); MODULE_AUTHOR("encrypt"); MODULE_DESCRIPTION("Dummy led"); struct usbio_led { struct usb_device *udev; int status; }; static struct usb_device_id usbio_id_table[] = { { USB_DEVICE(USB_VENDOR_ID_MICROCHIP, USB_PRODUCT_ID_USBIO) }, {} }; MODULE_DEVICE_TABLE(usb, usbio_id_table); static int usbio_probe(struct usb_interface *interface, const struct usb_device_id *id) { struct usb_device *udev = interface_to_usbdev(interface); struct usbio_led *dev = NULL; int retval = -ENOMEM; int actual_len = 1; u8 data[] = { 0x80 }; printk("SCONTRI"); dev = kmalloc(sizeof(struct usbio_led), GFP_KERNEL); if(dev == NULL) { dev_err(&interface->dev, "Out of memory\n"); goto error; } memset(dev, 0x00, sizeof(*dev)); dev->udev = usb_get_dev(udev); usb_set_intfdata(interface, dev); dev_info(&interface->dev, "USBIO LED device attacched\n"); usb_interrupt_msg(dev->udev, usb_sndintpipe(dev->udev, 1), data, sizeof(data), &actual_len, USB_CTRL_SET_TIMEOUT); /* usb_interrupt_msg(dev->udev, */ /* usb_sndintpipe(dev->udev, 0x80), */ /* NULL, sizeof(NULL), &actual_len, USB_CTRL_SET_TIMEOUT); */ return 0; error: kfree(dev); return retval; } static void usbio_disconnect(struct usb_interface *interface) { struct usbio_led *dev; dev = usb_get_intfdata(interface); usb_set_intfdata(interface, NULL); usb_put_dev(dev->udev); kfree(dev); dev_info(&interface->dev, "USBIO disconnected\n"); } static struct usb_driver usbio_driver = { .name = "usbio", .probe = usbio_probe, .disconnect = usbio_disconnect, .id_table = usbio_id_table }; //module_usb_driver(usbio_driver); static int __init usb_led_init(void) { int retval = 0; retval = usb_register(&usbio_driver); if (retval) printk("usb_register failed. Error number %d", retval); return retval; } static void __exit usb_led_exit(void) { usb_deregister(&usbio_driver); } module_init (usb_led_init); module_exit (usb_led_exit);