appletouch.c (cb5629b10d64a8006622ce3a52bc887d91057d69) | appletouch.c (0385c5ee3ca96bfe244610bf459abf66682ff202) |
---|---|
1/* 2 * Apple USB Touchpad (for post-February 2005 PowerBooks and MacBooks) driver 3 * 4 * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 2005-2008 Johannes Berg (johannes@sipsolutions.net) 6 * Copyright (C) 2005-2008 Stelian Pop (stelian@popies.net) 7 * Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de) 8 * Copyright (C) 2005 Peter Osterlund (petero2@telia.com) --- 241 unchanged lines hidden (view full) --- 250 251/* 252 * By default newer Geyser devices send standard USB HID mouse 253 * packets (Report ID 2). This code changes device mode, so it 254 * sends raw sensor reports (Report ID 5). 255 */ 256static int atp_geyser_init(struct usb_device *udev) 257{ | 1/* 2 * Apple USB Touchpad (for post-February 2005 PowerBooks and MacBooks) driver 3 * 4 * Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com) 5 * Copyright (C) 2005-2008 Johannes Berg (johannes@sipsolutions.net) 6 * Copyright (C) 2005-2008 Stelian Pop (stelian@popies.net) 7 * Copyright (C) 2005 Frank Arnold (frank@scirocco-5v-turbo.de) 8 * Copyright (C) 2005 Peter Osterlund (petero2@telia.com) --- 241 unchanged lines hidden (view full) --- 250 251/* 252 * By default newer Geyser devices send standard USB HID mouse 253 * packets (Report ID 2). This code changes device mode, so it 254 * sends raw sensor reports (Report ID 5). 255 */ 256static int atp_geyser_init(struct usb_device *udev) 257{ |
258 char data[8]; | 258 char *data; |
259 int size; 260 int i; | 259 int size; 260 int i; |
261 int ret; |
|
261 | 262 |
263 data = kmalloc(8, GFP_KERNEL); 264 if (!data) { 265 err("Out of memory"); 266 return -ENOMEM; 267 } 268 |
|
262 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 263 ATP_GEYSER_MODE_READ_REQUEST_ID, 264 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 265 ATP_GEYSER_MODE_REQUEST_VALUE, | 269 size = usb_control_msg(udev, usb_rcvctrlpipe(udev, 0), 270 ATP_GEYSER_MODE_READ_REQUEST_ID, 271 USB_DIR_IN | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 272 ATP_GEYSER_MODE_REQUEST_VALUE, |
266 ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000); | 273 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000); |
267 268 if (size != 8) { 269 dprintk("atp_geyser_init: read error\n"); 270 for (i = 0; i < 8; i++) 271 dprintk("appletouch[%d]: %d\n", i, data[i]); 272 273 err("Failed to read mode from device."); | 274 275 if (size != 8) { 276 dprintk("atp_geyser_init: read error\n"); 277 for (i = 0; i < 8; i++) 278 dprintk("appletouch[%d]: %d\n", i, data[i]); 279 280 err("Failed to read mode from device."); |
274 return -EIO; | 281 ret = -EIO; 282 goto out_free; |
275 } 276 277 /* Apply the mode switch */ 278 data[0] = ATP_GEYSER_MODE_VENDOR_VALUE; 279 280 size = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 281 ATP_GEYSER_MODE_WRITE_REQUEST_ID, 282 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 283 ATP_GEYSER_MODE_REQUEST_VALUE, | 283 } 284 285 /* Apply the mode switch */ 286 data[0] = ATP_GEYSER_MODE_VENDOR_VALUE; 287 288 size = usb_control_msg(udev, usb_sndctrlpipe(udev, 0), 289 ATP_GEYSER_MODE_WRITE_REQUEST_ID, 290 USB_DIR_OUT | USB_TYPE_CLASS | USB_RECIP_INTERFACE, 291 ATP_GEYSER_MODE_REQUEST_VALUE, |
284 ATP_GEYSER_MODE_REQUEST_INDEX, &data, 8, 5000); | 292 ATP_GEYSER_MODE_REQUEST_INDEX, data, 8, 5000); |
285 286 if (size != 8) { 287 dprintk("atp_geyser_init: write error\n"); 288 for (i = 0; i < 8; i++) 289 dprintk("appletouch[%d]: %d\n", i, data[i]); 290 291 err("Failed to request geyser raw mode"); | 293 294 if (size != 8) { 295 dprintk("atp_geyser_init: write error\n"); 296 for (i = 0; i < 8; i++) 297 dprintk("appletouch[%d]: %d\n", i, data[i]); 298 299 err("Failed to request geyser raw mode"); |
292 return -EIO; | 300 ret = -EIO; 301 goto out_free; |
293 } | 302 } |
294 return 0; | 303 ret = 0; 304out_free: 305 kfree(data); 306 return ret; |
295} 296 297/* 298 * Reinitialise the device. This usually stops stream of empty packets 299 * coming from it. 300 */ 301static void atp_reinit(struct work_struct *work) 302{ --- 638 unchanged lines hidden --- | 307} 308 309/* 310 * Reinitialise the device. This usually stops stream of empty packets 311 * coming from it. 312 */ 313static void atp_reinit(struct work_struct *work) 314{ --- 638 unchanged lines hidden --- |