Merge master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/gregkh/usb-2.6: (70 commits) USB: remove duplicate device id from zc0301 USB: remove duplicate device id from usb_storage USB: remove duplicate device id from keyspan USB: remove duplicate device id from ftdi_sio USB: remove duplicate device id from visor USB: a bit more coding style cleanup usbcore: trivial whitespace fixes usb-storage: use first bulk endpoints, not last EHCI: fix interrupt-driven remote wakeup USB: switch ehci-hcd to new polling scheme USB: autosuspend for usb printer driver USB Input: Added kernel module to support all GTCO CalComp USB InterWrite School products USB: Sierra Wireless auto set D0 USB: usb ethernet gadget recognizes HUSB2DEV USB: list atmel husb2_udc gadget controller USB: gadgetfs AIO tweaks USB: gadgetfs behaves better on userspace init bug USB: gadgetfs race fix USB: gadgetfs simplifications USB: gadgetfs cleanups ...
This commit is contained in:
@@ -352,3 +352,15 @@ config USB_APPLETOUCH
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called appletouch.
|
||||
|
||||
config USB_GTCO
|
||||
tristate "GTCO CalComp/InterWrite USB Support"
|
||||
depends on USB && INPUT
|
||||
---help---
|
||||
Say Y here if you want to use the USB version of the GTCO
|
||||
CalComp/InterWrite Tablet. Make sure to say Y to "Mouse support"
|
||||
(CONFIG_INPUT_MOUSEDEV) and/or "Event interface support"
|
||||
(CONFIG_INPUT_EVDEV) as well.
|
||||
|
||||
To compile this driver as a module, choose M here: the
|
||||
module will be called gtco.
|
||||
|
||||
@@ -48,6 +48,7 @@ obj-$(CONFIG_USB_ACECAD) += acecad.o
|
||||
obj-$(CONFIG_USB_YEALINK) += yealink.o
|
||||
obj-$(CONFIG_USB_XPAD) += xpad.o
|
||||
obj-$(CONFIG_USB_APPLETOUCH) += appletouch.o
|
||||
obj-$(CONFIG_USB_GTCO) += gtco.o
|
||||
|
||||
ifeq ($(CONFIG_USB_DEBUG),y)
|
||||
EXTRA_CFLAGS += -DDEBUG
|
||||
|
||||
1104
drivers/usb/input/gtco.c
Normal file
1104
drivers/usb/input/gtco.c
Normal file
File diff suppressed because it is too large
Load Diff
@@ -768,6 +768,9 @@ void usbhid_init_reports(struct hid_device *hid)
|
||||
#define USB_VENDOR_ID_PANTHERLORD 0x0810
|
||||
#define USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK 0x0001
|
||||
|
||||
#define USB_VENDOR_ID_SONY 0x054c
|
||||
#define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268
|
||||
|
||||
/*
|
||||
* Alphabetically sorted blacklist by quirk type.
|
||||
*/
|
||||
@@ -949,6 +952,8 @@ static const struct hid_blacklist {
|
||||
|
||||
{ USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWIN_USB_JOYSTICK, HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS },
|
||||
|
||||
{ USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER, HID_QUIRK_SONY_PS3_CONTROLLER },
|
||||
|
||||
{ 0, 0 }
|
||||
};
|
||||
|
||||
@@ -1013,6 +1018,32 @@ static void hid_fixup_cymotion_descriptor(char *rdesc, int rsize)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
* Sending HID_REQ_GET_REPORT changes the operation mode of the ps3 controller
|
||||
* to "operational". Without this, the ps3 controller will not report any
|
||||
* events.
|
||||
*/
|
||||
static void hid_fixup_sony_ps3_controller(struct usb_device *dev, int ifnum)
|
||||
{
|
||||
int result;
|
||||
char *buf = kmalloc(18, GFP_KERNEL);
|
||||
|
||||
if (!buf)
|
||||
return;
|
||||
|
||||
result = usb_control_msg(dev, usb_rcvctrlpipe(dev, 0),
|
||||
HID_REQ_GET_REPORT,
|
||||
USB_DIR_IN | USB_TYPE_CLASS |
|
||||
USB_RECIP_INTERFACE,
|
||||
(3 << 8) | 0xf2, ifnum, buf, 17,
|
||||
USB_CTRL_GET_TIMEOUT);
|
||||
|
||||
if (result < 0)
|
||||
err("%s failed: %d\n", __func__, result);
|
||||
|
||||
kfree(buf);
|
||||
}
|
||||
|
||||
static struct hid_device *usb_hid_configure(struct usb_interface *intf)
|
||||
{
|
||||
struct usb_host_interface *interface = intf->cur_altsetting;
|
||||
@@ -1303,6 +1334,10 @@ static int hid_probe(struct usb_interface *intf, const struct usb_device_id *id)
|
||||
if ((hid->claimed & HID_CLAIMED_INPUT))
|
||||
hid_ff_init(hid);
|
||||
|
||||
if (hid->quirks & HID_QUIRK_SONY_PS3_CONTROLLER)
|
||||
hid_fixup_sony_ps3_controller(interface_to_usbdev(intf),
|
||||
intf->cur_altsetting->desc.bInterfaceNumber);
|
||||
|
||||
printk(KERN_INFO);
|
||||
|
||||
if (hid->claimed & HID_CLAIMED_INPUT)
|
||||
|
||||
Reference in New Issue
Block a user