summaryrefslogtreecommitdiffstats
path: root/drivers/hid
AgeCommit message (Collapse)Author
2011-12-21HID: usbhid: hid-core: submit queued urbs before suspendDaniel Kurtz
If any userspace program has opened a keyboard device, the input core de-activates the keyboard's LEDs upon suspend(). It does this by sending individual EV_LED[LED_X]=0 events to the underlying device driver by directly calling the driver's registered event() handler. The usb-hid driver event() handler processes each request by immediately attempting to submit a CTRL URB to turn off the LED. USB URB submission is asynchronous. First the URB is added to the head of the ctrl queue. Then, if the CTRL_RUNNING flag is false, the URB is submitted immediately (and CTRL_RUNNING is set). If the CTRL_RUNNING flag was already true, then the newly queued URB is submitted in the ctrl completion handler when all previously submitted URBs have completed. When all queued URBs have been submitted, the completion handler clears the CTRL_RUNNING flag. In the 2-LED suspend case, at input suspend(), 2 LED event CTRL URBs get queued, with only the first actually submitted. Soon after input suspend() handler finishes, the usb-hid suspend() handler gets called. Since this is NOT a PM_EVENT_AUTO suspend, the handler sets REPORTED_IDLE, then waits for io to complete. Unfortunately, this usually happens while the first LED request is actually still being processed. Thus when the completion handler tries to submit the second LED request it fails, since REPORTED_IDLE is already set! This REPORTED_IDLE check failure causes the completion handler to complete, however without clearing the CTRL_RUNNING flag. This, in turn, means that the suspend() handler's wait_io() condition is never satisfied, and instead it times out after 10 seconds, aborting the original system suspend. This patch changes the behavior to the following: (1) allow completion handler to finish submitting all queued URBs, even if REPORTED_IDLE is set. This guarantees that all URBs queued before the hid-core suspend() call will be submitted before the system is suspended. (2) if REPORTED_IDLE is set and the URB queue is empty, queue, but don't submit, new URB submission requests. These queued requests get submitted when resume() flushes the URB queue. This is similar to the existing behavior, however, any requests that arrive while the queue is not yet empty will still get submitted before suspend. (3) set the RUNNING flag when flushing the URB queue in resume(). This keeps URBs that were queued in (2) from colliding with any new URBs that are being submitted during the resume process. The new URB submission requests upon resume get properly queued behind the ones being flushed instead of the current situation where they collide, causing memory corruption and oopses. Signed-off-by: Daniel Kurtz <djkurtz@chromium.org> Acked-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-21HID: usbhid: remove LED_ONDaniel Kurtz
LED_ON was defined in the original version of the hid-core autosuspend patch. However, during review, the setting and clearing of it was redone using ledcount. The test was left in accidentally. Signed-off-by: Daniel Kurtz <djkurtz@chromium.org> Acked-by: Oliver Neukum <oneukum@suse.de> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-21HID: emsff: use symbolic name instead of hardcoded PID constantJiri Kosina
Use macro instead of 0x118 PID in device table. Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-21HID: Enable HID_QUIRK_MULTI_INPUT for Trio Linker Plus IIIgnaz Forster
Add quirk for the Trio Linker Plus II - the adapter supports several controllers simultaneously, generating a new HID entry for each connected device. Signed-off-by: Ignaz Forster <ignaz.forster@gmx.de> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-19HID: Kconfig: fix syntaxJiri Kosina
Replace mistakenly used '==' by '='. Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-16HID: introduce proper dependency of HID_BATTERY on POWER_SUPPLYJiri Kosina
ppc6xx_defconfig reveals this: drivers/built-in.o: In function `hidinput_cleanup_battery': drivers/hid/hid-input.c:351: undefined reference to`power_supply_unregister' drivers/built-in.o: In function `hidinput_setup_battery': drivers/hid/hid-input.c:338: undefined reference to `power_supply_register' make[1]: *** [.tmp_vmlinux1] Error 1 The defconfig in question doens't mention either option and kbuild is genertaing CONFIG_HID_BATTERY_STRENGTH=y CONFIG_POWER_SUPPLY=m which is wrong. Put a proper dependency in place. Reported-by: Tony Breeds <tony@bakeyournoodle.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-15HID: multitouch: support PixArt optical touch screenAaron Tian
This patch modifies hid-multitouch driver for supporting PixArt optical touch screen. Because of the device does not have to set initial report, we apply "HID_QUIRK_NO_INIT_REPORTS" quirk and add the device into hid_blacklist[] Signed-off-by: Aaron Tian <aaron_tian@pixart.com.tw> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-15HID: make parser more verbose about parsing errors by defaultJiri Kosina
Most of the parsing errors (typically resulting in device not being claimed by HID subsystem at all) are reported only in debugging mode, which makes root-causing problems with buggy devices unnecessarily more difficult. Convert reporting of important HID report descriptor parsing errors to be reported through hid_err() / hid_warn() instead of dbg_hid(). Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-12HID: wiimote: Select INPUT_FF_MEMLESSDavid Herrmann
We depend on memless force-feedback support, therefore correctly select the related config options. Reported-by: Randy Dunlap <rdunlap@xenotime.net> Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Cc: stable@kernel.org Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-09power_supply: add "powers" links to self-powered HID devicesJeremy Fitzhardinge
Make the relationship between the Wiimote and Wacom self-powered HID devices and their power supply explicit by adding a "powers" link. Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Jiri Kosina <jkosina@suse.cz>
2011-12-09power_supply: add scope properties to some self-powered HID devicesJeremy Fitzhardinge
The Wacom and Wiimote HID drivers register power supplies for themselves to indicate their battery levels. Make those power supplies device scope. Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Cc: Jiri Kosina <jkosina@suse.cz>
2011-12-06HID: roccat: Add support for Isku keyboardStefan Achatz
This patch adds support for Roccat Isku keyboard. Userland tools can be found at http://sourceforge.net/projects/roccat Signed-off-by: Stefan Achatz <erazor_de@users.sourceforge.net> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-12-02Merge branch 'for-linus' of ↵Linus Torvalds
git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid * 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/jikos/hid: HID: Correct General touch PID
2011-12-01HID: hv_mouse: Properly add the hid deviceK. Y. Srinivasan
We need to properly add the hid device to correctly initialize the sysfs state. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Haiyang Zhang <haiyangz@microsoft.com> Reported-by: Fuzhou Chen <fuzhouch@microsoft.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-30HID: hid-multitouch: add support for new Hanvon panelsBenjamin Tissoires
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Acked-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-30HID: multitouch: merge quanta driver into hid-multitouchBenjamin Tissoires
This patch merge the last old-style hid multitouch driver to the generic one. It also adds 2 more quanta pids. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Acked-by: Henrik Rydberg <rydberg@euromail.se> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-30HID: hid-input: fix compile for !HID_BATTERY_STRENGTHJeremy Fitzhardinge
As reported by Stephen Rothwell: drivers/hid/hid-input.c: In function 'hidinput_hid_event': drivers/hid/hid-input.c:865:6: error: 'struct hid_device' has no member named 'battery_val' drivers/hid/hid-input.c:866:3: error: 'struct hid_device' has no member named 'battery_min' drivers/hid/hid-input.c:866:3: error: 'struct hid_device' has no member named 'battery_max' Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Reported-by: Stephen Rothwell <sfr@canb.auug.org.au> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-28HID: hid-input: add support for HID devices reporting Battery StrengthJeremy Fitzhardinge
Some HID devices, such as my Bluetooth mouse, report their battery strength as an event. Rather than passing it through as a strange absolute input event, this patch registers it with the power_supply subsystem as a battery, so that the device's Battery Strength can be reported to usermode. The battery appears in sysfs names /sys/class/power_supply/hid-<UNIQ>-battery, and it is a child of the battery-containing device, so it should be clear what it's the battery of. Unfortunately on my current Fedora 16 system, while the battery does appear in the UI, it is listed as a Laptop Battery with 0% charge (since it ignores the "capacity" property of the battery and instead computes it from the "energy*" fields, which we can't supply given the limited information contained within the HID Report). Still, this patch is the first step. Signed-off-by: Jeremy Fitzhardinge <jeremy@goop.org> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: Correct General touch PIDBenjamin Tissoires
Genera Touch told us that 0001 is their single point device and 0003 is the multitouch one. Apparently, we made the tests someone having a prototype, and not the final product. They said it should be safe to do the switch. This partially reverts 5572da0 ("HID: hid-mulitouch: add support for the 'Sensing Win7-TwoFinger'"). Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Cc: stable@vger.kernel.org Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: correct eGalax a001 protocolBenjamin Tissoires
This device use another protocol while sending the events. It's the same as the one described as "serial" by Microsoft. We are keeping here the sn_move and sn_pressure parameters for egalax devices. CC: Cedric Sodhi <manday@gmx.net> CC: Chris Bagwell <chris@cnpbagwell.com> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: add support for the MSI Windpad 110WBenjamin Tissoires
Just another eGalax device. Please note that adding this device to have_special_driver in hid-core.c is not required anymore. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: Add egalax ID for Acer Iconia W500Marek Vasut
This patch adds USB ID for the touchpanel in Acer Iconia W500. The panel supports up to five fingers, therefore the need for a new addition of panel types. Signed-off-by: Marek Vasut <marek.vasut@gmail.com> Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: cleanup with eGalax PID definitionsBenjamin Tissoires
This is just a renaming of USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH{N} to USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH_{PID} to handle more eGalax devices. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: remove .maxcontacts field for eGalaxBenjamin Tissoires
Some eGalax devices are 4 or 5 fingers touches, wereas others are 2. This patch removes the limit in which all eGalax presents 2 touches. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: cleanup eGalax quirksBenjamin Tissoires
The previous implementation of eGalax protocol was not satisfying as we had to manually set x/y ranges as they were corrupted after reading the report descriptor. Indeed, the report descriptor provided a stylus input interface which override the correct values. This patch omits this input, thus leaving the correct value untouched, and the MT_QUIRK_EGALAX_XYZ_FIXUP not required anymore. Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: multitouch: create sysfs attribute to control quirks from user-spaceBenjamin Tissoires
Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: hid-multitouch - add another eGalax idChris Bagwell
This allows ASUS Eee Slate touchscreens to work. Signed-off-by: Chris Bagwell <chris@cnpbagwell.com> Reviewed-by: Benjamin Tissoires <benjamin.tissoires@gmail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: usbkbd: kill LED URB on disconnectWillem Penninckx
The LED URB was left unkilled when the USB device is disconnected. Signed-off-by: Willem Penninckx <willem.penninckx@cs.kuleuven.be> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-23HID: usbkbd: synchronize LED URB submissionWillem Penninckx
usb_kbd_event() and usb_kbd_led() can be called concurrently, but they are not synchronized. They both readwrite kbd->leds, and usb_kbd_event() originally just checked the URB status field, while urb.h states that "It [status field] should not be examined before the URB is returned to the completion handler." To fix this unsynchronized behavior, this patch introduces a boolean representing whether the URB is submitted, and a spinlock. Signed-off-by: Willem Penninckx <willem.penninckx@cs.kuleuven.be> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: picolcd: make fb_pending_lock and picolcd_fb_cleanup staticJiri Kosina
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: multitouch: make struct mt_classess staticJiri Kosina
Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Enable NO_INIT_REPORTS quirkDavid Herrmann
Newer bluetooth stack supports the NO_INIT_REPORTS quirk. The wiimote does not support report initialization so enable it by default. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Remove module version numberDavid Herrmann
The version number is not needed at all for in-tree drivers. Upstream git is used to track module versions. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Allow direct DRM debug accessDavid Herrmann
Keep track of current drm and add new debugfs file which reads or writes the current DRM. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Allow direct eeprom accessDavid Herrmann
The wiimote provides direct access to parts of its eeprom. This implements read support for small chunks of the eeprom. This isn't very fast but prevents the reader from blocking the wiimote stream for too long. Write support is not yet supported as the wiimote breaks if we overwrite its memory. Use hidraw to reverse-engineer the eeprom before implementing write support here. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add debugfs support stubsDavid Herrmann
Add initializer and deinitializer for debugfs support. This will later allow raw eeprom access and direct DRM modifications to debug wiimote behaviour and further protocol reverse-engineerings. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Parse classic controller dataDavid Herrmann
Nintendo Classic Controller extension reports lots of keys, two analog sticks and two analog buttons. We report all data through extension input device to userspace. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Parse nunchuck dataDavid Herrmann
The Nintendo Nunchuck extension reports accelerometer values, one analog stick and two buttons. See inline comments for data layout. We report all data to userspace through extension input device. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Parse motion+ dataDavid Herrmann
Motion+ reports rotation gyro data which we report to userspace as ABS_RX/Y/Z values. The device reports them either in fast or slow mode. We adjust the values to get a linear scale so userspace does not need to know about slow and fast mode. The motion+ also reports whether an extension is connected to it. We keep track of this value and reinitialize the extensions if an extension is plugged or unplugged. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add extension handler stubsDavid Herrmann
All supported extensions report data as 6 byte block. All DRMs with extension data provide at least 6 extension bytes. Hence a generic handler for all extension bytes is sufficient and can be called on all DRMs. The handler distinguishes the input and passes it to the right handler. Motion+ passes data interleaved so we can have Motion+ and a regular extension enabled simultaneously. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Register input devices for extensionsDavid Herrmann
Motion+ and regular extensions are physical adapters for the wiimote so create one input device for each of them. This also allows to enable only opened extensions and turn unused extenions off to save battery power. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add extension sysfs attributeDavid Herrmann
Add new sysfs attribute "extension" which returns the currently connected and initialized extensions. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add extension initializersDavid Herrmann
The wiimote extension registers are not fully understood, so we always disable all extensions on extension-port events. Then we reinitialize and reidentify them and activate all requested extensions. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add extension initializer stubsDavid Herrmann
Add stub functions to read and identify extensions and then initialize all connected extensions. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add extension support stubDavid Herrmann
The wiimote supports several extensions. This adds a separate source file which handles all extensions and can be disabled at compile-time. The driver reacts on "plug"-events on the extension port and starts a worker which initializes or deinitializes the extensions. Currently, the initialization logic is not fully understood and we can only detect and enable all extensions when all extensions are deactivated. Therefore, we need to disable all extensions, then detect and activate them again to react on "plug"-events. However, deactivating extensions will generate a new "plug"-event and we will never leave that loop. Hence, we only support extensions if they are plugged before the wiimote is connected (or before the ext-input device is opened). In the future we may support full extension hotplug support, but reverse-engineering this may take a while. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Add read-mem helpersDavid Herrmann
Add helper functions similar to the write-mem helpers but for reading wiimote memory and eeprom. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Move common symbols into headerDavid Herrmann
Wiimote extension and sound support need access to several symbols so move them into a new header. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: wiimote: Rename driver to allow multiple source filesDavid Herrmann
Extension and sound support for the wiimote are quite complex and will be implemented in separate source files. Hence rename the current driver to "-core" suffix so multiple files can be linked into this module. Signed-off-by: David Herrmann <dh.herrmann@googlemail.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: hyperv: fixup Kconfig / Makefile entriesJiri Kosina
Rename the Kconfig entry for hyperv mouse driver so that it has HID_ prefix as all the other drivers; while at it, place the entry for this driver to properly ordered place in Makefile and Kconfig. Signed-off-by: Jiri Kosina <jkosina@suse.cz>
2011-11-22HID: Move the hid-hyperv driver out of stagingK. Y. Srinivasan
The file hid-hyperv.c implements a hid compliant mouse driver for use on a Hyper-V based system. This driver is currently in the staging area and as part of the effort to move this driver out of staging, I had posted the driver code for community review a few weeks ago. This current patch addresses all the review comments I have gotten to date. All the relevant patches have already been submitted to the staging tree as well. As per Greg's suggestion, this patch does not get rid of the code from the staging area. Once the mouse driver lands under the hid directory, we will cleanup the staging directory. Signed-off-by: K. Y. Srinivasan <kys@microsoft.com> Signed-off-by: Jiri Kosina <jkosina@suse.cz>