]> git.neil.brown.name Git - history.git/commitdiff
input: Resurrect usb_set_report for Aiptek and Wacom tablets.
authorVojtech Pavlik <vojtech@suse.cz>
Wed, 12 Feb 2003 12:07:29 +0000 (13:07 +0100)
committerVojtech Pavlik <vojtech@suse.cz>
Wed, 12 Feb 2003 12:07:29 +0000 (13:07 +0100)
drivers/usb/input/aiptek.c
drivers/usb/input/wacom.c

index 6379f83cd965ae0682983a159307ee4f516c4ba1..cd842bb83f2af2f8c55d017d96bd0445a989b341 100644 (file)
@@ -224,13 +224,18 @@ aiptek_close(struct input_dev *dev)
                usb_unlink_urb(aiptek->irq);
 }
 
-/* 
- * FIXME, either remove this call, or talk the maintainer into 
- * adding usb_set_report back into the core.
- */
-#if 0
+#define USB_REQ_SET_REPORT     0x09
+static int
+usb_set_report(struct usb_device *dev, struct usb_host_interface *inter, unsigned char type,
+               unsigned char id, void *buf, int size)
+{
+       return usb_control_msg(dev, usb_sndctrlpipe(dev, 0),
+               USB_REQ_SET_REPORT, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+               (type << 8) + id, inter->desc.bInterfaceNumber, buf, size, HZ);
+}
+
 static void
-aiptek_command(struct usb_device *dev, unsigned int ifnum,
+aiptek_command(struct usb_device *dev, struct usb_host_interface *inter,
               unsigned char command, unsigned char data)
 {
        __u8 buf[3];
@@ -239,17 +244,17 @@ aiptek_command(struct usb_device *dev, unsigned int ifnum,
        buf[1] = command;
        buf[2] = data;
 
-       if (usb_set_report(dev, ifnum, 3, 2, buf, 3) != 3) {
+       if (usb_set_report(dev, inter, 3, 2, buf, 3) != 3) {
                dbg("aiptek_command: 0x%x 0x%x\n", command, data);
        }
 }
-#endif
 
 static int 
 aiptek_probe(struct usb_interface *intf,
             const struct usb_device_id *id)
 {
        struct usb_device *dev = interface_to_usbdev (intf);
+       struct usb_host_interface *interface = intf->altsetting + 0;
        struct usb_endpoint_descriptor *endpoint;
        struct aiptek *aiptek;
 
@@ -271,11 +276,11 @@ aiptek_probe(struct usb_interface *intf,
                return -ENOMEM;
        }
 
-       // Resolution500LPI
-//     aiptek_command(dev, ifnum, 0x18, 0x04);
+       /* Resolution500LPI */
+       aiptek_command(dev, interface, 0x18, 0x04);
 
-       // SwitchToTablet
-//     aiptek_command(dev, ifnum, 0x10, 0x01);
+       /* SwitchToTablet */
+       aiptek_command(dev, interface, 0x10, 0x01);
 
        aiptek->features = aiptek_features + id->driver_info;
 
index 66e9122a6e7fbfb197fdfdaf8a5621822109ec89..f6b685dabb3e736e2698002ddf566200023d2b5d 100644 (file)
@@ -102,6 +102,17 @@ struct wacom {
        char phys[32];
 };
 
+#define USB_REQ_SET_REPORT     0x09
+static int usb_set_report(struct usb_interface *intf, unsigned char type,
+                               unsigned char id, void *buf, int size)
+{
+        return usb_control_msg(interface_to_usbdev(intf),
+               usb_sndctrlpipe(interface_to_usbdev(intf), 0),
+                USB_REQ_SET_REPORT, USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+                (type << 8) + id, intf->altsetting[0].desc.bInterfaceNumber,
+               buf, size, HZ);
+}
+
 static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
 {
        struct wacom *wacom = urb->context;
@@ -488,6 +499,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
 {
        struct usb_device *dev = interface_to_usbdev(intf);
        struct usb_endpoint_descriptor *endpoint;
+       char rep_data[2] = {0x02, 0x02};
        struct wacom *wacom;
        char path[64];
 
@@ -582,11 +594,9 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
 
        input_register_device(&wacom->dev);
 
-#if 0  /* Missing usb_set_report() */
        usb_set_report(intf, 3, 2, rep_data, 2);
        usb_set_report(intf, 3, 5, rep_data, 0);
        usb_set_report(intf, 3, 6, rep_data, 0);
-#endif
 
        printk(KERN_INFO "input: %s on %s\n", wacom->features->name, path);