Messages in this thread Patch in this message | | | Subject | [PATCH] hiddev: output reports are dropped when HIDIOCSREPORT is called in short succession | From | Stefan Nickl <> | Date | Mon, 22 Aug 2005 11:25:31 +0200 |
| |
Hi,
when trying to make the hiddev driver issue several Set_Report control transfers to a custom device with 2.6.13-rc6, only the first transfer in a row is carried out, while others immediately following it are silently dropped.
This happens where hid_submit_report() (in hid-core.c) tests for HID_CTRL_RUNNING, which seems to be still set because the first transfer is not finished yet.
As a workaround, inserting a delay between the two calls to ioctl(HIDIOCSREPORT) in userspace "solves" the problem. The straightforward fix is to add a call to hid_wait_io() to the implementation of HIDIOCSREPORT (in hiddev.c), just like for HIDIOCGREPORT. Works fine for me.
Apparently, this issue has some history: http://marc.theaimsgroup.com/?l=linux-usb-users&m=111100670105558&w=2
Signed-off-by: Stefan Nickl <Stefan.Nickl@kontron.com>
-- Stefan Nickl Kontron Modular Computers
--- v2.6.13-rc6/drivers/usb/input/hiddev.c.orig 2005-08-22 10:56:55.000000000 +0200 +++ v2.6.13-rc6/drivers/usb/input/hiddev.c 2005-08-22 10:57:07.000000000 +0200 @@ -507,6 +507,7 @@ static int hiddev_ioctl(struct inode *in return -EINVAL; hid_submit_report(hid, report, USB_DIR_OUT); + hid_wait_io(hid); return 0; | |