1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495 |
- #include <linux/kernel.h>
- #include <linux/errno.h>
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/usb.h>
- #include <linux/slab.h>
- #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);
|