On Tue, 15 Jan 2013 12:43:48 +0900 Fernando Luis Vázquez Cao <fernando_b1@xxxxxxxxxxxxx> wrote: Hi Fernando, > Some Vaio desktop computers, among them the VGC-LN51JGB multimedia PC, have > a RF receiver, multi-interface USB device 054c:0374, that is used to connect > a wireless keyboard and a wireless mouse. > > The keyboard works flawlessly, but the mouse (VGP-WMS3 in my case) does not > seem to be generating any pointer events. The problem is that the mouse pointer > is wrongly declared as a constant non-data variable in the report descriptor > (see lsusb and usbhid-dump output below), with the consenquence that it is typo: consequence > ignored by the HID code. > > Add this device to the have-special-driver list and fix up the report > descriptor in the Sony-specific driver which happens to already have a fixup > for a similar firmware bug. > > # lsusb -vd 054C:0374 > Bus 003 Device 002: ID 054c:0374 Sony Corp. > Device Descriptor: > bLength 18 > bDescriptorType 1 > bcdUSB 2.00 > bDeviceClass 0 (Defined at Interface level) > bDeviceSubClass 0 > bDeviceProtocol 0 > bMaxPacketSize0 8 > idVendor 0x054c Sony Corp. > idProduct 0x0374 > iSerial 0 > [...] > Interface Descriptor: > bLength 9 > bDescriptorType 4 > bInterfaceNumber 1 > bAlternateSetting 0 > bNumEndpoints 1 > bInterfaceClass 3 Human Interface Device > bInterfaceSubClass 1 Boot Interface Subclass > bInterfaceProtocol 2 Mouse > iInterface 2 RF Receiver > [...] > Report Descriptor: (length is 100) > Item(Global): Usage Page, data= [ 0x01 ] 1 > Generic Desktop Controls > Item(Local ): Usage, data= [ 0x30 ] 48 > Direction-X > Item(Local ): Usage, data= [ 0x31 ] 49 > Direction-Y > Item(Global): Report Count, data= [ 0x02 ] 2 > Item(Global): Report Size, data= [ 0x08 ] 8 > Item(Global): Logical Minimum, data= [ 0x81 ] 129 > Item(Global): Logical Maximum, data= [ 0x7f ] 127 > Item(Main ): Input, data= [ 0x07 ] 7 > Constant Variable Relative No_Wrap Linear > Preferred_State No_Null_Position Non_Volatile Bitfield > > # sudo usbhid-dump > > 003:002:001:DESCRIPTOR 1357910009.758544 > 05 01 09 02 A1 01 05 01 09 02 A1 02 85 01 09 01 > A1 00 05 09 19 01 29 05 95 05 75 01 15 00 25 01 > 81 02 75 03 95 01 81 01 05 01 09 30 09 31 95 02 > 75 08 15 81 25 7F 81 07 A1 02 85 01 09 38 35 00 > 45 00 15 81 25 7F 95 01 75 08 81 06 C0 A1 02 85 > 01 05 0C 15 81 25 7F 95 01 75 08 0A 38 02 81 06 > C0 C0 C0 C0 > > Cc: linux-input@xxxxxxxxxxxxxxx > Cc: linux-usb@xxxxxxxxxxxxxxx > Cc: linux-kernel@xxxxxxxxxxxxxxx > Signed-off-by: Fernando Luis Vazquez Cao <fernando@xxxxxxxxxxxxx> > --- > > diff -urNp linux-3.8-rc3-orig/drivers/hid/hid-core.c linux-3.8-rc3/drivers/hid/hid-core.c > --- linux-3.8-rc3-orig/drivers/hid/hid-core.c 2013-01-13 20:54:36.846952518 +0900 > +++ linux-3.8-rc3/drivers/hid/hid-core.c 2013-01-13 18:21:19.901347327 +0900 > @@ -1697,6 +1697,7 @@ static const struct hid_device_id hid_ha > { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER) }, > { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_PS3_CONTROLLER) }, > { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE) }, > + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE) }, > { HID_USB_DEVICE(USB_VENDOR_ID_SUNPLUS, USB_DEVICE_ID_SUNPLUS_WDESKTOP) }, > { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300) }, > { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304) }, > diff -urNp linux-3.8-rc3-orig/drivers/hid/hid-ids.h linux-3.8-rc3/drivers/hid/hid-ids.h > --- linux-3.8-rc3-orig/drivers/hid/hid-ids.h 2013-01-13 20:54:36.850952537 +0900 > +++ linux-3.8-rc3/drivers/hid/hid-ids.h 2013-01-13 18:21:19.901347327 +0900 > @@ -706,6 +706,7 @@ > > #define USB_VENDOR_ID_SONY 0x054c > #define USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE 0x024b > +#define USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE 0x0374 > #define USB_DEVICE_ID_SONY_PS3_BDREMOTE 0x0306 > #define USB_DEVICE_ID_SONY_PS3_CONTROLLER 0x0268 > #define USB_DEVICE_ID_SONY_NAVIGATION_CONTROLLER 0x042f > diff -urNp linux-3.8-rc3-orig/drivers/hid/hid-sony.c linux-3.8-rc3/drivers/hid/hid-sony.c > --- linux-3.8-rc3-orig/drivers/hid/hid-sony.c 2012-12-11 12:30:57.000000000 +0900 > +++ linux-3.8-rc3/drivers/hid/hid-sony.c 2013-01-13 18:21:19.901347327 +0900 > @@ -44,19 +44,21 @@ static __u8 *sony_report_fixup(struct hi > struct sony_sc *sc = hid_get_drvdata(hdev); > > if ((sc->quirks & VAIO_RDESC_CONSTANT) && > - *rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) { > - hid_info(hdev, "Fixing up Sony Vaio VGX report descriptor\n"); > + *rsize >= 56 && rdesc[54] == 0x81 && rdesc[55] == 0x07) { > + hid_info(hdev, > + "Fixing up Sony RF Receiver report descriptor\n"); Changing the message does make sense, but try to avoid mixing functional changes with style changes (I am referring to the change of indentation here). If you _really_ want to change the style send a separate patch stating clearly in the commit message that there are no functionality changes. This makes the review easier for both kind of patches. > rdesc[55] = 0x06; > } > > /* The HID descriptor exposed over BT has a trailing zero byte */ > if ((((sc->quirks & SIXAXIS_CONTROLLER_USB) && *rsize == 148) || > - ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) && > - rdesc[83] == 0x75) { > + ((sc->quirks & SIXAXIS_CONTROLLER_BT) && *rsize == 149)) && > + rdesc[83] == 0x75) { Ditto, style changes. > hid_info(hdev, "Fixing up Sony Sixaxis report descriptor\n"); > memcpy((void *)&rdesc[83], (void *)&sixaxis_rdesc_fixup, > sizeof(sixaxis_rdesc_fixup)); > } > + Ditto. > return rdesc; > } > > @@ -217,6 +219,8 @@ static const struct hid_device_id sony_d > .driver_data = SIXAXIS_CONTROLLER_BT }, > { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGX_MOUSE), > .driver_data = VAIO_RDESC_CONSTANT }, > + { HID_USB_DEVICE(USB_VENDOR_ID_SONY, USB_DEVICE_ID_SONY_VAIO_VGP_MOUSE), > + .driver_data = VAIO_RDESC_CONSTANT }, > { } > }; > MODULE_DEVICE_TABLE(hid, sony_devices); > > Thanks, Antonio -- Antonio Ospite http://ao2.it A: Because it messes up the order in which people normally read text. See http://en.wikipedia.org/wiki/Posting_style Q: Why is top-posting such a bad thing? -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html