Re: [PATCH] HID: add support for PenMount HID TouchScreen Driver v3

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2014-08-27 16:27 GMT+02:00 Benjamin Tissoires <benjamin.tissoires@xxxxxxxxx>:
> On Wed, Aug 27, 2014 at 5:35 AM, Christian Gmeiner
> <christian.gmeiner@xxxxxxxxx> wrote:
>> This patch adds a seperate hid-penmount driver to work
>> around an issue with the HID report descriptor. The
>> descriptor does not contain the ContactID usage and as
>> result the touchscreen is represented as normal mouse
>> to the system.
>>
>> This driver maps the button 0 emitted by the touchscreen
>> to BTN_TOUCH. This makes it possible to use touch events
>> in userspace.
>>
>> changes from v1 to v2
>>  - incorporated feedback from Benjamin Tissoires
>> changes from v2 to v3
>>  - add missing hid-core.c and hid-ids.h changes
>
> scripts/check_patch.pl complains about DOS line ending, and I agree.
> This script also complains about 2 other warnings, which should not be
> much of a problem.

Funny.. the whole patch creation process has never left my fedora box.
Also this is
not the first time I did a patch. I will have a closer look at this in v4.

>
>>
>> Signed-off-by: Christian Gmeiner <christian.gmeiner@xxxxxxxxx>
>> ---
>>  drivers/hid/Kconfig        |  6 ++++++
>>  drivers/hid/Makefile       |  1 +
>>  drivers/hid/hid-core.c     |  1 +
>>  drivers/hid/hid-ids.h      |  1 +
>>  drivers/hid/hid-penmount.c | 51 ++++++++++++++++++++++++++++++++++++++++++++++
>>  5 files changed, 60 insertions(+)
>>  create mode 100644 drivers/hid/hid-penmount.c
>>
>> diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig
>> index c18d5d7..0351b66 100644
>> --- a/drivers/hid/Kconfig
>> +++ b/drivers/hid/Kconfig
>> @@ -530,6 +530,12 @@ config PANTHERLORD_FF
>>           Say Y here if you have a PantherLord/GreenAsia based game controller
>>           or adapter and want to enable force feedback support for it.
>>
>> +config HID_PENMOUNT
>> +       tristate "Penmount touch device"
>> +       depends on USB_HID
>> +       ---help---
>> +         Say Y here if you have a Penmount based touch controller.
>> +
>>  config HID_PETALYNX
>>         tristate "Petalynx Maxter remote control"
>>         depends on HID
>> diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile
>> index 4dbac7f..e2850d8 100644
>> --- a/drivers/hid/Makefile
>> +++ b/drivers/hid/Makefile
>> @@ -71,6 +71,7 @@ obj-$(CONFIG_HID_NTRIG)               += hid-ntrig.o
>>  obj-$(CONFIG_HID_ORTEK)                += hid-ortek.o
>>  obj-$(CONFIG_HID_PRODIKEYS)    += hid-prodikeys.o
>>  obj-$(CONFIG_HID_PANTHERLORD)  += hid-pl.o
>> +obj-$(CONFIG_HID_PENMOUNT)     += hid-penmount.o
>>  obj-$(CONFIG_HID_PETALYNX)     += hid-petalynx.o
>>  obj-$(CONFIG_HID_PICOLCD)      += hid-picolcd.o
>>  hid-picolcd-y                  += hid-picolcd_core.o
>> diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
>> index 12b6e67..6827196 100644
>> --- a/drivers/hid/hid-core.c
>> +++ b/drivers/hid/hid-core.c
>> @@ -1880,6 +1880,7 @@ static const struct hid_device_id hid_have_special_driver[] = {
>>         { 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_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
>>         { HID_USB_DEVICE(USB_VENDOR_ID_PETALYNX, USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE) },
>>         { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) },
>>  #if IS_ENABLED(CONFIG_HID_ROCCAT)
>> diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
>> index 25cd674..3943ffe 100644
>> --- a/drivers/hid/hid-ids.h
>> +++ b/drivers/hid/hid-ids.h
>> @@ -722,6 +722,7 @@
>>  #define USB_DEVICE_ID_PENMOUNT_PCI     0x3500
>>  #define USB_DEVICE_ID_PENMOUNT_1610    0x1610
>>  #define USB_DEVICE_ID_PENMOUNT_1640    0x1640
>> +#define USB_DEVICE_ID_PENMOUNT_6000    0x6000
>>
>>  #define USB_VENDOR_ID_PETALYNX         0x18b1
>>  #define USB_DEVICE_ID_PETALYNX_MAXTER_REMOTE   0x0037
>> diff --git a/drivers/hid/hid-penmount.c b/drivers/hid/hid-penmount.c
>> new file mode 100644
>> index 0000000..02de4b8
>> --- /dev/null
>> +++ b/drivers/hid/hid-penmount.c
>> @@ -0,0 +1,51 @@
>> +/*
>> + *  HID driver for PenMount touchscreens
>> + *
>> + *  Copyright (c) 2014 Christian Gmeiner <christian.gmeiner@xxxxxxxxx>
>> + *
>> + *  based on hid-penmount copyrighted by
>> + *    PenMount Touch Solutions <penmount@xxxxxxxxxxx>
>> + */
>> +
>> +/*
>> + * 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/module.h>
>> +#include <linux/hid.h>
>> +#include "hid-ids.h"
>> +
>> +static int penmount_input_mapping(struct hid_device *hdev,
>> +               struct hid_input *hi, struct hid_field *field,
>> +               struct hid_usage *usage, unsigned long **bit, int *max)
>> +{
>> +       int mapped = 0;
>
> I would have simply removed that...
>
>> +
>> +       if ((usage->hid & HID_USAGE_PAGE) == HID_UP_BUTTON) {
>> +               hid_map_usage(hi, usage, bit, max, EV_KEY, BTN_TOUCH);
>> +               mapped = 1;
>
> ... "return 1;" here...
>
>> +       }
>> +
>> +       return mapped;
>
> ... and "return 0;" here.
>

ok

>> +}
>> +
>> +static const struct hid_device_id penmount_devices[] = {
>> +       { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_6000) },
>> +       { }
>> +};
>> +MODULE_DEVICE_TABLE(hid, penmount_devices);
>> +
>> +static struct hid_driver penmount_driver = {
>> +       .name = "hid-penmount",
>> +       .id_table = penmount_devices,
>> +       .input_mapping = penmount_input_mapping,
>> +};
>> +
>> +module_hid_driver(penmount_driver);
>> +
>> +MODULE_AUTHOR("Christian Gmeiner <christian.gmeiner@xxxxxxxxx>");
>> +MODULE_DESCRIPTION("PenMount HID TouchScreen driver");
>> +MODULE_LICENSE("GPL");
>> --
>> 1.9.3
>>
>
> The rest is pretty straightforward.
> With the small change here + the remove of DOS line endings, the patch
> is Reviewed-by: Benjamin Tissoires <benjamin.tissoires@xxxxxxxxxx>
>

Great.

> Then comes the question to know if this is _really_ necessary and if
> there is no other way to achieve the same.

The other thing would patch the report descriptor. I do not want to
handle this case
in userspace as things are getting quite complex there. I am happy that chromium
sees touch events :)

>
> BTW, you should also put Jiri (the HID maintainer) in CC of your
> submissions if you ever want it to get into the main tree :)
>

Thanks for this hint.

greets
--
Christian Gmeiner, MSc

https://soundcloud.com/christian-gmeiner
--
To unsubscribe from this list: send the line "unsubscribe linux-input" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux Media Devel]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Linux Wireless Networking]     [Linux Omap]

  Powered by Linux