USB HID: Add ID for eGalax Multitouch used in JooJoo tablet
The JooJoo tablet (http://thejoojoo.com/) contains an "eGalax Inc. USB TouchController", and this patch hooks it up to the egalax-touch driver. Without the patch we don't get any cursor motion, since it comes through Z/RX rather than X/Y. (The egalax-touch driver does not yet generate a correct event sequence for the "serial" protocol used by this device, though -- see the note added to the code, which comes from research by Stéphane Chatty.) Cc: Jiri Kosina <jkosina@suse.cz> Cc: Stéphane Chatty <chatty@enac.fr> Signed-off-by: Chris Ball <cjb@laptop.org> Signed-off-by: Jiri Kosina <jkosina@suse.cz>
This commit is contained in:
@@ -1299,6 +1299,7 @@ static const struct hid_device_id hid_blacklist[] = {
|
|||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, 0x0006) },
|
||||||
{ 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_MULTITOUCH) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
|
||||||
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
|
{ HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_EZKEY, USB_DEVICE_ID_BTC_8193) },
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
|
{ HID_USB_DEVICE(USB_VENDOR_ID_GAMERON, USB_DEVICE_ID_GAMERON_DUAL_PSX_ADAPTOR) },
|
||||||
|
@@ -159,6 +159,13 @@ static int egalax_event(struct hid_device *hid, struct hid_field *field,
|
|||||||
{
|
{
|
||||||
struct egalax_data *td = hid_get_drvdata(hid);
|
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). We do not yet generate a correct event
|
||||||
|
* sequence for the capacitive/serial protocol.
|
||||||
|
*/
|
||||||
if (hid->claimed & HID_CLAIMED_INPUT) {
|
if (hid->claimed & HID_CLAIMED_INPUT) {
|
||||||
struct input_dev *input = field->hidinput->input;
|
struct input_dev *input = field->hidinput->input;
|
||||||
|
|
||||||
@@ -246,6 +253,8 @@ static void egalax_remove(struct hid_device *hdev)
|
|||||||
static const struct hid_device_id egalax_devices[] = {
|
static const struct hid_device_id egalax_devices[] = {
|
||||||
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH) },
|
||||||
|
{ HID_USB_DEVICE(USB_VENDOR_ID_DWAV,
|
||||||
|
USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1) },
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
MODULE_DEVICE_TABLE(hid, egalax_devices);
|
MODULE_DEVICE_TABLE(hid, egalax_devices);
|
||||||
|
@@ -188,6 +188,7 @@
|
|||||||
#define USB_VENDOR_ID_DWAV 0x0eef
|
#define USB_VENDOR_ID_DWAV 0x0eef
|
||||||
#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001
|
#define USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER 0x0001
|
||||||
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d
|
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH 0x480d
|
||||||
|
#define USB_DEVICE_ID_DWAV_EGALAX_MULTITOUCH1 0x720c
|
||||||
|
|
||||||
#define USB_VENDOR_ID_ELECOM 0x056e
|
#define USB_VENDOR_ID_ELECOM 0x056e
|
||||||
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
|
#define USB_DEVICE_ID_ELECOM_BM084 0x0061
|
||||||
|
Reference in New Issue
Block a user