Commit a2b33c36 authored by Vojtech Pavlik's avatar Vojtech Pavlik

input: Resurrect usb_set_report for Aiptek and Wacom tablets.

parent b81c81a0
...@@ -224,13 +224,18 @@ aiptek_close(struct input_dev *dev) ...@@ -224,13 +224,18 @@ aiptek_close(struct input_dev *dev)
usb_unlink_urb(aiptek->irq); usb_unlink_urb(aiptek->irq);
} }
/* #define USB_REQ_SET_REPORT 0x09
* FIXME, either remove this call, or talk the maintainer into static int
* adding usb_set_report back into the core. usb_set_report(struct usb_device *dev, struct usb_host_interface *inter, unsigned char type,
*/ unsigned char id, void *buf, int size)
#if 0 {
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 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) unsigned char command, unsigned char data)
{ {
__u8 buf[3]; __u8 buf[3];
...@@ -239,17 +244,17 @@ aiptek_command(struct usb_device *dev, unsigned int ifnum, ...@@ -239,17 +244,17 @@ aiptek_command(struct usb_device *dev, unsigned int ifnum,
buf[1] = command; buf[1] = command;
buf[2] = data; 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); dbg("aiptek_command: 0x%x 0x%x\n", command, data);
} }
} }
#endif
static int static int
aiptek_probe(struct usb_interface *intf, aiptek_probe(struct usb_interface *intf,
const struct usb_device_id *id) const struct usb_device_id *id)
{ {
struct usb_device *dev = interface_to_usbdev (intf); struct usb_device *dev = interface_to_usbdev (intf);
struct usb_host_interface *interface = intf->altsetting + 0;
struct usb_endpoint_descriptor *endpoint; struct usb_endpoint_descriptor *endpoint;
struct aiptek *aiptek; struct aiptek *aiptek;
...@@ -271,11 +276,11 @@ aiptek_probe(struct usb_interface *intf, ...@@ -271,11 +276,11 @@ aiptek_probe(struct usb_interface *intf,
return -ENOMEM; return -ENOMEM;
} }
// Resolution500LPI /* Resolution500LPI */
// aiptek_command(dev, ifnum, 0x18, 0x04); aiptek_command(dev, interface, 0x18, 0x04);
// SwitchToTablet /* SwitchToTablet */
// aiptek_command(dev, ifnum, 0x10, 0x01); aiptek_command(dev, interface, 0x10, 0x01);
aiptek->features = aiptek_features + id->driver_info; aiptek->features = aiptek_features + id->driver_info;
......
...@@ -102,6 +102,17 @@ struct wacom { ...@@ -102,6 +102,17 @@ struct wacom {
char phys[32]; 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) static void wacom_pl_irq(struct urb *urb, struct pt_regs *regs)
{ {
struct wacom *wacom = urb->context; struct wacom *wacom = urb->context;
...@@ -488,6 +499,7 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i ...@@ -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_device *dev = interface_to_usbdev(intf);
struct usb_endpoint_descriptor *endpoint; struct usb_endpoint_descriptor *endpoint;
char rep_data[2] = {0x02, 0x02};
struct wacom *wacom; struct wacom *wacom;
char path[64]; char path[64];
...@@ -582,11 +594,9 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i ...@@ -582,11 +594,9 @@ static int wacom_probe(struct usb_interface *intf, const struct usb_device_id *i
input_register_device(&wacom->dev); 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, 2, rep_data, 2);
usb_set_report(intf, 3, 5, rep_data, 0); usb_set_report(intf, 3, 5, rep_data, 0);
usb_set_report(intf, 3, 6, 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); printk(KERN_INFO "input: %s on %s\n", wacom->features->name, path);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment