lkml.org 
[lkml]   [2012]   [Mar]   [6]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5/5] HID: multitouch: detect serial protocol
    Date
    From: Benjamin Tissoires <benjamin.tissoires@enac.fr>

    Microsoft's documentation about multitouch protocols tells that
    if a device presents one touch per report, then it should be treated
    as a serial protocol.

    Signed-off-by: Benjamin Tissoires <benjamin.tissoires@enac.fr>
    ---
    drivers/hid/hid-multitouch.c | 13 +++++++++++++
    1 files changed, 13 insertions(+), 0 deletions(-)
    diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
    index a61ba42..6fb46d7 100644
    --- a/drivers/hid/hid-multitouch.c
    +++ b/drivers/hid/hid-multitouch.c
    @@ -81,6 +81,9 @@ struct mt_device {
    __u8 num_received; /* how many contacts we received */
    __u8 num_expected; /* expected last contact index */
    __u8 maxcontacts;
    + __u8 touches_by_report; /* how many touches are present in one report:
    + * 1 means we should use a serial protocol
    + * > 1 means hybrid (multitouch) protocol */
    bool curvalid; /* is the current contact valid? */
    struct mt_slot *slots;
    };
    @@ -365,6 +368,7 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
    input_mt_init_slots(hi->input, td->maxcontacts);
    td->last_slot_field = usage->hid;
    td->last_field_index = field->index;
    + td->touches_by_report++;
    return 1;
    case HID_DG_WIDTH:
    hid_map_usage(hi, usage, bit, max,
    @@ -670,6 +674,15 @@ static int mt_probe(struct hid_device *hdev, const struct hid_device_id *id)
    if (ret)
    goto fail;

    + if (!id && td->touches_by_report == 1) {
    + /* the device has been sent by hid-generic */
    + mtclass = &td->mtclass;
    + mtclass->quirks |= MT_QUIRK_ALWAYS_VALID;
    + mtclass->quirks &= ~MT_QUIRK_NOT_SEEN_MEANS_UP;
    + mtclass->quirks &= ~MT_QUIRK_VALID_IS_INRANGE;
    + mtclass->quirks &= ~MT_QUIRK_VALID_IS_CONFIDENCE;
    + }
    +
    td->slots = kzalloc(td->maxcontacts * sizeof(struct mt_slot),
    GFP_KERNEL);
    if (!td->slots) {
    --
    1.7.7.6


    \
     
     \ /
      Last update: 2012-03-06 17:59    [from the cache]
    ©2003-2014 Jasper Spaans. hosted at Digital Ocean