On Fri, Oct 31, 2014 at 05:34:42PM -0700, JD Cole wrote: > Dmitry, > > On Oct 31, 2014, at 4:53 PM, dmitry.torokhov@xxxxxxxxx wrote: > > > Hi JD, > > > > On Fri, Oct 31, 2014 at 07:20:13PM +0000, Cole, JD wrote: > >> This version of the driver prevents Telephony pages which are not > >> mapped as Consumer Control applications AND are not on the Consumer Page > >> from being registered by the hid-input driver. > >> > >> Signed-off-by: JD Cole <jd.cole@xxxxxxxxxxxxxxx> > >> --- > >> drivers/hid/Kconfig | 7 ++++ > >> drivers/hid/Makefile | 1 + > > It looks like your MUA or MTA converted all TABs into spaces. Could you > > please try resending? > > I’ll update the second patch once the formatting is known good. > > > This version of the driver prevents Telephony pages which are not > mapped as Consumer Control applications AND are not on the Consumer Page > from being registered by the hid-input driver. > > Signed-off-by: JD Cole <jd.cole@xxxxxxxxxxxxxxx> This looks good to me. Reviewed-by: Dmitry Torokhov <dmitry.torokhov@xxxxxxxxx> > --- > drivers/hid/Kconfig | 7 ++++ > drivers/hid/Makefile | 1 + > drivers/hid/hid-core.c | 1 + > drivers/hid/hid-ids.h | 2 ++ > drivers/hid/hid-plantronics.c | 78 +++++++++++++++++++++++++++++++++++++++++ > include/linux/hid.h | 3 ++ > 6 files changed, 92 insertions(+) > create mode 100644 drivers/hid/hid-plantronics.c > > diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig > index f42df4d..bf1c74e 100644 > --- a/drivers/hid/Kconfig > +++ b/drivers/hid/Kconfig > @@ -613,6 +613,13 @@ config HID_PICOLCD_CIR > ---help--- > Provide access to PicoLCD's CIR interface via remote control (LIRC). > > +config HID_PLANTRONICS > + tristate "Plantronics USB HID Driver" > + default !EXPERT > + depends on HID > + ---help--- > + Provides HID support for Plantronics telephony devices. > + > config HID_PRIMAX > tristate "Primax non-fully HID-compliant devices" > depends on HID > diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile > index e2850d8..5e7ac59 100644 > --- a/drivers/hid/Makefile > +++ b/drivers/hid/Makefile > @@ -94,6 +94,7 @@ ifdef CONFIG_DEBUG_FS > hid-picolcd-y += hid-picolcd_debugfs.o > endif > > +obj-$(CONFIG_HID_PLANTRONICS) += hid-plantronics.o > obj-$(CONFIG_HID_PRIMAX) += hid-primax.o > obj-$(CONFIG_HID_ROCCAT) += hid-roccat.o hid-roccat-common.o \ > hid-roccat-arvo.o hid-roccat-isku.o hid-roccat-kone.o \ > diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c > index 73bd9e2..d50313c 100644 > --- a/drivers/hid/hid-core.c > +++ b/drivers/hid/hid-core.c > @@ -1886,6 +1886,7 @@ static const struct hid_device_id hid_have_special_driver[] = { > { 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_PLANTRONICS, HID_ANY_ID) }, > { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_KEYBOARD) }, > #if IS_ENABLED(CONFIG_HID_ROCCAT) > { HID_USB_DEVICE(USB_VENDOR_ID_ROCCAT, USB_DEVICE_ID_ROCCAT_ARVO) }, > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h > index e23ab8b..f9f476d 100644 > --- a/drivers/hid/hid-ids.h > +++ b/drivers/hid/hid-ids.h > @@ -715,6 +715,8 @@ > #define USB_DEVICE_ID_ORTEK_PKB1700 0x1700 > #define USB_DEVICE_ID_ORTEK_WKB2000 0x2000 > > +#define USB_VENDOR_ID_PLANTRONICS 0x047f > + > #define USB_VENDOR_ID_PANASONIC 0x04da > #define USB_DEVICE_ID_PANABOARD_UBT780 0x1044 > #define USB_DEVICE_ID_PANABOARD_UBT880 0x104d > diff --git a/drivers/hid/hid-plantronics.c b/drivers/hid/hid-plantronics.c > new file mode 100644 > index 0000000..215cdbd > --- /dev/null > +++ b/drivers/hid/hid-plantronics.c > @@ -0,0 +1,78 @@ > +/* > + * Plantronics USB HID Driver > + * > + * Copyright (c) 2014 JD Cole <jd.cole@xxxxxxxxxxxxxxx> > + * Copyright (c) 2014 Terry Junge <terry.junge@xxxxxxxxxxxxxxx> > + */ > + > +/* > + * 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 "hid-ids.h" > + > +#include <linux/hid.h> > +#include <linux/module.h> > + > +static int plantronics_input_mapping(struct hid_device *hdev, > + struct hid_input *hi, > + struct hid_field *field, > + struct hid_usage *usage, > + unsigned long **bit, int *max) > +{ > + if (field->application == HID_CP_CONSUMERCONTROL > + && (usage->hid & HID_USAGE_PAGE) == HID_UP_CONSUMER) { > + hid_dbg(hdev, "usage: %08x (appl: %08x) - defaulted\n", > + usage->hid, field->application); > + return 0; > + } > + > + hid_dbg(hdev, "usage: %08x (appl: %08x) - ignored\n", > + usage->hid, field->application); > + > + return -1; > +} > + > +static int plantronics_probe(struct hid_device *hdev, > + const struct hid_device_id *id) > +{ > + int ret; > + > + ret = hid_parse(hdev); > + if (ret) { > + hid_err(hdev, "parse failed\n"); > + goto err; > + } > + > + ret = hid_hw_start(hdev, HID_CONNECT_DEFAULT); > + if (ret) { > + hid_err(hdev, "hw start failed\n"); > + goto err; > + } > + > + return 0; > + err: > + return ret; > +} > + > +static const struct hid_device_id plantronics_devices[] = { > + { HID_USB_DEVICE(USB_VENDOR_ID_PLANTRONICS, HID_ANY_ID) }, > + { } > +}; > +MODULE_DEVICE_TABLE(hid, plantronics_devices); > + > +static struct hid_driver plantronics_driver = { > + .name = "plantronics", > + .id_table = plantronics_devices, > + .input_mapping = plantronics_input_mapping, > + .probe = plantronics_probe, > +}; > +module_hid_driver(plantronics_driver); > + > +MODULE_AUTHOR("JD Cole <jd.cole@xxxxxxxxxxxxxxx>"); > +MODULE_AUTHOR("Terry Junge <terry.junge@xxxxxxxxxxxxxxx>"); > +MODULE_DESCRIPTION("Plantronics USB HID Driver"); > +MODULE_LICENSE("GPL"); > diff --git a/include/linux/hid.h b/include/linux/hid.h > index 78ea9bf..a63f2aa 100644 > --- a/include/linux/hid.h > +++ b/include/linux/hid.h > @@ -234,6 +234,9 @@ struct hid_item { > #define HID_DG_BARRELSWITCH 0x000d0044 > #define HID_DG_ERASER 0x000d0045 > #define HID_DG_TABLETPICK 0x000d0046 > + > +#define HID_CP_CONSUMERCONTROL 0x000c0001 > + > #define HID_DG_CONFIDENCE 0x000d0047 > #define HID_DG_WIDTH 0x000d0048 > #define HID_DG_HEIGHT 0x000d0049 > -- > 1.7.9.5 > -- Dmitry -- 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