lkml.org 
[lkml]   [2011]   [Jan]   [7]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[RFC v3 4/5] hid-multitouch: added support for Cypress TrueTouch panels
    Date
    Added support for Cypress TrueTouch panels, which detect up to 10 fingers

    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
    Signed-off-by: Stéphane Chatty <chatty@enac.fr>
    ---
    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(+), 0 deletions(-)

    diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
    index 511554d..de31d75 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 2b4d9b9..e6a86bf 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 17b444b..c258c42 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 3b05dfe..7af9f71 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,
    --
    1.7.3.4
    --
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2011-01-07 19:45    [W:0.026 / U:30.092 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site