Re: [PATCH 2/2] HID: multitouch: Support Asus T304UA media keys

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

 



On Aug 02 2017 or thereabouts, Jiri Kosina wrote:
> On Mon, 24 Jul 2017, João Paulo Rechi Vita wrote:
> 
> > The Asus T304UA convertible sports a magnetic detachable keyboard with
> > touchpad, which is connected over USB. Most of the keyboard hotkeys are
> > exposed through the same USB interface as the touchpad, defined in the
> > report descriptor as follows:
> > 
> > 0x06, 0x31, 0xFF,  // Usage Page (Vendor Defined 0xFF31)
> > 0x09, 0x76,        // Usage (0x76)
> > 0xA1, 0x01,        // Collection (Application)
> > 0x05, 0xFF,        //   Usage Page (Reserved 0xFF)
> > 0x85, 0x5A,        //   Report ID (90)
> > 0x19, 0x00,        //   Usage Minimum (0x00)
> > 0x2A, 0xFF, 0x00,  //   Usage Maximum (0xFF)
> > 0x15, 0x00,        //   Logical Minimum (0)
> > 0x26, 0xFF, 0x00,  //   Logical Maximum (255)
> > 0x75, 0x08,        //   Report Size (8)
> > 0x95, 0x0F,        //   Report Count (15)
> > 0xB1, 0x02,        //   Feature (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position,Non-volatile)
> > 0x05, 0xFF,        //   Usage Page (Reserved 0xFF)
> > 0x85, 0x5A,        //   Report ID (90)
> > 0x19, 0x00,        //   Usage Minimum (0x00)
> > 0x2A, 0xFF, 0x00,  //   Usage Maximum (0xFF)
> > 0x15, 0x00,        //   Logical Minimum (0)
> > 0x26, 0xFF, 0x00,  //   Logical Maximum (255)
> > 0x75, 0x08,        //   Report Size (8)
> > 0x95, 0x02,        //   Report Count (2)
> > 0x81, 0x02,        //   Input (Data,Var,Abs,No Wrap,Linear,Preferred State,No Null Position)
> > 0xC0,              // End Collection
> > 
> > This UsagePage is declared as a variable, but we need to treat it as an
> > array to be able to map each Usage we care about to its corresponding
> > input key.
> > 
> > Signed-off-by: João Paulo Rechi Vita <jprvita@xxxxxxxxxxxx>
> > ---
> >  drivers/hid/hid-ids.h        |  1 +
> >  drivers/hid/hid-multitouch.c | 44 +++++++++++++++++++++++++++++++++++++++++++-
> >  include/linux/hid.h          |  2 ++
> >  3 files changed, 46 insertions(+), 1 deletion(-)
> > 
> > diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h
> > index 3d911bfd91cf..6b7f9707076e 100644
> > --- a/drivers/hid/hid-ids.h
> > +++ b/drivers/hid/hid-ids.h
> > @@ -176,6 +176,7 @@
> >  #define USB_DEVICE_ID_ASUSTEK_LCM	0x1726
> >  #define USB_DEVICE_ID_ASUSTEK_LCM2	0x175b
> >  #define USB_DEVICE_ID_ASUSTEK_T100_KEYBOARD	0x17e0
> > +#define USB_DEVICE_ID_ASUSTEK_T304_KEYBOARD	0x184a
> >  #define USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD	0x8585
> >  #define USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD	0x0101
> >  #define USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1 0x1854
> > diff --git a/drivers/hid/hid-multitouch.c b/drivers/hid/hid-multitouch.c
> > index 152d33120a55..6b3de7b01571 100644
> > --- a/drivers/hid/hid-multitouch.c
> > +++ b/drivers/hid/hid-multitouch.c
> > @@ -72,6 +72,7 @@ MODULE_LICENSE("GPL");
> >  #define MT_QUIRK_FIX_CONST_CONTACT_ID	BIT(14)
> >  #define MT_QUIRK_TOUCH_SIZE_SCALING	BIT(15)
> >  #define MT_QUIRK_STICKY_FINGERS		BIT(16)
> > +#define MT_QUIRK_ASUS_CUSTOM_UP		BIT(17)
> >  
> >  #define MT_INPUTMODE_TOUCHSCREEN	0x02
> >  #define MT_INPUTMODE_TOUCHPAD		0x03
> > @@ -169,6 +170,7 @@ static void mt_post_parse(struct mt_device *td);
> >  #define MT_CLS_GENERALTOUCH_TWOFINGERS		0x0108
> >  #define MT_CLS_GENERALTOUCH_PWT_TENFINGERS	0x0109
> >  #define MT_CLS_LG				0x010a
> > +#define MT_CLS_ASUS				0x010b
> >  #define MT_CLS_VTL				0x0110
> >  #define MT_CLS_GOOGLE				0x0111
> >  
> > @@ -290,6 +292,10 @@ static struct mt_class mt_classes[] = {
> >  			MT_QUIRK_IGNORE_DUPLICATES |
> >  			MT_QUIRK_HOVERING |
> >  			MT_QUIRK_CONTACT_CNT_ACCURATE },
> > +	{ .name = MT_CLS_ASUS,
> > +		.quirks = MT_QUIRK_ALWAYS_VALID |
> > +			MT_QUIRK_CONTACT_CNT_ACCURATE |
> > +			MT_QUIRK_ASUS_CUSTOM_UP },
> >  	{ .name = MT_CLS_VTL,
> >  		.quirks = MT_QUIRK_ALWAYS_VALID |
> >  			MT_QUIRK_CONTACT_CNT_ACCURATE |
> > @@ -905,6 +911,8 @@ static int mt_touch_input_configured(struct hid_device *hdev,
> >  	return 0;
> >  }
> >  
> > +#define mt_map_key_clear(c)	hid_map_usage_clear(hi, usage, bit, \
> > +						    max, EV_KEY, (c))
> >  static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
> >  		struct hid_field *field, struct hid_usage *usage,
> >  		unsigned long **bit, int *max)
> > @@ -923,10 +931,35 @@ static int mt_input_mapping(struct hid_device *hdev, struct hid_input *hi,
> >  	    field->application != HID_DG_TOUCHPAD &&
> >  	    field->application != HID_GD_KEYBOARD &&
> >  	    field->application != HID_CP_CONSUMER_CONTROL &&
> > -	    field->application != HID_GD_WIRELESS_RADIO_CTLS)
> > +	    field->application != HID_GD_WIRELESS_RADIO_CTLS &&
> > +	    !(field->application == HID_VD_ASUS_CUSTOM_MEDIA_KEYS &&
> > +	      td->mtclass.quirks & MT_QUIRK_ASUS_CUSTOM_UP))
> >  		return -1;
> >  
> >  	/*
> > +	 * Some Asus keyboard+touchpad devices have the hotkeys defined in the
> > +	 * touchpad report descriptor. We need to treat these as an array to
> > +	 * map usages to input keys.
> > +	 */
> > +	if (field->application == 0xff310076 &&
> 
> Could you please follow the convention and define a symbolic constant for 
> this as well?
> 
> Otherwise the patch looks OK to me, so after this minor nit is fixed, I'll 
> be queuing it for 4.14 unless Benjamin raises any objections.
> 

Sorry for the delay. I was at GUADEC the whole past week and couldn't
get much kernel work done. I was thinking a little bit about this
series though. Patch 1 is fine, but patch 2 is a little bit more of an
issue.
Ideally, I'd like to keep hid-multitouch from having too many vendor
specific code, but it looks like this is the easier way to handle things
here.

I guess the proper way of solving this situation would be to merge the
generic windows 8 code from hid-multitouch into hid-input so that other
drivers can benefit from it, but this is going to be a lot of work and
-ETIME.

Jiri, I wouldn't scream too loud if you merge this, so do as you want :)

Cheers,
Benjamin

> Thanks,
> 
> -- 
> Jiri Kosina
> SUSE Labs
> 
--
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