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 ---