ChangeSet 1.1608.84.20, 2004/03/10 12:22:13-08:00, [EMAIL PROTECTED]
[PATCH] USB: wacom driver fixes
the same error code path as in the other drivers.
In addition I added the endianness macros. They save cycles
in interrupt.
-use endian macros
-use GFP_KERNEL where SLAB_ATOMIC is not needed
-fix count bug in open() error path
drivers/usb/input/wacom.c | 22 +++++++++++++---------
1 files changed, 13 insertions(+), 9 deletions(-)
diff -Nru a/drivers/usb/input/wacom.c b/drivers/usb/input/wacom.c
--- a/drivers/usb/input/wacom.c Tue Mar 16 15:02:36 2004
+++ b/drivers/usb/input/wacom.c Tue Mar 16 15:02:36 2004
@@ -63,6 +63,8 @@
#include <linux/module.h>
#include <linux/init.h>
#include <linux/usb.h>
+#include <asm/unaligned.h>
+#include <asm/byteorder.h>
/*
* Version Information
@@ -194,8 +196,8 @@
input_regs(dev, regs);
input_report_key(dev, BTN_TOOL_PEN, 1);
- input_report_abs(dev, ABS_X, data[2] << 8 | data[1]);
- input_report_abs(dev, ABS_Y, data[4] << 8 | data[3]);
+ input_report_abs(dev, ABS_X, le16_to_cpu(get_unaligned((u16 *) &data[1])));
+ input_report_abs(dev, ABS_Y, le16_to_cpu(get_unaligned((u16 *) &data[3])));
input_report_abs(dev, ABS_PRESSURE, (signed char)data[6] + 127);
input_report_key(dev, BTN_TOUCH, ((signed char)data[6] > -80) && !(data[5] &
0x20));
input_report_key(dev, BTN_STYLUS, (data[5] & 0x40));
@@ -234,8 +236,8 @@
if (data[0] != 2)
dbg("received unknown report #%d", data[0]);
- x = data[2] | ((__u32)data[3] << 8);
- y = data[4] | ((__u32)data[5] << 8);
+ x = le16_to_cpu(*(u16 *) &data[2]);
+ y = le16_to_cpu(*(u16 *) &data[4]);
input_regs(dev, regs);
@@ -269,7 +271,7 @@
input_report_abs(dev, ABS_Y, y);
}
- input_report_abs(dev, ABS_PRESSURE, data[6] | ((__u32)data[7] << 8));
+ input_report_abs(dev, ABS_PRESSURE, le16_to_cpu(*(u16 *) &data[6]));
input_report_key(dev, BTN_TOUCH, data[1] & 0x01);
input_report_key(dev, BTN_STYLUS, data[1] & 0x02);
input_report_key(dev, BTN_STYLUS2, data[1] & 0x04);
@@ -354,8 +356,8 @@
goto exit;
}
- input_report_abs(dev, ABS_X, ((__u32)data[2] << 8) | data[3]);
- input_report_abs(dev, ABS_Y, ((__u32)data[4] << 8) | data[5]);
+ input_report_abs(dev, ABS_X, be16_to_cpu(*(u16 *) &data[2]));
+ input_report_abs(dev, ABS_Y, be16_to_cpu(*(u16 *) &data[4]));
input_report_abs(dev, ABS_DISTANCE, data[9] >> 4);
if ((data[1] & 0xb8) == 0xa0) { /*
general pen packet */
@@ -483,8 +485,10 @@
return 0;
wacom->irq->dev = wacom->usbdev;
- if (usb_submit_urb(wacom->irq, GFP_KERNEL))
+ if (usb_submit_urb(wacom->irq, GFP_KERNEL)) {
+ wacom->open--;
return -EIO;
+ }
return 0;
}
@@ -509,7 +513,7 @@
return -ENOMEM;
memset(wacom, 0, sizeof(struct wacom));
- wacom->data = usb_buffer_alloc(dev, 10, SLAB_ATOMIC, &wacom->data_dma);
+ wacom->data = usb_buffer_alloc(dev, 10, GFP_KERNEL, &wacom->data_dma);
if (!wacom->data) {
kfree(wacom);
return -ENOMEM;
-------------------------------------------------------
This SF.Net email is sponsored by: IBM Linux Tutorials
Free Linux tutorial presented by Daniel Robbins, President and CEO of
GenToo technologies. Learn everything from fundamentals to system
administration.http://ads.osdn.com/?ad_id70&alloc_id638&op=click
_______________________________________________
[EMAIL PROTECTED]
To unsubscribe, use the last form field at:
https://lists.sourceforge.net/lists/listinfo/linux-usb-devel