onetouch.c (a9de18eb761f7c1c860964b2e5addc1a35c7e861) | onetouch.c (9cfb95ef72c637bc9b90260e0f98a23f3f49b1bb) |
---|---|
1/* 2 * Support for the Maxtor OneTouch USB hard drive's button 3 * 4 * Current development and maintenance by: 5 * Copyright (c) 2005 Nick Sillik <n.sillik@temple.edu> 6 * 7 * Initial work by: 8 * Copyright (c) 2003 Erik Thyren <erth7411@student.uu.se> --- 21 unchanged lines hidden (view full) --- 30 31#include <linux/kernel.h> 32#include <linux/input.h> 33#include <linux/init.h> 34#include <linux/slab.h> 35#include <linux/module.h> 36#include <linux/usb/input.h> 37#include "usb.h" | 1/* 2 * Support for the Maxtor OneTouch USB hard drive's button 3 * 4 * Current development and maintenance by: 5 * Copyright (c) 2005 Nick Sillik <n.sillik@temple.edu> 6 * 7 * Initial work by: 8 * Copyright (c) 2003 Erik Thyren <erth7411@student.uu.se> --- 21 unchanged lines hidden (view full) --- 30 31#include <linux/kernel.h> 32#include <linux/input.h> 33#include <linux/init.h> 34#include <linux/slab.h> 35#include <linux/module.h> 36#include <linux/usb/input.h> 37#include "usb.h" |
38#include "onetouch.h" | |
39#include "debug.h" 40 | 38#include "debug.h" 39 |
40#define ONETOUCH_PKT_LEN 0x02 41#define ONETOUCH_BUTTON KEY_PROG1 42 43static int onetouch_connect_input(struct us_data *ss); |
|
41static void onetouch_release_input(void *onetouch_); 42 43struct usb_onetouch { 44 char name[128]; 45 char phys[64]; 46 struct input_dev *dev; /* input device interface */ 47 struct usb_device *udev; /* usb device */ 48 49 struct urb *irq; /* urb for interrupt in report */ 50 unsigned char *data; /* input data */ 51 dma_addr_t data_dma; 52 unsigned int is_open:1; 53}; 54 | 44static void onetouch_release_input(void *onetouch_); 45 46struct usb_onetouch { 47 char name[128]; 48 char phys[64]; 49 struct input_dev *dev; /* input device interface */ 50 struct usb_device *udev; /* usb device */ 51 52 struct urb *irq; /* urb for interrupt in report */ 53 unsigned char *data; /* input data */ 54 dma_addr_t data_dma; 55 unsigned int is_open:1; 56}; 57 |
58 59/* 60 * The table of devices 61 */ 62#define UNUSUAL_DEV(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax, \ 63 vendorName, productName, useProtocol, useTransport, \ 64 initFunction, flags) \ 65{ USB_DEVICE_VER(id_vendor, id_product, bcdDeviceMin, bcdDeviceMax), \ 66 .driver_info = (flags)|(USB_US_TYPE_STOR<<24) } 67 68struct usb_device_id onetouch_usb_ids[] = { 69# include "unusual_onetouch.h" 70 { } /* Terminating entry */ 71}; 72MODULE_DEVICE_TABLE(usb, onetouch_usb_ids); 73 74#undef UNUSUAL_DEV 75 76/* 77 * The flags table 78 */ 79#define UNUSUAL_DEV(idVendor, idProduct, bcdDeviceMin, bcdDeviceMax, \ 80 vendor_name, product_name, use_protocol, use_transport, \ 81 init_function, Flags) \ 82{ \ 83 .vendorName = vendor_name, \ 84 .productName = product_name, \ 85 .useProtocol = use_protocol, \ 86 .useTransport = use_transport, \ 87 .initFunction = init_function, \ 88} 89 90static struct us_unusual_dev onetouch_unusual_dev_list[] = { 91# include "unusual_onetouch.h" 92 { } /* Terminating entry */ 93}; 94 95#undef UNUSUAL_DEV 96 97 |
|
55static void usb_onetouch_irq(struct urb *urb) 56{ 57 struct usb_onetouch *onetouch = urb->context; 58 signed char *data = onetouch->data; 59 struct input_dev *dev = onetouch->dev; 60 int status = urb->status; 61 int retval; 62 --- 59 unchanged lines hidden (view full) --- 122 break; 123 default: 124 break; 125 } 126 } 127} 128#endif /* CONFIG_PM */ 129 | 98static void usb_onetouch_irq(struct urb *urb) 99{ 100 struct usb_onetouch *onetouch = urb->context; 101 signed char *data = onetouch->data; 102 struct input_dev *dev = onetouch->dev; 103 int status = urb->status; 104 int retval; 105 --- 59 unchanged lines hidden (view full) --- 165 break; 166 default: 167 break; 168 } 169 } 170} 171#endif /* CONFIG_PM */ 172 |
130int onetouch_connect_input(struct us_data *ss) | 173static int onetouch_connect_input(struct us_data *ss) |
131{ 132 struct usb_device *udev = ss->pusb_dev; 133 struct usb_host_interface *interface; 134 struct usb_endpoint_descriptor *endpoint; 135 struct usb_onetouch *onetouch; 136 struct input_dev *input_dev; 137 int pipe, maxp; 138 int error = -ENOMEM; --- 92 unchanged lines hidden (view full) --- 231 if (onetouch) { 232 usb_kill_urb(onetouch->irq); 233 input_unregister_device(onetouch->dev); 234 usb_free_urb(onetouch->irq); 235 usb_buffer_free(onetouch->udev, ONETOUCH_PKT_LEN, 236 onetouch->data, onetouch->data_dma); 237 } 238} | 174{ 175 struct usb_device *udev = ss->pusb_dev; 176 struct usb_host_interface *interface; 177 struct usb_endpoint_descriptor *endpoint; 178 struct usb_onetouch *onetouch; 179 struct input_dev *input_dev; 180 int pipe, maxp; 181 int error = -ENOMEM; --- 92 unchanged lines hidden (view full) --- 274 if (onetouch) { 275 usb_kill_urb(onetouch->irq); 276 input_unregister_device(onetouch->dev); 277 usb_free_urb(onetouch->irq); 278 usb_buffer_free(onetouch->udev, ONETOUCH_PKT_LEN, 279 onetouch->data, onetouch->data_dma); 280 } 281} |
282 283static int onetouch_probe(struct usb_interface *intf, 284 const struct usb_device_id *id) 285{ 286 struct us_data *us; 287 int result; 288 289 result = usb_stor_probe1(&us, intf, id, 290 (id - onetouch_usb_ids) + onetouch_unusual_dev_list); 291 if (result) 292 return result; 293 294 /* Use default transport and protocol */ 295 296 result = usb_stor_probe2(us); 297 return result; 298} 299 300static struct usb_driver onetouch_driver = { 301 .name = "ums-onetouch", 302 .probe = onetouch_probe, 303 .disconnect = usb_stor_disconnect, 304 .suspend = usb_stor_suspend, 305 .resume = usb_stor_resume, 306 .reset_resume = usb_stor_reset_resume, 307 .pre_reset = usb_stor_pre_reset, 308 .post_reset = usb_stor_post_reset, 309 .id_table = onetouch_usb_ids, 310 .soft_unbind = 1, 311}; 312 313static int __init onetouch_init(void) 314{ 315 return usb_register(&onetouch_driver); 316} 317 318static void __exit onetouch_exit(void) 319{ 320 usb_deregister(&onetouch_driver); 321} 322 323module_init(onetouch_init); 324module_exit(onetouch_exit); |
|