USB: fix endianness in mos7720
authorOliver Neukum <oneukum@suse.de>
Mon, 19 Mar 2007 12:58:29 +0000 (13:58 +0100)
committerGreg Kroah-Hartman <gregkh@suse.de>
Fri, 27 Apr 2007 20:28:36 +0000 (13:28 -0700)
there's code unclean w.r.t. endianness in the mos7720 driver.

Signed-off-by: Oliver Neukum <oneukum@suse.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/usb/serial/mos7720.c

index 6ba87e6e28c39376389698c4805f1df9df24fcbd..b563e2ad8728ebe261065ec7ebc6430e7c78b8b8 100644 (file)
@@ -103,11 +103,9 @@ static void mos7720_interrupt_callback(struct urb *urb)
 {
        int result;
        int length;
-       __u32 *data;
-       unsigned int status;
+       __u8 *data;
        __u8 sp1;
        __u8 sp2;
-       __u8 st;
 
        dbg("%s"," : Entering\n");
 
@@ -141,18 +139,19 @@ static void mos7720_interrupt_callback(struct urb *urb)
         * Byte 2 IIR Port 2 (port.number is 1)
         * Byte 3 --------------
         * Byte 4 FIFO status for both */
-       if (length && length > 4) {
+
+       /* the above description is inverted
+        *      oneukum 2007-03-14 */
+
+       if (unlikely(length != 4)) {
                dbg("Wrong data !!!");
                return;
        }
 
-       status = *data;
-
-       sp1 = (status & 0xff000000)>>24;
-       sp2 = (status & 0x00ff0000)>>16;
-       st = status & 0x000000ff;
+       sp1 = data[3];
+       sp2 = data[2];
 
-       if ((sp1 & 0x01) || (sp2 & 0x01)) {
+       if ((sp1 | sp2) & 0x01) {
                /* No Interrupt Pending in both the ports */
                dbg("No Interrupt !!!");
        } else {