You've already forked linux-apfs
mirror of
https://github.com/linux-apfs/linux-apfs.git
synced 2026-05-01 15:00:59 -07:00
Merge branches 'dragonrise', 'hidraw-feature', 'multitouch', 'ntrig', 'roccat', 'upstream' and 'upstream-fixes' into for-linus
This commit is contained in:
@@ -0,0 +1,10 @@
|
|||||||
|
What: For USB devices : /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/report_descriptor
|
||||||
|
For BT devices : /sys/class/bluetooth/hci<addr>/<hid-bus>:<vendor-id>:<product-id>.<num>/report_descriptor
|
||||||
|
Symlink : /sys/class/hidraw/hidraw<num>/device/report_descriptor
|
||||||
|
Date: Jan 2011
|
||||||
|
KernelVersion: 2.0.39
|
||||||
|
Contact: Alan Ott <alan@signal11.us>
|
||||||
|
Description: When read, this file returns the device's raw binary HID
|
||||||
|
report descriptor.
|
||||||
|
This file cannot be written.
|
||||||
|
Users: HIDAPI library (http://www.signal11.us/oss/hidapi)
|
||||||
@@ -0,0 +1,53 @@
|
|||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/arvo/roccatarvo<minor>/actual_profile
|
||||||
|
Date: Januar 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 1-5.
|
||||||
|
When read, this attribute returns the number of the actual
|
||||||
|
profile which is also the profile that's active on device startup.
|
||||||
|
When written this attribute activates the selected profile
|
||||||
|
immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/arvo/roccatarvo<minor>/button
|
||||||
|
Date: Januar 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The keyboard can store short macros with consist of 1 button with
|
||||||
|
several modifier keys internally.
|
||||||
|
When written, this file lets one set the sequence for a specific
|
||||||
|
button for a specific profile. Button and profile numbers are
|
||||||
|
included in written data. The data has to be 24 bytes long.
|
||||||
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/arvo/roccatarvo<minor>/info
|
||||||
|
Date: Januar 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read, this file returns some info about the device like the
|
||||||
|
installed firmware version.
|
||||||
|
The size of the data is 8 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/arvo/roccatarvo<minor>/key_mask
|
||||||
|
Date: Januar 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The keyboard lets the user deactivate 5 certain keys like the
|
||||||
|
windows and application keys, to protect the user from the outcome
|
||||||
|
of accidentally pressing them.
|
||||||
|
The integer value of this attribute has bits 0-4 set depending
|
||||||
|
on the state of the corresponding key.
|
||||||
|
When read, this file returns the current state of the buttons.
|
||||||
|
When written, the given buttons are activated/deactivated
|
||||||
|
immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/arvo/roccatarvo<minor>/mode_key
|
||||||
|
Date: Januar 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The keyboard has a condensed layout without num-lock key.
|
||||||
|
Instead it uses a mode-key which activates a gaming mode where
|
||||||
|
the assignment of the number block changes.
|
||||||
|
The integer value of this attribute ranges from 0 (OFF) to 1 (ON).
|
||||||
|
When read, this file returns the actual state of the key.
|
||||||
|
When written, the key is activated/deactivated immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
@@ -16,12 +16,14 @@ Description: It is possible to switch the dpi setting of the mouse with the
|
|||||||
6 3200
|
6 3200
|
||||||
|
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/actual_profile
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
Description: When read, this file returns the number of the actual profile.
|
Description: When read, this file returns the number of the actual profile.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/firmware_version
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -32,6 +34,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||||||
number the decimal point has to be shifted 2 positions to the
|
number the decimal point has to be shifted 2 positions to the
|
||||||
left. E.g. a returned value of 138 means 1.38
|
left. E.g. a returned value of 138 means 1.38
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/profile[1-5]
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/profile[1-5]
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -47,6 +50,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
The mouse will reject invalid data, whereas the profile number
|
The mouse will reject invalid data, whereas the profile number
|
||||||
stored in the profile doesn't need to fit the number of the
|
stored in the profile doesn't need to fit the number of the
|
||||||
store.
|
store.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/settings
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -57,6 +61,7 @@ Description: When read, this file returns the settings stored in the mouse.
|
|||||||
When written, this file lets write settings back to the mouse.
|
When written, this file lets write settings back to the mouse.
|
||||||
The data has to be 36 bytes long. The mouse will reject invalid
|
The data has to be 36 bytes long. The mouse will reject invalid
|
||||||
data.
|
data.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/startup_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/startup_profile
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -66,6 +71,7 @@ Description: The integer value of this attribute ranges from 1 to 5.
|
|||||||
that's active when the mouse is powered on.
|
that's active when the mouse is powered on.
|
||||||
When written, this file sets the number of the startup profile
|
When written, this file sets the number of the startup profile
|
||||||
and the mouse activates this profile immediately.
|
and the mouse activates this profile immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/tcu
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/tcu
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -77,6 +83,7 @@ Description: The mouse has a "Tracking Control Unit" which lets the user
|
|||||||
Writing 0 in this file will switch the TCU off.
|
Writing 0 in this file will switch the TCU off.
|
||||||
Writing 1 in this file will start the calibration which takes
|
Writing 1 in this file will start the calibration which takes
|
||||||
around 6 seconds to complete and activates the TCU.
|
around 6 seconds to complete and activates the TCU.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/weight
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kone/roccatkone<minor>/weight
|
||||||
Date: March 2010
|
Date: March 2010
|
||||||
@@ -96,3 +103,4 @@ Description: The mouse can be equipped with one of four supplied weights
|
|||||||
4 20g
|
4 20g
|
||||||
|
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|||||||
@@ -4,6 +4,7 @@ Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
|||||||
Description: When read, this file returns the number of the actual profile in
|
Description: When read, this file returns the number of the actual profile in
|
||||||
range 0-4.
|
range 0-4.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/firmware_version
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -14,6 +15,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||||||
number the decimal point has to be shifted 2 positions to the
|
number the decimal point has to be shifted 2 positions to the
|
||||||
left. E.g. a returned value of 121 means 1.21
|
left. E.g. a returned value of 121 means 1.21
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/macro
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/macro
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -24,6 +26,7 @@ Description: The mouse can store a macro with max 500 key/button strokes
|
|||||||
button for a specific profile. Button and profile numbers are
|
button for a specific profile. Button and profile numbers are
|
||||||
included in written data. The data has to be 2082 bytes long.
|
included in written data. The data has to be 2082 bytes long.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -37,6 +40,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
Which profile to write is determined by the profile number
|
Which profile to write is determined by the profile number
|
||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -47,6 +51,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
When read, these files return the respective profile buttons.
|
When read, these files return the respective profile buttons.
|
||||||
The returned data is 77 bytes in size.
|
The returned data is 77 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile_settings
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -61,6 +66,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
Which profile to write is determined by the profile number
|
Which profile to write is determined by the profile number
|
||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/profile[1-5]_settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -72,6 +78,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
When read, these files return the respective profile settings.
|
When read, these files return the respective profile settings.
|
||||||
The returned data is 43 bytes in size.
|
The returned data is 43 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/sensor
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/sensor
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -80,6 +87,7 @@ Description: The mouse has a tracking- and a distance-control-unit. These
|
|||||||
can be activated/deactivated and the lift-off distance can be
|
can be activated/deactivated and the lift-off distance can be
|
||||||
set. The data has to be 6 bytes long.
|
set. The data has to be 6 bytes long.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/startup_profile
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -89,6 +97,7 @@ Description: The integer value of this attribute ranges from 0-4.
|
|||||||
that's active when the mouse is powered on.
|
that's active when the mouse is powered on.
|
||||||
When written, this file sets the number of the startup profile
|
When written, this file sets the number of the startup profile
|
||||||
and the mouse activates this profile immediately.
|
and the mouse activates this profile immediately.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -97,6 +106,7 @@ Description: When written a calibration process for the tracking control unit
|
|||||||
can be initiated/cancelled.
|
can be initiated/cancelled.
|
||||||
The data has to be 3 bytes long.
|
The data has to be 3 bytes long.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu_image
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/koneplus/roccatkoneplus<minor>/tcu_image
|
||||||
Date: October 2010
|
Date: October 2010
|
||||||
@@ -106,3 +116,4 @@ Description: When read the mouse returns a 30x30 pixel image of the
|
|||||||
calibration process initiated with tcu.
|
calibration process initiated with tcu.
|
||||||
The returned data is 1028 bytes in size.
|
The returned data is 1028 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|||||||
@@ -0,0 +1,100 @@
|
|||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/actual_cpi
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 1-4.
|
||||||
|
When read, this attribute returns the number of the active
|
||||||
|
cpi level.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/actual_profile
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 0-4.
|
||||||
|
When read, this attribute returns the number of the active
|
||||||
|
profile.
|
||||||
|
When written, the mouse activates this profile immediately.
|
||||||
|
The profile that's active when powered down is the same that's
|
||||||
|
active when the mouse is powered on.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/actual_sensitivity_x
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 1-10.
|
||||||
|
When read, this attribute returns the number of the actual
|
||||||
|
sensitivity in x direction.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/actual_sensitivity_y
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The integer value of this attribute ranges from 1-10.
|
||||||
|
When read, this attribute returns the number of the actual
|
||||||
|
sensitivity in y direction.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/firmware_version
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: When read, this file returns the raw integer version number of the
|
||||||
|
firmware reported by the mouse. Using the integer value eases
|
||||||
|
further usage in other programs. To receive the real version
|
||||||
|
number the decimal point has to be shifted 2 positions to the
|
||||||
|
left. E.g. a returned value of 121 means 1.21
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/profile_buttons
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_buttons holds informations about button layout.
|
||||||
|
When written, this file lets one write the respective profile
|
||||||
|
buttons back to the mouse. The data has to be 23 bytes long.
|
||||||
|
The mouse will reject invalid data.
|
||||||
|
Which profile to write is determined by the profile number
|
||||||
|
contained in the data.
|
||||||
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/profile[1-5]_buttons
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_buttons holds informations about button layout.
|
||||||
|
When read, these files return the respective profile buttons.
|
||||||
|
The returned data is 23 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/profile_settings
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_settings holds informations like resolution, sensitivity
|
||||||
|
and light effects.
|
||||||
|
When written, this file lets one write the respective profile
|
||||||
|
settings back to the mouse. The data has to be 16 bytes long.
|
||||||
|
The mouse will reject invalid data.
|
||||||
|
Which profile to write is determined by the profile number
|
||||||
|
contained in the data.
|
||||||
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/kovaplus/roccatkovaplus<minor>/profile[1-5]_settings
|
||||||
|
Date: January 2011
|
||||||
|
Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
||||||
|
Description: The mouse can store 5 profiles which can be switched by the
|
||||||
|
press of a button. A profile is split in settings and buttons.
|
||||||
|
profile_settings holds informations like resolution, sensitivity
|
||||||
|
and light effects.
|
||||||
|
When read, these files return the respective profile settings.
|
||||||
|
The returned data is 16 bytes in size.
|
||||||
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
@@ -13,6 +13,7 @@ Description: It is possible to switch the cpi setting of the mouse with the
|
|||||||
4 1600
|
4 1600
|
||||||
|
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/actual_profile
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -20,6 +21,7 @@ Contact: Stefan Achatz <erazor_de@users.sourceforge.net>
|
|||||||
Description: When read, this file returns the number of the actual profile in
|
Description: When read, this file returns the number of the actual profile in
|
||||||
range 0-4.
|
range 0-4.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/firmware_version
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/firmware_version
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -30,6 +32,7 @@ Description: When read, this file returns the raw integer version number of the
|
|||||||
number the decimal point has to be shifted 2 positions to the
|
number the decimal point has to be shifted 2 positions to the
|
||||||
left. E.g. a returned value of 138 means 1.38
|
left. E.g. a returned value of 138 means 1.38
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -44,6 +47,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
Which profile to write is determined by the profile number
|
Which profile to write is determined by the profile number
|
||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -55,6 +59,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
When read, these files return the respective profile settings.
|
When read, these files return the respective profile settings.
|
||||||
The returned data is 13 bytes in size.
|
The returned data is 13 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -68,6 +73,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
Which profile to write is determined by the profile number
|
Which profile to write is determined by the profile number
|
||||||
contained in the data.
|
contained in the data.
|
||||||
This file is writeonly.
|
This file is writeonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_buttons
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/profile[1-5]_buttons
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -78,6 +84,7 @@ Description: The mouse can store 5 profiles which can be switched by the
|
|||||||
When read, these files return the respective profile buttons.
|
When read, these files return the respective profile buttons.
|
||||||
The returned data is 19 bytes in size.
|
The returned data is 19 bytes in size.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/startup_profile
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/startup_profile
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -86,6 +93,7 @@ Description: The integer value of this attribute ranges from 0-4.
|
|||||||
When read, this attribute returns the number of the profile
|
When read, this attribute returns the number of the profile
|
||||||
that's active when the mouse is powered on.
|
that's active when the mouse is powered on.
|
||||||
This file is readonly.
|
This file is readonly.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|
||||||
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/settings
|
What: /sys/bus/usb/devices/<busnum>-<devnum>:<config num>.<interface num>/<hid-bus>:<vendor-id>:<product-id>.<num>/pyra/roccatpyra<minor>/settings
|
||||||
Date: August 2010
|
Date: August 2010
|
||||||
@@ -96,3 +104,4 @@ Description: When read, this file returns the settings stored in the mouse.
|
|||||||
When written, this file lets write settings back to the mouse.
|
When written, this file lets write settings back to the mouse.
|
||||||
The data has to be 3 bytes long. The mouse will reject invalid
|
The data has to be 3 bytes long. The mouse will reject invalid
|
||||||
data.
|
data.
|
||||||
|
Users: http://roccat.sourceforge.net
|
||||||
|
|||||||
@@ -133,6 +133,7 @@ Code Seq#(hex) Include File Comments
|
|||||||
'H' C0-DF net/bluetooth/hidp/hidp.h conflict!
|
'H' C0-DF net/bluetooth/hidp/hidp.h conflict!
|
||||||
'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict!
|
'H' C0-DF net/bluetooth/cmtp/cmtp.h conflict!
|
||||||
'H' C0-DF net/bluetooth/bnep/bnep.h conflict!
|
'H' C0-DF net/bluetooth/bnep/bnep.h conflict!
|
||||||
|
'H' F1 linux/hid-roccat.h <mailto:erazor_de@users.sourceforge.net>
|
||||||
'I' all linux/isdn.h conflict!
|
'I' all linux/isdn.h conflict!
|
||||||
'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict!
|
'I' 00-0F drivers/isdn/divert/isdn_divert.h conflict!
|
||||||
'I' 40-4F linux/mISDNif.h conflict!
|
'I' 40-4F linux/mISDNif.h conflict!
|
||||||
|
|||||||
+49
-11
@@ -68,9 +68,15 @@ config HID_A4TECH
|
|||||||
---help---
|
---help---
|
||||||
Support for A4 tech X5 and WOP-35 / Trust 450L mice.
|
Support for A4 tech X5 and WOP-35 / Trust 450L mice.
|
||||||
|
|
||||||
config HID_ACRUX_FF
|
config HID_ACRUX
|
||||||
tristate "ACRUX force feedback"
|
tristate "ACRUX game controller support"
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
|
---help---
|
||||||
|
Say Y here if you want to enable support for ACRUX game controllers.
|
||||||
|
|
||||||
|
config HID_ACRUX_FF
|
||||||
|
tristate "ACRUX force feedback support"
|
||||||
|
depends on HID_ACRUX
|
||||||
select INPUT_FF_MEMLESS
|
select INPUT_FF_MEMLESS
|
||||||
---help---
|
---help---
|
||||||
Say Y here if you want to enable force feedback support for ACRUX
|
Say Y here if you want to enable force feedback support for ACRUX
|
||||||
@@ -165,13 +171,6 @@ config HID_EMS_FF
|
|||||||
Currently the following devices are known to be supported:
|
Currently the following devices are known to be supported:
|
||||||
- Trio Linker Plus II
|
- Trio Linker Plus II
|
||||||
|
|
||||||
config HID_EGALAX
|
|
||||||
tristate "eGalax multi-touch panel"
|
|
||||||
depends on USB_HID
|
|
||||||
---help---
|
|
||||||
Support for the eGalax dual-touch panels, including the
|
|
||||||
Joojoo and Wetab tablets.
|
|
||||||
|
|
||||||
config HID_ELECOM
|
config HID_ELECOM
|
||||||
tristate "ELECOM BM084 bluetooth mouse"
|
tristate "ELECOM BM084 bluetooth mouse"
|
||||||
depends on BT_HIDP
|
depends on BT_HIDP
|
||||||
@@ -185,6 +184,14 @@ config HID_EZKEY
|
|||||||
---help---
|
---help---
|
||||||
Support for Ezkey BTC 8193 keyboard.
|
Support for Ezkey BTC 8193 keyboard.
|
||||||
|
|
||||||
|
config HID_KEYTOUCH
|
||||||
|
tristate "Keyoutch HID devices"
|
||||||
|
depends on USB_HID
|
||||||
|
---help---
|
||||||
|
Support for Keytouch HID devices not fully compliant with
|
||||||
|
the specification. Currently supported:
|
||||||
|
- Keytouch IEC 60945
|
||||||
|
|
||||||
config HID_KYE
|
config HID_KYE
|
||||||
tristate "Kye/Genius Ergo Mouse" if EMBEDDED
|
tristate "Kye/Genius Ergo Mouse" if EMBEDDED
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
@@ -223,6 +230,12 @@ config HID_KENSINGTON
|
|||||||
---help---
|
---help---
|
||||||
Support for Kensington Slimblade Trackball.
|
Support for Kensington Slimblade Trackball.
|
||||||
|
|
||||||
|
config HID_LCPOWER
|
||||||
|
tristate "LC-Power"
|
||||||
|
depends on USB_HID
|
||||||
|
---help---
|
||||||
|
Support for LC-Power RC1000MCE RF remote control.
|
||||||
|
|
||||||
config HID_LOGITECH
|
config HID_LOGITECH
|
||||||
tristate "Logitech devices" if EMBEDDED
|
tristate "Logitech devices" if EMBEDDED
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
@@ -309,8 +322,11 @@ config HID_MULTITOUCH
|
|||||||
Say Y here if you have one of the following devices:
|
Say Y here if you have one of the following devices:
|
||||||
- Cypress TrueTouch panels
|
- Cypress TrueTouch panels
|
||||||
- Hanvon dual touch panels
|
- Hanvon dual touch panels
|
||||||
|
- IrTouch Infrared USB panels
|
||||||
- Pixcir dual touch panels
|
- Pixcir dual touch panels
|
||||||
- 'Sensing Win7-TwoFinger' panel by GeneralTouch
|
- 'Sensing Win7-TwoFinger' panel by GeneralTouch
|
||||||
|
- eGalax dual-touch panels, including the
|
||||||
|
Joojoo and Wetab tablets
|
||||||
|
|
||||||
If unsure, say N.
|
If unsure, say N.
|
||||||
|
|
||||||
@@ -324,10 +340,10 @@ config HID_NTRIG
|
|||||||
Support for N-Trig touch screen.
|
Support for N-Trig touch screen.
|
||||||
|
|
||||||
config HID_ORTEK
|
config HID_ORTEK
|
||||||
tristate "Ortek WKB-2000 wireless keyboard and mouse trackpad"
|
tristate "Ortek PKB-1700/WKB-2000 wireless keyboard and mouse trackpad"
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
---help---
|
---help---
|
||||||
Support for Ortek WKB-2000 wireless keyboard + mouse trackpad.
|
Support for Ortek PKB-1700/WKB-2000 wireless keyboard + mouse trackpad.
|
||||||
|
|
||||||
config HID_PANTHERLORD
|
config HID_PANTHERLORD
|
||||||
tristate "Pantherlord/GreenAsia game controller"
|
tristate "Pantherlord/GreenAsia game controller"
|
||||||
@@ -422,10 +438,22 @@ config HID_ROCCAT
|
|||||||
Say Y here if you have a Roccat mouse or keyboard and want OSD or
|
Say Y here if you have a Roccat mouse or keyboard and want OSD or
|
||||||
macro execution support.
|
macro execution support.
|
||||||
|
|
||||||
|
config HID_ROCCAT_COMMON
|
||||||
|
tristate
|
||||||
|
|
||||||
|
config HID_ROCCAT_ARVO
|
||||||
|
tristate "Roccat Arvo keyboard support"
|
||||||
|
depends on USB_HID
|
||||||
|
select HID_ROCCAT
|
||||||
|
select HID_ROCCAT_COMMON
|
||||||
|
---help---
|
||||||
|
Support for Roccat Arvo keyboard.
|
||||||
|
|
||||||
config HID_ROCCAT_KONE
|
config HID_ROCCAT_KONE
|
||||||
tristate "Roccat Kone Mouse support"
|
tristate "Roccat Kone Mouse support"
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
select HID_ROCCAT
|
select HID_ROCCAT
|
||||||
|
select HID_ROCCAT_COMMON
|
||||||
---help---
|
---help---
|
||||||
Support for Roccat Kone mouse.
|
Support for Roccat Kone mouse.
|
||||||
|
|
||||||
@@ -433,13 +461,23 @@ config HID_ROCCAT_KONEPLUS
|
|||||||
tristate "Roccat Kone[+] mouse support"
|
tristate "Roccat Kone[+] mouse support"
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
select HID_ROCCAT
|
select HID_ROCCAT
|
||||||
|
select HID_ROCCAT_COMMON
|
||||||
---help---
|
---help---
|
||||||
Support for Roccat Kone[+] mouse.
|
Support for Roccat Kone[+] mouse.
|
||||||
|
|
||||||
|
config HID_ROCCAT_KOVAPLUS
|
||||||
|
tristate "Roccat Kova[+] mouse support"
|
||||||
|
depends on USB_HID
|
||||||
|
select HID_ROCCAT
|
||||||
|
select HID_ROCCAT_COMMON
|
||||||
|
---help---
|
||||||
|
Support for Roccat Kova[+] mouse.
|
||||||
|
|
||||||
config HID_ROCCAT_PYRA
|
config HID_ROCCAT_PYRA
|
||||||
tristate "Roccat Pyra mouse support"
|
tristate "Roccat Pyra mouse support"
|
||||||
depends on USB_HID
|
depends on USB_HID
|
||||||
select HID_ROCCAT
|
select HID_ROCCAT
|
||||||
|
select HID_ROCCAT_COMMON
|
||||||
---help---
|
---help---
|
||||||
Support for Roccat Pyra mouse.
|
Support for Roccat Pyra mouse.
|
||||||
|
|
||||||
|
|||||||
@@ -27,7 +27,7 @@ endif
|
|||||||
|
|
||||||
obj-$(CONFIG_HID_3M_PCT) += hid-3m-pct.o
|
obj-$(CONFIG_HID_3M_PCT) += hid-3m-pct.o
|
||||||
obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
|
obj-$(CONFIG_HID_A4TECH) += hid-a4tech.o
|
||||||
obj-$(CONFIG_HID_ACRUX_FF) += hid-axff.o
|
obj-$(CONFIG_HID_ACRUX) += hid-axff.o
|
||||||
obj-$(CONFIG_HID_APPLE) += hid-apple.o
|
obj-$(CONFIG_HID_APPLE) += hid-apple.o
|
||||||
obj-$(CONFIG_HID_BELKIN) += hid-belkin.o
|
obj-$(CONFIG_HID_BELKIN) += hid-belkin.o
|
||||||
obj-$(CONFIG_HID_CANDO) += hid-cando.o
|
obj-$(CONFIG_HID_CANDO) += hid-cando.o
|
||||||
@@ -36,12 +36,13 @@ obj-$(CONFIG_HID_CHICONY) += hid-chicony.o
|
|||||||
obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o
|
obj-$(CONFIG_HID_CYPRESS) += hid-cypress.o
|
||||||
obj-$(CONFIG_HID_DRAGONRISE) += hid-dr.o
|
obj-$(CONFIG_HID_DRAGONRISE) += hid-dr.o
|
||||||
obj-$(CONFIG_HID_EMS_FF) += hid-emsff.o
|
obj-$(CONFIG_HID_EMS_FF) += hid-emsff.o
|
||||||
obj-$(CONFIG_HID_EGALAX) += hid-egalax.o
|
|
||||||
obj-$(CONFIG_HID_ELECOM) += hid-elecom.o
|
obj-$(CONFIG_HID_ELECOM) += hid-elecom.o
|
||||||
obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o
|
obj-$(CONFIG_HID_EZKEY) += hid-ezkey.o
|
||||||
obj-$(CONFIG_HID_GYRATION) += hid-gyration.o
|
obj-$(CONFIG_HID_GYRATION) += hid-gyration.o
|
||||||
obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o
|
obj-$(CONFIG_HID_KENSINGTON) += hid-kensington.o
|
||||||
|
obj-$(CONFIG_HID_KEYTOUCH) += hid-keytouch.o
|
||||||
obj-$(CONFIG_HID_KYE) += hid-kye.o
|
obj-$(CONFIG_HID_KYE) += hid-kye.o
|
||||||
|
obj-$(CONFIG_HID_LCPOWER) += hid-lcpower.o
|
||||||
obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o
|
obj-$(CONFIG_HID_LOGITECH) += hid-logitech.o
|
||||||
obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
|
obj-$(CONFIG_HID_MAGICMOUSE) += hid-magicmouse.o
|
||||||
obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o
|
obj-$(CONFIG_HID_MICROSOFT) += hid-microsoft.o
|
||||||
@@ -56,8 +57,11 @@ obj-$(CONFIG_HID_PANTHERLORD) += hid-pl.o
|
|||||||
obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o
|
obj-$(CONFIG_HID_PETALYNX) += hid-petalynx.o
|
||||||
obj-$(CONFIG_HID_PICOLCD) += hid-picolcd.o
|
obj-$(CONFIG_HID_PICOLCD) += hid-picolcd.o
|
||||||
obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o
|
obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o
|
||||||
|
obj-$(CONFIG_HID_ROCCAT_COMMON) += hid-roccat-common.o
|
||||||
|
obj-$(CONFIG_HID_ROCCAT_ARVO) += hid-roccat-arvo.o
|
||||||
obj-$(CONFIG_HID_ROCCAT_KONE) += hid-roccat-kone.o
|
obj-$(CONFIG_HID_ROCCAT_KONE) += hid-roccat-kone.o
|
||||||
obj-$(CONFIG_HID_ROCCAT_KONEPLUS) += hid-roccat-koneplus.o
|
obj-$(CONFIG_HID_ROCCAT_KONEPLUS) += hid-roccat-koneplus.o
|
||||||
|
obj-$(CONFIG_HID_ROCCAT_KOVAPLUS) += hid-roccat-kovaplus.o
|
||||||
obj-$(CONFIG_HID_ROCCAT_PYRA) += hid-roccat-pyra.o
|
obj-$(CONFIG_HID_ROCCAT_PYRA) += hid-roccat-pyra.o
|
||||||
obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o
|
obj-$(CONFIG_HID_SAMSUNG) += hid-samsung.o
|
||||||
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
obj-$(CONFIG_HID_SMARTJOYPLUS) += hid-sjoy.o
|
||||||
|
|||||||
+28
-3
@@ -33,6 +33,8 @@
|
|||||||
#include <linux/hid.h>
|
#include <linux/hid.h>
|
||||||
|
|
||||||
#include "hid-ids.h"
|
#include "hid-ids.h"
|
||||||
|
|
||||||
|
#ifdef CONFIG_HID_ACRUX_FF
|
||||||
#include "usbhid/usbhid.h"
|
#include "usbhid/usbhid.h"
|
||||||
|
|
||||||
struct axff_device {
|
struct axff_device {
|
||||||
@@ -109,6 +111,12 @@ err_free_mem:
|
|||||||
kfree(axff);
|
kfree(axff);
|
||||||
return error;
|
return error;
|
||||||
}
|
}
|
||||||
|
#else
|
||||||
|
static inline int axff_init(struct hid_device *hid)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static int ax_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
static int ax_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
||||||
{
|
{
|
||||||
@@ -139,9 +147,25 @@ static int ax_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
|||||||
error);
|
error);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* We need to start polling device right away, otherwise
|
||||||
|
* it will go into a coma.
|
||||||
|
*/
|
||||||
|
error = hid_hw_open(hdev);
|
||||||
|
if (error) {
|
||||||
|
dev_err(&hdev->dev, "hw open failed\n");
|
||||||
|
return error;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ax_remove(struct hid_device *hdev)
|
||||||
|
{
|
||||||
|
hid_hw_close(hdev);
|
||||||
|
hid_hw_stop(hdev);
|
||||||
|
}
|
||||||
|
|
||||||
static const struct hid_device_id ax_devices[] = {
|
static const struct hid_device_id ax_devices[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802), },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802), },
|
||||||
{ }
|
{ }
|
||||||
@@ -149,9 +173,10 @@ static const struct hid_device_id ax_devices[] = {
|
|||||||
MODULE_DEVICE_TABLE(hid, ax_devices);
|
MODULE_DEVICE_TABLE(hid, ax_devices);
|
||||||
|
|
||||||
static struct hid_driver ax_driver = {
|
static struct hid_driver ax_driver = {
|
||||||
.name = "acrux",
|
.name = "acrux",
|
||||||
.id_table = ax_devices,
|
.id_table = ax_devices,
|
||||||
.probe = ax_probe,
|
.probe = ax_probe,
|
||||||
|
.remove = ax_remove,
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init ax_init(void)
|
static int __init ax_init(void)
|
||||||
|
|||||||
+40
-2
@@ -1159,6 +1159,32 @@ static bool hid_hiddev(struct hid_device *hdev)
|
|||||||
return !!hid_match_id(hdev, hid_hiddev_list);
|
return !!hid_match_id(hdev, hid_hiddev_list);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static ssize_t
|
||||||
|
read_report_descriptor(struct file *filp, struct kobject *kobj,
|
||||||
|
struct bin_attribute *attr,
|
||||||
|
char *buf, loff_t off, size_t count)
|
||||||
|
{
|
||||||
|
struct device *dev = container_of(kobj, struct device, kobj);
|
||||||
|
struct hid_device *hdev = container_of(dev, struct hid_device, dev);
|
||||||
|
|
||||||
|
if (off >= hdev->rsize)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
if (off + count > hdev->rsize)
|
||||||
|
count = hdev->rsize - off;
|
||||||
|
|
||||||
|
memcpy(buf, hdev->rdesc + off, count);
|
||||||
|
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
static struct bin_attribute dev_bin_attr_report_desc = {
|
||||||
|
.attr = { .name = "report_descriptor", .mode = 0444 },
|
||||||
|
.read = read_report_descriptor,
|
||||||
|
.size = HID_MAX_DESCRIPTOR_SIZE,
|
||||||
|
};
|
||||||
|
|
||||||
int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
|
int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
|
||||||
{
|
{
|
||||||
static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
|
static const char *types[] = { "Device", "Pointer", "Mouse", "Device",
|
||||||
@@ -1169,6 +1195,7 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
|
|||||||
char buf[64];
|
char buf[64];
|
||||||
unsigned int i;
|
unsigned int i;
|
||||||
int len;
|
int len;
|
||||||
|
int ret;
|
||||||
|
|
||||||
if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
|
if (hdev->quirks & HID_QUIRK_HIDDEV_FORCE)
|
||||||
connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
|
connect_mask |= (HID_CONNECT_HIDDEV_FORCE | HID_CONNECT_HIDDEV);
|
||||||
@@ -1230,6 +1257,11 @@ int hid_connect(struct hid_device *hdev, unsigned int connect_mask)
|
|||||||
bus = "<UNKNOWN>";
|
bus = "<UNKNOWN>";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ret = device_create_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
|
||||||
|
if (ret)
|
||||||
|
hid_warn(hdev,
|
||||||
|
"can't create sysfs report descriptor attribute err: %d\n", ret);
|
||||||
|
|
||||||
hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
|
hid_info(hdev, "%s: %s HID v%x.%02x %s [%s] on %s\n",
|
||||||
buf, bus, hdev->version >> 8, hdev->version & 0xff,
|
buf, bus, hdev->version >> 8, hdev->version & 0xff,
|
||||||
type, hdev->name, hdev->phys);
|
type, hdev->name, hdev->phys);
|
||||||
@@ -1240,6 +1272,7 @@ EXPORT_SYMBOL_GPL(hid_connect);
|
|||||||
|
|
||||||
void hid_disconnect(struct hid_device *hdev)
|
void hid_disconnect(struct hid_device *hdev)
|
||||||
{
|
{
|
||||||
|
device_remove_bin_file(&hdev->dev, &dev_bin_attr_report_desc);
|
||||||
if (hdev->claimed & HID_CLAIMED_INPUT)
|
if (hdev->claimed & HID_CLAIMED_INPUT)
|
||||||
hidinput_disconnect(hdev);
|
hidinput_disconnect(hdev);
|
||||||
if (hdev->claimed & HID_CLAIMED_HIDDEV)
|
if (hdev->claimed & HID_CLAIMED_HIDDEV)
|
||||||
@@ -1256,9 +1289,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_WCP32PU) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_X5_005D) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_A4TECH, USB_DEVICE_ID_A4TECH_RP_649) },
|
||||||
#if defined(CONFIG_HID_ACRUX_FF) || defined(CONFIG_HID_ACRUX_FF_MODULE)
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ACRUX, 0x0802) },
|
||||||
#endif
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ATV_IRCONTROL) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL4) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MIGHTYMOUSE) },
|
||||||
@@ -1346,9 +1377,12 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_2) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE_3) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_HANVON, USB_DEVICE_ID_HANVON_MULTITOUCH) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS, USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KENSINGTON, USB_DEVICE_ID_KS_SLIMBLADE) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_ERGO_525V) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000 ) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_MX3000_RECEIVER) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_S510_RECEIVER_2) },
|
||||||
@@ -1369,6 +1403,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_FLIGHT_SYSTEM_G940) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOMO_WHEEL2) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_RUMBLEPAD2) },
|
||||||
@@ -1401,12 +1436,15 @@ static const struct hid_device_id hid_have_special_driver[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_16) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_17) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_TOUCH_SCREEN_18) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_PKB1700) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ORTEK, USB_DEVICE_ID_ORTEK_WKB2000) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONE) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KONEPLUS) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_KOVAPLUS) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_PYRA_WIRED) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_IR_REMOTE) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_SAMSUNG, USB_DEVICE_ID_SAMSUNG_WIRELESS_KBD_MOUSE) },
|
||||||
|
|||||||
@@ -1,279 +0,0 @@
|
|||||||
/*
|
|
||||||
* HID driver for eGalax dual-touch panels
|
|
||||||
*
|
|
||||||
* Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
|
|
||||||
* Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
|
|
||||||
* Copyright (c) 2010 Canonical, Ltd.
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
|
||||||
* This program is free software; you can redistribute it and/or modify it
|
|
||||||
* under the terms of the GNU General Public License as published by the Free
|
|
||||||
* Software Foundation; either version 2 of the License, or (at your option)
|
|
||||||
* any later version.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/device.h>
|
|
||||||
#include <linux/hid.h>
|
|
||||||
#include <linux/module.h>
|
|
||||||
#include <linux/usb.h>
|
|
||||||
#include <linux/input/mt.h>
|
|
||||||
#include <linux/slab.h>
|
|
||||||
#include "usbhid/usbhid.h"
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
|
|
||||||
MODULE_DESCRIPTION("eGalax dual-touch panel");
|
|
||||||
MODULE_LICENSE("GPL");
|
|
||||||
|
|
||||||
#include "hid-ids.h"
|
|
||||||
|
|
||||||
#define MAX_SLOTS 2
|
|
||||||
|
|
||||||
/* estimated signal-to-noise ratios */
|
|
||||||
#define SN_MOVE 4096
|
|
||||||
#define SN_PRESSURE 32
|
|
||||||
|
|
||||||
struct egalax_data {
|
|
||||||
int valid;
|
|
||||||
int slot;
|
|
||||||
int touch;
|
|
||||||
int x, y, z;
|
|
||||||
};
|
|
||||||
|
|
||||||
static void set_abs(struct input_dev *input, unsigned int code,
|
|
||||||
struct hid_field *field, int snratio)
|
|
||||||
{
|
|
||||||
int fmin = field->logical_minimum;
|
|
||||||
int fmax = field->logical_maximum;
|
|
||||||
int fuzz = snratio ? (fmax - fmin) / snratio : 0;
|
|
||||||
input_set_abs_params(input, code, fmin, fmax, fuzz, 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int egalax_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|
||||||
struct hid_field *field, struct hid_usage *usage,
|
|
||||||
unsigned long **bit, int *max)
|
|
||||||
{
|
|
||||||
struct input_dev *input = hi->input;
|
|
||||||
|
|
||||||
switch (usage->hid & HID_USAGE_PAGE) {
|
|
||||||
|
|
||||||
case HID_UP_GENDESK:
|
|
||||||
switch (usage->hid) {
|
|
||||||
case HID_GD_X:
|
|
||||||
field->logical_maximum = 32760;
|
|
||||||
hid_map_usage(hi, usage, bit, max,
|
|
||||||
EV_ABS, ABS_MT_POSITION_X);
|
|
||||||
set_abs(input, ABS_MT_POSITION_X, field, SN_MOVE);
|
|
||||||
/* touchscreen emulation */
|
|
||||||
set_abs(input, ABS_X, field, SN_MOVE);
|
|
||||||
return 1;
|
|
||||||
case HID_GD_Y:
|
|
||||||
field->logical_maximum = 32760;
|
|
||||||
hid_map_usage(hi, usage, bit, max,
|
|
||||||
EV_ABS, ABS_MT_POSITION_Y);
|
|
||||||
set_abs(input, ABS_MT_POSITION_Y, field, SN_MOVE);
|
|
||||||
/* touchscreen emulation */
|
|
||||||
set_abs(input, ABS_Y, field, SN_MOVE);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case HID_UP_DIGITIZER:
|
|
||||||
switch (usage->hid) {
|
|
||||||
case HID_DG_TIPSWITCH:
|
|
||||||
/* touchscreen emulation */
|
|
||||||
hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
|
|
||||||
input_set_capability(input, EV_KEY, BTN_TOUCH);
|
|
||||||
return 1;
|
|
||||||
case HID_DG_INRANGE:
|
|
||||||
case HID_DG_CONFIDENCE:
|
|
||||||
case HID_DG_CONTACTCOUNT:
|
|
||||||
case HID_DG_CONTACTMAX:
|
|
||||||
return -1;
|
|
||||||
case HID_DG_CONTACTID:
|
|
||||||
input_mt_init_slots(input, MAX_SLOTS);
|
|
||||||
return 1;
|
|
||||||
case HID_DG_TIPPRESSURE:
|
|
||||||
field->logical_minimum = 0;
|
|
||||||
hid_map_usage(hi, usage, bit, max,
|
|
||||||
EV_ABS, ABS_MT_PRESSURE);
|
|
||||||
set_abs(input, ABS_MT_PRESSURE, field, SN_PRESSURE);
|
|
||||||
/* touchscreen emulation */
|
|
||||||
set_abs(input, ABS_PRESSURE, field, SN_PRESSURE);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* ignore others (from other reports we won't get anyway) */
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int egalax_input_mapped(struct hid_device *hdev, struct hid_input *hi,
|
|
||||||
struct hid_field *field, struct hid_usage *usage,
|
|
||||||
unsigned long **bit, int *max)
|
|
||||||
{
|
|
||||||
/* tell hid-input to skip setup of these event types */
|
|
||||||
if (usage->type == EV_KEY || usage->type == EV_ABS)
|
|
||||||
set_bit(usage->type, hi->input->evbit);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* this function is called when a whole finger has been parsed,
|
|
||||||
* so that it can decide what to send to the input layer.
|
|
||||||
*/
|
|
||||||
static void egalax_filter_event(struct egalax_data *td, struct input_dev *input)
|
|
||||||
{
|
|
||||||
input_mt_slot(input, td->slot);
|
|
||||||
input_mt_report_slot_state(input, MT_TOOL_FINGER, td->touch);
|
|
||||||
if (td->touch) {
|
|
||||||
input_event(input, EV_ABS, ABS_MT_POSITION_X, td->x);
|
|
||||||
input_event(input, EV_ABS, ABS_MT_POSITION_Y, td->y);
|
|
||||||
input_event(input, EV_ABS, ABS_MT_PRESSURE, td->z);
|
|
||||||
}
|
|
||||||
input_mt_report_pointer_emulation(input, true);
|
|
||||||
}
|
|
||||||
|
|
||||||
static int egalax_event(struct hid_device *hid, struct hid_field *field,
|
|
||||||
struct hid_usage *usage, __s32 value)
|
|
||||||
{
|
|
||||||
struct egalax_data *td = hid_get_drvdata(hid);
|
|
||||||
|
|
||||||
/* Note, eGalax has two product lines: the first is resistive and
|
|
||||||
* uses a standard parallel multitouch protocol (product ID ==
|
|
||||||
* 48xx). The second is capacitive and uses an unusual "serial"
|
|
||||||
* protocol with a different message for each multitouch finger
|
|
||||||
* (product ID == 72xx).
|
|
||||||
*/
|
|
||||||
if (hid->claimed & HID_CLAIMED_INPUT) {
|
|
||||||
struct input_dev *input = field->hidinput->input;
|
|
||||||
|
|
||||||
switch (usage->hid) {
|
|
||||||
case HID_DG_INRANGE:
|
|
||||||
td->valid = value;
|
|
||||||
break;
|
|
||||||
case HID_DG_CONFIDENCE:
|
|
||||||
/* avoid interference from generic hidinput handling */
|
|
||||||
break;
|
|
||||||
case HID_DG_TIPSWITCH:
|
|
||||||
td->touch = value;
|
|
||||||
break;
|
|
||||||
case HID_DG_TIPPRESSURE:
|
|
||||||
td->z = value;
|
|
||||||
break;
|
|
||||||
case HID_DG_CONTACTID:
|
|
||||||
td->slot = clamp_val(value, 0, MAX_SLOTS - 1);
|
|
||||||
break;
|
|
||||||
case HID_GD_X:
|
|
||||||
td->x = value;
|
|
||||||
break;
|
|
||||||
case HID_GD_Y:
|
|
||||||
td->y = value;
|
|
||||||
/* this is the last field in a finger */
|
|
||||||
if (td->valid)
|
|
||||||
egalax_filter_event(td, input);
|
|
||||||
break;
|
|
||||||
case HID_DG_CONTACTCOUNT:
|
|
||||||
/* touch emulation: this is the last field in a frame */
|
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
/* fallback to the generic hidinput handling */
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* we have handled the hidinput part, now remains hiddev */
|
|
||||||
if (hid->claimed & HID_CLAIMED_HIDDEV && hid->hiddev_hid_event)
|
|
||||||
hid->hiddev_hid_event(hid, field, usage, value);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
static int egalax_probe(struct hid_device *hdev, const struct hid_device_id *id)
|
|
||||||
{
|
|
||||||
int ret;
|
|
||||||
struct egalax_data *td;
|
|
||||||
struct hid_report *report;
|
|
||||||
|
|
||||||
td = kzalloc(sizeof(struct egalax_data), GFP_KERNEL);
|
|
||||||
if (!td) {
|
|
||||||
hid_err(hdev, "cannot allocate eGalax data\n");
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
hid_set_drvdata(hdev, td);
|
|
||||||
|
|
||||||
ret = hid_parse(hdev);
|
|
||||||
if (ret)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT);
|
|
||||||
if (ret)
|
|
||||||
goto end;
|
|
||||||
|
|
||||||
report = hdev->report_enum[HID_FEATURE_REPORT].report_id_hash[5];
|
|
||||||
if (report) {
|
|
||||||
report->field[0]->value[0] = 2;
|
|
||||||
usbhid_submit_report(hdev, report, USB_DIR_OUT);
|
|
||||||
}
|
|
||||||
|
|
||||||
end:
|
|
||||||
if (ret)
|
|
||||||
kfree(td);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void egalax_remove(struct hid_device *hdev)
|
|
||||||
{
|
|
||||||
hid_hw_stop(hdev);
|
|
||||||
kfree(hid_get_drvdata(hdev));
|
|
||||||
hid_set_drvdata(hdev, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
static const struct hid_device_id egalax_devices[] = {
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
|
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
|
|
||||||
{ }
|
|
||||||
};
|
|
||||||
MODULE_DEVICE_TABLE(hid, egalax_devices);
|
|
||||||
|
|
||||||
static const struct hid_usage_id egalax_grabbed_usages[] = {
|
|
||||||
{ HID_ANY_ID, HID_ANY_ID, HID_ANY_ID },
|
|
||||||
{ HID_ANY_ID - 1, HID_ANY_ID - 1, HID_ANY_ID - 1}
|
|
||||||
};
|
|
||||||
|
|
||||||
static struct hid_driver egalax_driver = {
|
|
||||||
.name = "egalax-touch",
|
|
||||||
.id_table = egalax_devices,
|
|
||||||
.probe = egalax_probe,
|
|
||||||
.remove = egalax_remove,
|
|
||||||
.input_mapping = egalax_input_mapping,
|
|
||||||
.input_mapped = egalax_input_mapped,
|
|
||||||
.usage_table = egalax_grabbed_usages,
|
|
||||||
.event = egalax_event,
|
|
||||||
};
|
|
||||||
|
|
||||||
static int __init egalax_init(void)
|
|
||||||
{
|
|
||||||
return hid_register_driver(&egalax_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void __exit egalax_exit(void)
|
|
||||||
{
|
|
||||||
hid_unregister_driver(&egalax_driver);
|
|
||||||
}
|
|
||||||
|
|
||||||
module_init(egalax_init);
|
|
||||||
module_exit(egalax_exit);
|
|
||||||
|
|
||||||
@@ -43,6 +43,11 @@ static int gyration_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|||||||
case 0x048: gy_map_key_clear(KEY_MEDIA); break;
|
case 0x048: gy_map_key_clear(KEY_MEDIA); break;
|
||||||
case 0x049: gy_map_key_clear(KEY_CAMERA); break;
|
case 0x049: gy_map_key_clear(KEY_CAMERA); break;
|
||||||
case 0x04a: gy_map_key_clear(KEY_VIDEO); break;
|
case 0x04a: gy_map_key_clear(KEY_VIDEO); break;
|
||||||
|
case 0x05a: gy_map_key_clear(KEY_TEXT); break;
|
||||||
|
case 0x05b: gy_map_key_clear(KEY_RED); break;
|
||||||
|
case 0x05c: gy_map_key_clear(KEY_GREEN); break;
|
||||||
|
case 0x05d: gy_map_key_clear(KEY_YELLOW); break;
|
||||||
|
case 0x05e: gy_map_key_clear(KEY_BLUE); break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return 0;
|
return 0;
|
||||||
|
|||||||
@@ -333,6 +333,9 @@
|
|||||||
#define USB_VENDOR_ID_IMATION 0x0718
|
#define USB_VENDOR_ID_IMATION 0x0718
|
||||||
#define USB_DEVICE_ID_DISC_STAKKA 0xd000
|
#define USB_DEVICE_ID_DISC_STAKKA 0xd000
|
||||||
|
|
||||||
|
#define USB_VENDOR_ID_IRTOUCHSYSTEMS 0x6615
|
||||||
|
#define USB_DEVICE_ID_IRTOUCH_INFRARED_USB 0x0070
|
||||||
|
|
||||||
#define USB_VENDOR_ID_JESS 0x0c45
|
#define USB_VENDOR_ID_JESS 0x0c45
|
||||||
#define USB_DEVICE_ID_JESS_YUREX 0x1010
|
#define USB_DEVICE_ID_JESS_YUREX 0x1010
|
||||||
|
|
||||||
@@ -345,6 +348,9 @@
|
|||||||
#define USB_VENDOR_ID_KWORLD 0x1b80
|
#define USB_VENDOR_ID_KWORLD 0x1b80
|
||||||
#define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700
|
#define USB_DEVICE_ID_KWORLD_RADIO_FM700 0xd700
|
||||||
|
|
||||||
|
#define USB_VENDOR_ID_KEYTOUCH 0x0926
|
||||||
|
#define USB_DEVICE_ID_KEYTOUCH_IEC 0x3333
|
||||||
|
|
||||||
#define USB_VENDOR_ID_KYE 0x0458
|
#define USB_VENDOR_ID_KYE 0x0458
|
||||||
#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
|
#define USB_DEVICE_ID_KYE_ERGO_525V 0x0087
|
||||||
#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
|
#define USB_DEVICE_ID_KYE_GPEN_560 0x5003
|
||||||
@@ -352,6 +358,9 @@
|
|||||||
#define USB_VENDOR_ID_LABTEC 0x1020
|
#define USB_VENDOR_ID_LABTEC 0x1020
|
||||||
#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
|
#define USB_DEVICE_ID_LABTEC_WIRELESS_KEYBOARD 0x0006
|
||||||
|
|
||||||
|
#define USB_VENDOR_ID_LCPOWER 0x1241
|
||||||
|
#define USB_DEVICE_ID_LCPOWER_LC1000 0xf767
|
||||||
|
|
||||||
#define USB_VENDOR_ID_LD 0x0f11
|
#define USB_VENDOR_ID_LD 0x0f11
|
||||||
#define USB_DEVICE_ID_LD_CASSY 0x1000
|
#define USB_DEVICE_ID_LD_CASSY 0x1000
|
||||||
#define USB_DEVICE_ID_LD_POCKETCASSY 0x1010
|
#define USB_DEVICE_ID_LD_POCKETCASSY 0x1010
|
||||||
@@ -383,6 +392,7 @@
|
|||||||
#define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294
|
#define USB_DEVICE_ID_LOGITECH_WHEEL 0xc294
|
||||||
#define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG 0xc293
|
#define USB_DEVICE_ID_LOGITECH_WINGMAN_FFG 0xc293
|
||||||
#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295
|
#define USB_DEVICE_ID_LOGITECH_MOMO_WHEEL 0xc295
|
||||||
|
#define USB_DEVICE_ID_LOGITECH_DFP_WHEEL 0xc298
|
||||||
#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299
|
#define USB_DEVICE_ID_LOGITECH_G25_WHEEL 0xc299
|
||||||
#define USB_DEVICE_ID_LOGITECH_WII_WHEEL 0xc29c
|
#define USB_DEVICE_ID_LOGITECH_WII_WHEEL 0xc29c
|
||||||
#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a
|
#define USB_DEVICE_ID_LOGITECH_ELITE_KBD 0xc30a
|
||||||
@@ -466,6 +476,7 @@
|
|||||||
#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064
|
#define USB_DEVICE_ID_ONTRAK_ADU100 0x0064
|
||||||
|
|
||||||
#define USB_VENDOR_ID_ORTEK 0x05a4
|
#define USB_VENDOR_ID_ORTEK 0x05a4
|
||||||
|
#define USB_DEVICE_ID_ORTEK_PKB1700 0x1700
|
||||||
#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000
|
#define USB_DEVICE_ID_ORTEK_WKB2000 0x2000
|
||||||
|
|
||||||
#define USB_VENDOR_ID_PANJIT 0x134c
|
#define USB_VENDOR_ID_PANJIT 0x134c
|
||||||
@@ -496,8 +507,10 @@
|
|||||||
#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
|
#define USB_DEVICE_ID_PIXART_IMAGING_INC_OPTICAL_TOUCH_SCREEN 0x3001
|
||||||
|
|
||||||
#define USB_VENDOR_ID_ROCCAT 0x1e7d
|
#define USB_VENDOR_ID_ROCCAT 0x1e7d
|
||||||
|
#define USB_DEVICE_ID_ROCCAT_ARVO 0x30d4
|
||||||
#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced
|
#define USB_DEVICE_ID_ROCCAT_KONE 0x2ced
|
||||||
#define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
|
#define USB_DEVICE_ID_ROCCAT_KONEPLUS 0x2d51
|
||||||
|
#define USB_DEVICE_ID_ROCCAT_KOVAPLUS 0x2d50
|
||||||
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRED 0x2c24
|
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRED 0x2c24
|
||||||
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS 0x2cf6
|
#define USB_DEVICE_ID_ROCCAT_PYRA_WIRELESS 0x2cf6
|
||||||
|
|
||||||
|
|||||||
+22
-9
@@ -290,14 +290,6 @@ static void hidinput_configure_usage(struct hid_input *hidinput, struct hid_fiel
|
|||||||
goto ignore;
|
goto ignore;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (field->report_type == HID_FEATURE_REPORT) {
|
|
||||||
if (device->driver->feature_mapping) {
|
|
||||||
device->driver->feature_mapping(device, hidinput, field,
|
|
||||||
usage);
|
|
||||||
}
|
|
||||||
goto ignore;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (device->driver->input_mapping) {
|
if (device->driver->input_mapping) {
|
||||||
int ret = device->driver->input_mapping(device, hidinput, field,
|
int ret = device->driver->input_mapping(device, hidinput, field,
|
||||||
usage, &bit, &max);
|
usage, &bit, &max);
|
||||||
@@ -835,6 +827,24 @@ static void hidinput_close(struct input_dev *dev)
|
|||||||
hid_hw_close(hid);
|
hid_hw_close(hid);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void report_features(struct hid_device *hid)
|
||||||
|
{
|
||||||
|
struct hid_driver *drv = hid->driver;
|
||||||
|
struct hid_report_enum *rep_enum;
|
||||||
|
struct hid_report *rep;
|
||||||
|
int i, j;
|
||||||
|
|
||||||
|
if (!drv->feature_mapping)
|
||||||
|
return;
|
||||||
|
|
||||||
|
rep_enum = &hid->report_enum[HID_FEATURE_REPORT];
|
||||||
|
list_for_each_entry(rep, &rep_enum->report_list, list)
|
||||||
|
for (i = 0; i < rep->maxfield; i++)
|
||||||
|
for (j = 0; j < rep->field[i]->maxusage; j++)
|
||||||
|
drv->feature_mapping(hid, rep->field[i],
|
||||||
|
rep->field[i]->usage + j);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Register the input device; print a message.
|
* Register the input device; print a message.
|
||||||
* Configure the input layer interface
|
* Configure the input layer interface
|
||||||
@@ -863,7 +873,9 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
|
|||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (k = HID_INPUT_REPORT; k <= HID_FEATURE_REPORT; k++) {
|
report_features(hid);
|
||||||
|
|
||||||
|
for (k = HID_INPUT_REPORT; k <= HID_OUTPUT_REPORT; k++) {
|
||||||
if (k == HID_OUTPUT_REPORT &&
|
if (k == HID_OUTPUT_REPORT &&
|
||||||
hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS)
|
hid->quirks & HID_QUIRK_SKIP_OUTPUT_REPORTS)
|
||||||
continue;
|
continue;
|
||||||
@@ -928,6 +940,7 @@ int hidinput_connect(struct hid_device *hid, unsigned int force)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
out_cleanup:
|
out_cleanup:
|
||||||
|
list_del(&hidinput->list);
|
||||||
input_free_device(hidinput->input);
|
input_free_device(hidinput->input);
|
||||||
kfree(hidinput);
|
kfree(hidinput);
|
||||||
out_unwind:
|
out_unwind:
|
||||||
|
|||||||
@@ -0,0 +1,66 @@
|
|||||||
|
/*
|
||||||
|
* HID driver for Keytouch devices not fully compliant with HID standard
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Jiri Kosina
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/device.h>
|
||||||
|
#include <linux/hid.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
#include "hid-ids.h"
|
||||||
|
|
||||||
|
/* Replace the broken report descriptor of this device with rather
|
||||||
|
* a default one */
|
||||||
|
static __u8 keytouch_fixed_rdesc[] = {
|
||||||
|
0x05, 0x01, 0x09, 0x06, 0xa1, 0x01, 0x05, 0x07, 0x19, 0xe0, 0x29, 0xe7, 0x15,
|
||||||
|
0x00, 0x25, 0x01, 0x75, 0x01, 0x95, 0x08, 0x81, 0x02, 0x95, 0x01, 0x75, 0x08,
|
||||||
|
0x81, 0x01, 0x95, 0x03, 0x75, 0x01, 0x05, 0x08, 0x19, 0x01, 0x29, 0x03, 0x91,
|
||||||
|
0x02, 0x95, 0x05, 0x75, 0x01, 0x91, 0x01, 0x95, 0x06, 0x75, 0x08, 0x15, 0x00,
|
||||||
|
0x26, 0xff, 0x00, 0x05, 0x07, 0x19, 0x00, 0x2a, 0xff, 0x00, 0x81, 0x00, 0xc0
|
||||||
|
};
|
||||||
|
|
||||||
|
static __u8 *keytouch_report_fixup(struct hid_device *hdev, __u8 *rdesc,
|
||||||
|
unsigned int *rsize)
|
||||||
|
{
|
||||||
|
hid_info(hdev, "fixing up Keytouch IEC report descriptor\n");
|
||||||
|
|
||||||
|
rdesc = keytouch_fixed_rdesc;
|
||||||
|
*rsize = sizeof(keytouch_fixed_rdesc);
|
||||||
|
|
||||||
|
return rdesc;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct hid_device_id keytouch_devices[] = {
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_KEYTOUCH, USB_DEVICE_ID_KEYTOUCH_IEC) },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(hid, keytouch_devices);
|
||||||
|
|
||||||
|
static struct hid_driver keytouch_driver = {
|
||||||
|
.name = "keytouch",
|
||||||
|
.id_table = keytouch_devices,
|
||||||
|
.report_fixup = keytouch_report_fixup,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init keytouch_init(void)
|
||||||
|
{
|
||||||
|
return hid_register_driver(&keytouch_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit keytouch_exit(void)
|
||||||
|
{
|
||||||
|
hid_unregister_driver(&keytouch_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(keytouch_init);
|
||||||
|
module_exit(keytouch_exit);
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
|
MODULE_AUTHOR("Jiri Kosina");
|
||||||
@@ -0,0 +1,70 @@
|
|||||||
|
/*
|
||||||
|
* HID driver for LC Power Model RC1000MCE
|
||||||
|
*
|
||||||
|
* Copyright (c) 2011 Chris Schlund
|
||||||
|
* based on hid-topseed module
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* This program is free software; you can redistribute it and/or modify it
|
||||||
|
* under the terms of the GNU General Public License as published by the Free
|
||||||
|
* Software Foundation; either version 2 of the License, or (at your option)
|
||||||
|
* any later version.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/device.h>
|
||||||
|
#include <linux/hid.h>
|
||||||
|
#include <linux/module.h>
|
||||||
|
|
||||||
|
#include "hid-ids.h"
|
||||||
|
|
||||||
|
#define ts_map_key_clear(c) hid_map_usage_clear(hi, usage, bit, max, \
|
||||||
|
EV_KEY, (c))
|
||||||
|
static int ts_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
||||||
|
struct hid_field *field, struct hid_usage *usage,
|
||||||
|
unsigned long **bit, int *max)
|
||||||
|
{
|
||||||
|
if ((usage->hid & HID_USAGE_PAGE) != 0x0ffbc0000)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
switch (usage->hid & HID_USAGE) {
|
||||||
|
case 0x046: ts_map_key_clear(KEY_YELLOW); break;
|
||||||
|
case 0x047: ts_map_key_clear(KEY_GREEN); break;
|
||||||
|
case 0x049: ts_map_key_clear(KEY_BLUE); break;
|
||||||
|
case 0x04a: ts_map_key_clear(KEY_RED); break;
|
||||||
|
case 0x00d: ts_map_key_clear(KEY_HOME); break;
|
||||||
|
case 0x025: ts_map_key_clear(KEY_TV); break;
|
||||||
|
case 0x048: ts_map_key_clear(KEY_VCR); break;
|
||||||
|
case 0x024: ts_map_key_clear(KEY_MENU); break;
|
||||||
|
default:
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static const struct hid_device_id ts_devices[] = {
|
||||||
|
{ HID_USB_DEVICE( USB_VENDOR_ID_LCPOWER, USB_DEVICE_ID_LCPOWER_LC1000) },
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
MODULE_DEVICE_TABLE(hid, ts_devices);
|
||||||
|
|
||||||
|
static struct hid_driver ts_driver = {
|
||||||
|
.name = "LC RC1000MCE",
|
||||||
|
.id_table = ts_devices,
|
||||||
|
.input_mapping = ts_input_mapping,
|
||||||
|
};
|
||||||
|
|
||||||
|
static int __init ts_init(void)
|
||||||
|
{
|
||||||
|
return hid_register_driver(&ts_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __exit ts_exit(void)
|
||||||
|
{
|
||||||
|
hid_unregister_driver(&ts_driver);
|
||||||
|
}
|
||||||
|
|
||||||
|
module_init(ts_init);
|
||||||
|
module_exit(ts_exit);
|
||||||
|
MODULE_LICENSE("GPL");
|
||||||
@@ -377,6 +377,8 @@ static const struct hid_device_id lg_devices[] = {
|
|||||||
.driver_data = LG_FF },
|
.driver_data = LG_FF },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_G25_WHEEL),
|
||||||
.driver_data = LG_FF },
|
.driver_data = LG_FF },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DFP_WHEEL),
|
||||||
|
.driver_data = LG_FF },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WII_WHEEL),
|
||||||
.driver_data = LG_FF4 },
|
.driver_data = LG_FF4 },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ),
|
{ HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_WINGMAN_FFG ),
|
||||||
|
|||||||
@@ -258,7 +258,7 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tda
|
|||||||
input_report_abs(input, ABS_MT_TRACKING_ID, id);
|
input_report_abs(input, ABS_MT_TRACKING_ID, id);
|
||||||
input_report_abs(input, ABS_MT_TOUCH_MAJOR, touch_major << 2);
|
input_report_abs(input, ABS_MT_TOUCH_MAJOR, touch_major << 2);
|
||||||
input_report_abs(input, ABS_MT_TOUCH_MINOR, touch_minor << 2);
|
input_report_abs(input, ABS_MT_TOUCH_MINOR, touch_minor << 2);
|
||||||
input_report_abs(input, ABS_MT_ORIENTATION, orientation);
|
input_report_abs(input, ABS_MT_ORIENTATION, -orientation);
|
||||||
input_report_abs(input, ABS_MT_POSITION_X, x);
|
input_report_abs(input, ABS_MT_POSITION_X, x);
|
||||||
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
input_report_abs(input, ABS_MT_POSITION_Y, y);
|
||||||
|
|
||||||
@@ -397,7 +397,7 @@ static void magicmouse_setup_input(struct input_dev *input, struct hid_device *h
|
|||||||
input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, 15, 0, 0);
|
input_set_abs_params(input, ABS_MT_TRACKING_ID, 0, 15, 0, 0);
|
||||||
input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 255, 4, 0);
|
input_set_abs_params(input, ABS_MT_TOUCH_MAJOR, 0, 255, 4, 0);
|
||||||
input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 255, 4, 0);
|
input_set_abs_params(input, ABS_MT_TOUCH_MINOR, 0, 255, 4, 0);
|
||||||
input_set_abs_params(input, ABS_MT_ORIENTATION, -32, 31, 1, 0);
|
input_set_abs_params(input, ABS_MT_ORIENTATION, -31, 32, 1, 0);
|
||||||
|
|
||||||
/* Note: Touch Y position from the device is inverted relative
|
/* Note: Touch Y position from the device is inverted relative
|
||||||
* to how pointer motion is reported (and relative to how USB
|
* to how pointer motion is reported (and relative to how USB
|
||||||
|
|||||||
@@ -5,6 +5,12 @@
|
|||||||
* Copyright (c) 2010-2011 Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
* Copyright (c) 2010-2011 Benjamin Tissoires <benjamin.tissoires@gmail.com>
|
||||||
* Copyright (c) 2010-2011 Ecole Nationale de l'Aviation Civile, France
|
* Copyright (c) 2010-2011 Ecole Nationale de l'Aviation Civile, France
|
||||||
*
|
*
|
||||||
|
* This code is partly based on hid-egalax.c:
|
||||||
|
*
|
||||||
|
* Copyright (c) 2010 Stephane Chatty <chatty@enac.fr>
|
||||||
|
* Copyright (c) 2010 Henrik Rydberg <rydberg@euromail.se>
|
||||||
|
* Copyright (c) 2010 Canonical, Ltd.
|
||||||
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@@ -24,6 +30,7 @@
|
|||||||
|
|
||||||
|
|
||||||
MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
|
MODULE_AUTHOR("Stephane Chatty <chatty@enac.fr>");
|
||||||
|
MODULE_AUTHOR("Benjamin Tissoires <benjamin.tissoires@gmail.com>");
|
||||||
MODULE_DESCRIPTION("HID multitouch panels");
|
MODULE_DESCRIPTION("HID multitouch panels");
|
||||||
MODULE_LICENSE("GPL");
|
MODULE_LICENSE("GPL");
|
||||||
|
|
||||||
@@ -36,6 +43,7 @@ MODULE_LICENSE("GPL");
|
|||||||
#define MT_QUIRK_SLOT_IS_CONTACTNUMBER (1 << 3)
|
#define MT_QUIRK_SLOT_IS_CONTACTNUMBER (1 << 3)
|
||||||
#define MT_QUIRK_VALID_IS_INRANGE (1 << 4)
|
#define MT_QUIRK_VALID_IS_INRANGE (1 << 4)
|
||||||
#define MT_QUIRK_VALID_IS_CONFIDENCE (1 << 5)
|
#define MT_QUIRK_VALID_IS_CONFIDENCE (1 << 5)
|
||||||
|
#define MT_QUIRK_EGALAX_XYZ_FIXUP (1 << 6)
|
||||||
|
|
||||||
struct mt_slot {
|
struct mt_slot {
|
||||||
__s32 x, y, p, w, h;
|
__s32 x, y, p, w, h;
|
||||||
@@ -65,10 +73,11 @@ struct mt_class {
|
|||||||
};
|
};
|
||||||
|
|
||||||
/* classes of device behavior */
|
/* classes of device behavior */
|
||||||
#define MT_CLS_DEFAULT 1
|
#define MT_CLS_DEFAULT 1
|
||||||
#define MT_CLS_DUAL1 2
|
#define MT_CLS_DUAL_INRANGE_CONTACTID 2
|
||||||
#define MT_CLS_DUAL2 3
|
#define MT_CLS_DUAL_INRANGE_CONTACTNUMBER 3
|
||||||
#define MT_CLS_CYPRESS 4
|
#define MT_CLS_CYPRESS 4
|
||||||
|
#define MT_CLS_EGALAX 5
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* these device-dependent functions determine what slot corresponds
|
* these device-dependent functions determine what slot corresponds
|
||||||
@@ -104,13 +113,13 @@ static int find_slot_from_contactid(struct mt_device *td)
|
|||||||
|
|
||||||
struct mt_class mt_classes[] = {
|
struct mt_class mt_classes[] = {
|
||||||
{ .name = MT_CLS_DEFAULT,
|
{ .name = MT_CLS_DEFAULT,
|
||||||
.quirks = MT_QUIRK_VALID_IS_INRANGE,
|
.quirks = MT_QUIRK_NOT_SEEN_MEANS_UP,
|
||||||
.maxcontacts = 10 },
|
.maxcontacts = 10 },
|
||||||
{ .name = MT_CLS_DUAL1,
|
{ .name = MT_CLS_DUAL_INRANGE_CONTACTID,
|
||||||
.quirks = MT_QUIRK_VALID_IS_INRANGE |
|
.quirks = MT_QUIRK_VALID_IS_INRANGE |
|
||||||
MT_QUIRK_SLOT_IS_CONTACTID,
|
MT_QUIRK_SLOT_IS_CONTACTID,
|
||||||
.maxcontacts = 2 },
|
.maxcontacts = 2 },
|
||||||
{ .name = MT_CLS_DUAL2,
|
{ .name = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
|
||||||
.quirks = MT_QUIRK_VALID_IS_INRANGE |
|
.quirks = MT_QUIRK_VALID_IS_INRANGE |
|
||||||
MT_QUIRK_SLOT_IS_CONTACTNUMBER,
|
MT_QUIRK_SLOT_IS_CONTACTNUMBER,
|
||||||
.maxcontacts = 2 },
|
.maxcontacts = 2 },
|
||||||
@@ -119,10 +128,18 @@ struct mt_class mt_classes[] = {
|
|||||||
MT_QUIRK_CYPRESS,
|
MT_QUIRK_CYPRESS,
|
||||||
.maxcontacts = 10 },
|
.maxcontacts = 10 },
|
||||||
|
|
||||||
|
{ .name = MT_CLS_EGALAX,
|
||||||
|
.quirks = MT_QUIRK_SLOT_IS_CONTACTID |
|
||||||
|
MT_QUIRK_VALID_IS_INRANGE |
|
||||||
|
MT_QUIRK_EGALAX_XYZ_FIXUP,
|
||||||
|
.maxcontacts = 2,
|
||||||
|
.sn_move = 4096,
|
||||||
|
.sn_pressure = 32,
|
||||||
|
},
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
static void mt_feature_mapping(struct hid_device *hdev, struct hid_input *hi,
|
static void mt_feature_mapping(struct hid_device *hdev,
|
||||||
struct hid_field *field, struct hid_usage *usage)
|
struct hid_field *field, struct hid_usage *usage)
|
||||||
{
|
{
|
||||||
if (usage->hid == HID_DG_INPUTMODE) {
|
if (usage->hid == HID_DG_INPUTMODE) {
|
||||||
@@ -146,11 +163,15 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|||||||
{
|
{
|
||||||
struct mt_device *td = hid_get_drvdata(hdev);
|
struct mt_device *td = hid_get_drvdata(hdev);
|
||||||
struct mt_class *cls = td->mtclass;
|
struct mt_class *cls = td->mtclass;
|
||||||
|
__s32 quirks = cls->quirks;
|
||||||
|
|
||||||
switch (usage->hid & HID_USAGE_PAGE) {
|
switch (usage->hid & HID_USAGE_PAGE) {
|
||||||
|
|
||||||
case HID_UP_GENDESK:
|
case HID_UP_GENDESK:
|
||||||
switch (usage->hid) {
|
switch (usage->hid) {
|
||||||
case HID_GD_X:
|
case HID_GD_X:
|
||||||
|
if (quirks & MT_QUIRK_EGALAX_XYZ_FIXUP)
|
||||||
|
field->logical_maximum = 32760;
|
||||||
hid_map_usage(hi, usage, bit, max,
|
hid_map_usage(hi, usage, bit, max,
|
||||||
EV_ABS, ABS_MT_POSITION_X);
|
EV_ABS, ABS_MT_POSITION_X);
|
||||||
set_abs(hi->input, ABS_MT_POSITION_X, field,
|
set_abs(hi->input, ABS_MT_POSITION_X, field,
|
||||||
@@ -160,6 +181,8 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|||||||
td->last_slot_field = usage->hid;
|
td->last_slot_field = usage->hid;
|
||||||
return 1;
|
return 1;
|
||||||
case HID_GD_Y:
|
case HID_GD_Y:
|
||||||
|
if (quirks & MT_QUIRK_EGALAX_XYZ_FIXUP)
|
||||||
|
field->logical_maximum = 32760;
|
||||||
hid_map_usage(hi, usage, bit, max,
|
hid_map_usage(hi, usage, bit, max,
|
||||||
EV_ABS, ABS_MT_POSITION_Y);
|
EV_ABS, ABS_MT_POSITION_Y);
|
||||||
set_abs(hi->input, ABS_MT_POSITION_Y, field,
|
set_abs(hi->input, ABS_MT_POSITION_Y, field,
|
||||||
@@ -203,6 +226,8 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
|
|||||||
td->last_slot_field = usage->hid;
|
td->last_slot_field = usage->hid;
|
||||||
return 1;
|
return 1;
|
||||||
case HID_DG_TIPPRESSURE:
|
case HID_DG_TIPPRESSURE:
|
||||||
|
if (quirks & MT_QUIRK_EGALAX_XYZ_FIXUP)
|
||||||
|
field->logical_minimum = 0;
|
||||||
hid_map_usage(hi, usage, bit, max,
|
hid_map_usage(hi, usage, bit, max,
|
||||||
EV_ABS, ABS_MT_PRESSURE);
|
EV_ABS, ABS_MT_PRESSURE);
|
||||||
set_abs(hi->input, ABS_MT_PRESSURE, field,
|
set_abs(hi->input, ABS_MT_PRESSURE, field,
|
||||||
@@ -363,8 +388,11 @@ static int mt_event(struct hid_device *hid, struct hid_field *field,
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (usage->hid == td->last_slot_field)
|
if (usage->hid == td->last_slot_field) {
|
||||||
mt_complete_slot(td);
|
mt_complete_slot(td);
|
||||||
|
if (!td->last_field_index)
|
||||||
|
mt_emit_event(td, field->hidinput->input);
|
||||||
|
}
|
||||||
|
|
||||||
if (field->index == td->last_field_index
|
if (field->index == td->last_field_index
|
||||||
&& td->num_received >= td->num_expected)
|
&& td->num_received >= td->num_expected)
|
||||||
@@ -466,18 +494,42 @@ static const struct hid_device_id mt_devices[] = {
|
|||||||
USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
|
USB_DEVICE_ID_CYPRESS_TRUETOUCH) },
|
||||||
|
|
||||||
/* GeneralTouch panel */
|
/* GeneralTouch panel */
|
||||||
{ .driver_data = MT_CLS_DUAL2,
|
{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTNUMBER,
|
||||||
HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
|
HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH,
|
||||||
USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
|
USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) },
|
||||||
|
|
||||||
|
/* IRTOUCH panels */
|
||||||
|
{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_IRTOUCHSYSTEMS,
|
||||||
|
USB_DEVICE_ID_IRTOUCH_INFRARED_USB) },
|
||||||
|
|
||||||
/* PixCir-based panels */
|
/* PixCir-based panels */
|
||||||
{ .driver_data = MT_CLS_DUAL1,
|
{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
|
||||||
HID_USB_DEVICE(USB_VENDOR_ID_HANVON,
|
HID_USB_DEVICE(USB_VENDOR_ID_HANVON,
|
||||||
USB_DEVICE_ID_HANVON_MULTITOUCH) },
|
USB_DEVICE_ID_HANVON_MULTITOUCH) },
|
||||||
{ .driver_data = MT_CLS_DUAL1,
|
{ .driver_data = MT_CLS_DUAL_INRANGE_CONTACTID,
|
||||||
HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
|
HID_USB_DEVICE(USB_VENDOR_ID_CANDO,
|
||||||
USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
|
USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) },
|
||||||
|
|
||||||
|
/* Resistive eGalax devices */
|
||||||
|
{ .driver_data = MT_CLS_EGALAX,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
|
||||||
|
{ .driver_data = MT_CLS_EGALAX,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH3) },
|
||||||
|
|
||||||
|
/* Capacitive eGalax devices */
|
||||||
|
{ .driver_data = MT_CLS_EGALAX,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
|
||||||
|
{ .driver_data = MT_CLS_EGALAX,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH2) },
|
||||||
|
{ .driver_data = MT_CLS_EGALAX,
|
||||||
|
HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH4) },
|
||||||
|
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(hid, mt_devices);
|
MODULE_DEVICE_TABLE(hid, mt_devices);
|
||||||
|
|||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user