Merge git://git.kernel.org/pub/scm/linux/kernel/git/gregkh/usb-2.6
[pandora-kernel.git] / drivers / input / tablet / kbtab.c
index d31b9c7..290f4e5 100644 (file)
@@ -34,10 +34,6 @@ struct kbtab {
        struct input_dev *dev;
        struct usb_device *usbdev;
        struct urb *irq;
-       int x, y;
-       int button;
-       int pressure;
-       __u32 serial[2];
        char phys[32];
 };
 
@@ -46,6 +42,7 @@ static void kbtab_irq(struct urb *urb)
        struct kbtab *kbtab = urb->context;
        unsigned char *data = kbtab->data;
        struct input_dev *dev = kbtab->dev;
+       int pressure;
        int retval;
 
        switch (urb->status) {
@@ -63,31 +60,27 @@ static void kbtab_irq(struct urb *urb)
                goto exit;
        }
 
-       kbtab->x = get_unaligned_le16(&data[1]);
-       kbtab->y = get_unaligned_le16(&data[3]);
-
-       kbtab->pressure = (data[5]);
 
        input_report_key(dev, BTN_TOOL_PEN, 1);
 
-       input_report_abs(dev, ABS_X, kbtab->x);
-       input_report_abs(dev, ABS_Y, kbtab->y);
+       input_report_abs(dev, ABS_X, get_unaligned_le16(&data[1]));
+       input_report_abs(dev, ABS_Y, get_unaligned_le16(&data[3]));
 
        /*input_report_key(dev, BTN_TOUCH , data[0] & 0x01);*/
        input_report_key(dev, BTN_RIGHT, data[0] & 0x02);
 
-       if (-1 == kb_pressure_click) {
-               input_report_abs(dev, ABS_PRESSURE, kbtab->pressure);
-       } else {
-               input_report_key(dev, BTN_LEFT, (kbtab->pressure > kb_pressure_click) ? 1 : 0);
-       };
+       pressure = data[5];
+       if (kb_pressure_click == -1)
+               input_report_abs(dev, ABS_PRESSURE, pressure);
+       else
+               input_report_key(dev, BTN_LEFT, pressure > kb_pressure_click ? 1 : 0);
 
        input_sync(dev);
 
  exit:
-       retval = usb_submit_urb (urb, GFP_ATOMIC);
+       retval = usb_submit_urb(urb, GFP_ATOMIC);
        if (retval)
-               err ("%s - usb_submit_urb failed with result %d",
+               err("%s - usb_submit_urb failed with result %d",
                     __func__, retval);
 }
 
@@ -153,13 +146,11 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
        input_dev->open = kbtab_open;
        input_dev->close = kbtab_close;
 
-       input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS) |
-               BIT_MASK(EV_MSC);
-       input_dev->keybit[BIT_WORD(BTN_LEFT)] |= BIT_MASK(BTN_LEFT) |
-               BIT_MASK(BTN_RIGHT) | BIT_MASK(BTN_MIDDLE);
-       input_dev->keybit[BIT_WORD(BTN_DIGI)] |= BIT_MASK(BTN_TOOL_PEN) |
-               BIT_MASK(BTN_TOUCH);
-       input_dev->mscbit[0] |= BIT_MASK(MSC_SERIAL);
+       input_dev->evbit[0] |= BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
+       input_dev->keybit[BIT_WORD(BTN_LEFT)] |=
+               BIT_MASK(BTN_LEFT) | BIT_MASK(BTN_RIGHT);
+       input_dev->keybit[BIT_WORD(BTN_DIGI)] |=
+               BIT_MASK(BTN_TOOL_PEN) | BIT_MASK(BTN_TOUCH);
        input_set_abs_params(input_dev, ABS_X, 0, 0x2000, 4, 0);
        input_set_abs_params(input_dev, ABS_Y, 0, 0x1750, 4, 0);
        input_set_abs_params(input_dev, ABS_PRESSURE, 0, 0xff, 0, 0);
@@ -182,7 +173,7 @@ static int kbtab_probe(struct usb_interface *intf, const struct usb_device_id *i
        return 0;
 
  fail3:        usb_free_urb(kbtab->irq);
- fail2:        usb_free_coherent(dev, 10, kbtab->data, kbtab->data_dma);
+ fail2:        usb_free_coherent(dev, 8, kbtab->data, kbtab->data_dma);
  fail1:        input_free_device(input_dev);
        kfree(kbtab);
        return error;
@@ -193,13 +184,11 @@ static void kbtab_disconnect(struct usb_interface *intf)
        struct kbtab *kbtab = usb_get_intfdata(intf);
 
        usb_set_intfdata(intf, NULL);
-       if (kbtab) {
-               usb_kill_urb(kbtab->irq);
-               input_unregister_device(kbtab->dev);
-               usb_free_urb(kbtab->irq);
-               usb_free_coherent(interface_to_usbdev(intf), 10, kbtab->data, kbtab->data_dma);
-               kfree(kbtab);
-       }
+
+       input_unregister_device(kbtab->dev);
+       usb_free_urb(kbtab->irq);
+       usb_free_coherent(kbtab->usbdev, 8, kbtab->data, kbtab->data_dma);
+       kfree(kbtab);
 }
 
 static struct usb_driver kbtab_driver = {