From 5519cab477b61326963c8d523520db0342862b63 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 7 Jan 2011 23:45:50 +0100 Subject: HID: hid-multitouch: support for PixCir-based panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Created a driver for PixCir based dual-touch panels, including the one in the Hanvon tablet. This is done in a code structure aimed at unifying support for several existing HID multitouch panels. Signed-off-by: Benjamin Tissoires Signed-off-by: Stéphane Chatty Signed-off-by: Jiri Kosina --- drivers/hid/hid-ids.h | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'drivers/hid/hid-ids.h') diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 8e11af86b014..bd3cd551b4ee 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -134,6 +134,7 @@ #define USB_DEVICE_ID_BTC_EMPREX_REMOTE_2 0x5577 #define USB_VENDOR_ID_CANDO 0x2087 +#define USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH 0x0703 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH 0x0a01 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6 0x0f01 @@ -308,6 +309,9 @@ #define USB_DEVICE_ID_HANWANG_TABLET_FIRST 0x5000 #define USB_DEVICE_ID_HANWANG_TABLET_LAST 0x8fff +#define USB_VENDOR_ID_HANVON 0x20b3 +#define USB_DEVICE_ID_HANVON_MULTITOUCH 0x0a18 + #define USB_VENDOR_ID_HAPP 0x078b #define USB_DEVICE_ID_UGCI_DRIVING 0x0010 #define USB_DEVICE_ID_UGCI_FLYING 0x0020 -- cgit v1.2.3 From a3b5e577d96bfccbc41ebf4df784e3a153072273 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 7 Jan 2011 23:46:30 +0100 Subject: HID: hid-multitouch: add support for Cypress TrueTouch panels MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added support for Cypress TrueTouch panels, which detect up to 10 fingers Signed-off-by: Benjamin Tissoires Signed-off-by: Stéphane Chatty Signed-off-by: Jiri Kosina --- drivers/hid/Kconfig | 1 + drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 1 + drivers/hid/hid-multitouch.c | 19 +++++++++++++++++++ 4 files changed, 22 insertions(+) (limited to 'drivers/hid/hid-ids.h') diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index 511554de526e..de31d75e276f 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -293,6 +293,7 @@ config HID_MULTITOUCH Say Y here if you have one of the following devices: - PixCir touchscreen + - Cypress TrueTouch config HID_NTRIG tristate "N-Trig touch screen" diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 9292eb148ce4..12d4afafc73b 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1298,6 +1298,7 @@ static const struct hid_device_id hid_blacklist[] = { { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_2) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_BARCODE_3) }, { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_MOUSE) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_TRUETOUCH) }, { 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_MULTITOUCH1) }, diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index bd3cd551b4ee..f5657a8c757d 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -180,6 +180,7 @@ #define USB_DEVICE_ID_CYPRESS_BARCODE_1 0xde61 #define USB_DEVICE_ID_CYPRESS_BARCODE_2 0xde64 #define USB_DEVICE_ID_CYPRESS_BARCODE_3 0xbca1 +#define USB_DEVICE_ID_CYPRESS_TRUETOUCH 0xc001 #define USB_VENDOR_ID_DEALEXTREAME 0x10c5 #define USB_DEVICE_ID_DEALEXTREAME_RADIO_SI4701 0x819a diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 3b05dfe910bc..7af9f7136bd5 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -32,6 +32,7 @@ MODULE_LICENSE("GPL"); /* quirks to control the device */ #define MT_QUIRK_NOT_SEEN_MEANS_UP (1 << 0) #define MT_QUIRK_SLOT_IS_CONTACTID (1 << 1) +#define MT_QUIRK_CYPRESS (1 << 2) struct mt_slot { __s32 x, y, p, w, h; @@ -62,6 +63,7 @@ struct mt_class { /* classes of device behavior */ #define MT_CLS_DEFAULT 0 #define MT_CLS_DUAL1 1 +#define MT_CLS_CYPRESS 2 /* * these device-dependent functions determine what slot corresponds @@ -73,6 +75,14 @@ static int slot_is_contactid(struct mt_device *td) return td->curdata.contactid; } +static int cypress_compute_slot(struct mt_device *td) +{ + if (td->curdata.contactid != 0 || td->num_received == 0) + return td->curdata.contactid; + else + return -1; +} + static int find_slot_from_contactid(struct mt_device *td) { int i; @@ -95,6 +105,7 @@ static int find_slot_from_contactid(struct mt_device *td) struct mt_class mt_classes[] = { { 0, 0, 0, 10 }, /* MT_CLS_DEFAULT */ { MT_QUIRK_SLOT_IS_CONTACTID, 0, 0, 2 }, /* MT_CLS_DUAL1 */ + { MT_QUIRK_CYPRESS | MT_QUIRK_NOT_SEEN_MEANS_UP, 0, 0, 10 }, /* MT_CLS_CYPRESS */ }; static void mt_feature_mapping(struct hid_device *hdev, struct hid_input *hi, @@ -223,6 +234,9 @@ static int mt_compute_slot(struct mt_device *td) if (cls->quirks & MT_QUIRK_SLOT_IS_CONTACTID) return slot_is_contactid(td); + if (cls->quirks & MT_QUIRK_CYPRESS) + return cypress_compute_slot(td); + return find_slot_from_contactid(td); } @@ -422,6 +436,11 @@ static void mt_remove(struct hid_device *hdev) static const struct hid_device_id mt_devices[] = { + /* Cypress panel */ + { .driver_data = MT_CLS_CYPRESS, + HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, + USB_DEVICE_ID_CYPRESS_TRUETOUCH) }, + /* PixCir-based panels */ { .driver_data = MT_CLS_DUAL1, HID_USB_DEVICE(USB_VENDOR_ID_HANVON, -- cgit v1.2.3 From 5572da08a784621f2ab4fdc8dc65471261871795 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Fri, 7 Jan 2011 23:47:27 +0100 Subject: HID: hid-mulitouch: add support for the 'Sensing Win7-TwoFinger' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Added support for the 'Sensing Win7-TwoFinger' panel by GeneralTouch found on some tablets. Because of conflicting VID/PID, this conflicts with previous support for some single-touch panels by GeneralTouch Signed-off-by: Benjamin Tissoires Signed-off-by: Stéphane Chatty Signed-off-by: Jiri Kosina --- drivers/hid/Kconfig | 1 + drivers/hid/hid-core.c | 2 +- drivers/hid/hid-ids.h | 1 + drivers/hid/hid-multitouch.c | 18 +++++++++++++++++- 4 files changed, 20 insertions(+), 2 deletions(-) (limited to 'drivers/hid/hid-ids.h') diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig index de31d75e276f..9bd21482e618 100644 --- a/drivers/hid/Kconfig +++ b/drivers/hid/Kconfig @@ -294,6 +294,7 @@ config HID_MULTITOUCH Say Y here if you have one of the following devices: - PixCir touchscreen - Cypress TrueTouch + - 'Sensing Win7-TwoFinger' panel by GeneralTouch config HID_NTRIG tristate "N-Trig touch screen" diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 12d4afafc73b..42cfc9464c0a 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1309,6 +1309,7 @@ static const struct hid_device_id hid_blacklist[] = { { 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_PCS_ADAPTOR) }, + { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) }, { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0003) }, { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, 0x0012) }, { HID_USB_DEVICE(USB_VENDOR_ID_GYRATION, USB_DEVICE_ID_GYRATION_REMOTE) }, @@ -1614,7 +1615,6 @@ static const struct hid_device_id hid_ignore_list[] = { { HID_USB_DEVICE(USB_VENDOR_ID_ESSENTIAL_REALITY, USB_DEVICE_ID_ESSENTIAL_REALITY_P5) }, { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC5UH) }, { HID_USB_DEVICE(USB_VENDOR_ID_ETT, USB_DEVICE_ID_TC4UM) }, - { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0001) }, { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0002) }, { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0003) }, { HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, 0x0004) }, diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index f5657a8c757d..265c747ba9b8 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -228,6 +228,7 @@ #define USB_DEVICE_ID_GAMERON_DUAL_PCS_ADAPTOR 0x0002 #define USB_VENDOR_ID_GENERAL_TOUCH 0x0dfc +#define USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS 0x0001 #define USB_VENDOR_ID_GLAB 0x06c2 #define USB_DEVICE_ID_4_PHIDGETSERVO_30 0x0038 diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c index 7af9f7136bd5..3442ed56e964 100644 --- a/drivers/hid/hid-multitouch.c +++ b/drivers/hid/hid-multitouch.c @@ -33,6 +33,7 @@ MODULE_LICENSE("GPL"); #define MT_QUIRK_NOT_SEEN_MEANS_UP (1 << 0) #define MT_QUIRK_SLOT_IS_CONTACTID (1 << 1) #define MT_QUIRK_CYPRESS (1 << 2) +#define MT_QUIRK_SLOT_IS_CONTACTNUMBER (1 << 3) struct mt_slot { __s32 x, y, p, w, h; @@ -63,7 +64,8 @@ struct mt_class { /* classes of device behavior */ #define MT_CLS_DEFAULT 0 #define MT_CLS_DUAL1 1 -#define MT_CLS_CYPRESS 2 +#define MT_CLS_DUAL2 2 +#define MT_CLS_CYPRESS 3 /* * these device-dependent functions determine what slot corresponds @@ -75,6 +77,11 @@ static int slot_is_contactid(struct mt_device *td) return td->curdata.contactid; } +static int slot_is_contactnumber(struct mt_device *td) +{ + return td->num_received; +} + static int cypress_compute_slot(struct mt_device *td) { if (td->curdata.contactid != 0 || td->num_received == 0) @@ -105,6 +112,7 @@ static int find_slot_from_contactid(struct mt_device *td) struct mt_class mt_classes[] = { { 0, 0, 0, 10 }, /* MT_CLS_DEFAULT */ { MT_QUIRK_SLOT_IS_CONTACTID, 0, 0, 2 }, /* MT_CLS_DUAL1 */ + { MT_QUIRK_SLOT_IS_CONTACTNUMBER, 0, 0, 10 }, /* MT_CLS_DUAL2 */ { MT_QUIRK_CYPRESS | MT_QUIRK_NOT_SEEN_MEANS_UP, 0, 0, 10 }, /* MT_CLS_CYPRESS */ }; @@ -237,6 +245,9 @@ static int mt_compute_slot(struct mt_device *td) if (cls->quirks & MT_QUIRK_CYPRESS) return cypress_compute_slot(td); + if (cls->quirks & MT_QUIRK_SLOT_IS_CONTACTNUMBER) + return slot_is_contactnumber(td); + return find_slot_from_contactid(td); } @@ -441,6 +452,11 @@ static const struct hid_device_id mt_devices[] = { HID_USB_DEVICE(USB_VENDOR_ID_CYPRESS, USB_DEVICE_ID_CYPRESS_TRUETOUCH) }, + /* GeneralTouch panel */ + { .driver_data = MT_CLS_DUAL2, + HID_USB_DEVICE(USB_VENDOR_ID_GENERAL_TOUCH, + USB_DEVICE_ID_GENERAL_TOUCH_WIN7_TWOFINGERS) }, + /* PixCir-based panels */ { .driver_data = MT_CLS_DUAL1, HID_USB_DEVICE(USB_VENDOR_ID_HANVON, -- cgit v1.2.3 From bc5ab083a68bfec212780281f8e57d871d8882a0 Mon Sep 17 00:00:00 2001 From: Benjamin Tissoires Date: Sat, 8 Jan 2011 12:15:41 +0100 Subject: HID: add Add Cando touch screen 10.1-inch product id This device has been reported to be an hid-cando one. Signed-off-by: Benjamin Tissoires Signed-off-by: Jiri Kosina --- drivers/hid/hid-cando.c | 2 ++ drivers/hid/hid-core.c | 1 + drivers/hid/hid-ids.h | 1 + 3 files changed, 4 insertions(+) (limited to 'drivers/hid/hid-ids.h') diff --git a/drivers/hid/hid-cando.c b/drivers/hid/hid-cando.c index 5925bdcd417d..343c41bac80e 100644 --- a/drivers/hid/hid-cando.c +++ b/drivers/hid/hid-cando.c @@ -235,6 +235,8 @@ static void cando_remove(struct hid_device *hdev) static const struct hid_device_id cando_devices[] = { { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, + USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 42cfc9464c0a..76ee7111d16c 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -1288,6 +1288,7 @@ static const struct hid_device_id hid_blacklist[] = { { HID_USB_DEVICE(USB_VENDOR_ID_BTC, USB_DEVICE_ID_BTC_EMPREX_REMOTE_2) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH) }, + { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6) }, { HID_USB_DEVICE(USB_VENDOR_ID_CANDO, USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6) }, { HID_USB_DEVICE(USB_VENDOR_ID_CHERRY, USB_DEVICE_ID_CHERRY_CYMOTION) }, diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 265c747ba9b8..372b5cf2a92f 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -136,6 +136,7 @@ #define USB_VENDOR_ID_CANDO 0x2087 #define USB_DEVICE_ID_CANDO_PIXCIR_MULTI_TOUCH 0x0703 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH 0x0a01 +#define USB_DEVICE_ID_CANDO_MULTI_TOUCH_10_1 0x0a02 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_11_6 0x0b03 #define USB_DEVICE_ID_CANDO_MULTI_TOUCH_15_6 0x0f01 -- cgit v1.2.3