Re: [PATCH 6.9 041/250] HID: asus: fix more n-key report descriptors if n-key quirked

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

 



On Tue, 25 Jun 2024, at 9:29 PM, Greg Kroah-Hartman wrote:
> 6.9-stable review patch.  If anyone has any objections, please let me know.

Hi,

No objections here but I believe this patch must also be included if not already - https://lore.kernel.org/linux-input/20240528050555.1150628-1-andrewjballance@xxxxxxxxx/

Regards,
Luke.

> ------------------
> 
> From: Luke D. Jones <luke@xxxxxxxxxx>
> 
> [ Upstream commit 59d2f5b7392e988a391e6924e177c1a68d50223d ]
> 
> Adjusts the report descriptor for N-Key devices to
> make the output count 0x01 which completely avoids
> the need for a block of filtering.
> 
> Signed-off-by: Luke D. Jones <luke@xxxxxxxxxx>
> Signed-off-by: Jiri Kosina <jkosina@xxxxxxxx>
> Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>
> ---
> drivers/hid/hid-asus.c | 51 ++++++++++++++++++++----------------------
> 1 file changed, 24 insertions(+), 27 deletions(-)
> 
> diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c
> index 78cdfb8b9a7ae..d6d8a028623a7 100644
> --- a/drivers/hid/hid-asus.c
> +++ b/drivers/hid/hid-asus.c
> @@ -335,36 +335,20 @@ static int asus_raw_event(struct hid_device *hdev,
> if (drvdata->quirks & QUIRK_MEDION_E1239T)
> return asus_e1239t_event(drvdata, data, size);
>  
> - if (drvdata->quirks & QUIRK_USE_KBD_BACKLIGHT) {
> + /*
> + * Skip these report ID, the device emits a continuous stream associated
> + * with the AURA mode it is in which looks like an 'echo'.
> + */
> + if (report->id == FEATURE_KBD_LED_REPORT_ID1 || report->id == FEATURE_KBD_LED_REPORT_ID2)
> + return -1;
> + if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
> /*
> - * Skip these report ID, the device emits a continuous stream associated
> - * with the AURA mode it is in which looks like an 'echo'.
> + * G713 and G733 send these codes on some keypresses, depending on
> + * the key pressed it can trigger a shutdown event if not caught.
> */
> - if (report->id == FEATURE_KBD_LED_REPORT_ID1 ||
> - report->id == FEATURE_KBD_LED_REPORT_ID2) {
> + if (data[0] == 0x02 && data[1] == 0x30) {
> return -1;
> - /* Additional report filtering */
> - } else if (report->id == FEATURE_KBD_REPORT_ID) {
> - /*
> - * G14 and G15 send these codes on some keypresses with no
> - * discernable reason for doing so. We'll filter them out to avoid
> - * unmapped warning messages later.
> - */
> - if (data[1] == 0xea || data[1] == 0xec || data[1] == 0x02 ||
> - data[1] == 0x8a || data[1] == 0x9e) {
> - return -1;
> - }
> }
> - if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
> - /*
> - * G713 and G733 send these codes on some keypresses, depending on
> - * the key pressed it can trigger a shutdown event if not caught.
> - */
> - if(data[0] == 0x02 && data[1] == 0x30) {
> - return -1;
> - }
> - }
> -
> }
>  
> if (drvdata->quirks & QUIRK_ROG_CLAYMORE_II_KEYBOARD) {
> @@ -1250,6 +1234,19 @@ static __u8 *asus_report_fixup(struct hid_device *hdev, __u8 *rdesc,
> rdesc[205] = 0x01;
> }
>  
> + /* match many more n-key devices */
> + if (drvdata->quirks & QUIRK_ROG_NKEY_KEYBOARD) {
> + for (int i = 0; i < *rsize + 1; i++) {
> + /* offset to the count from 0x5a report part always 14 */
> + if (rdesc[i] == 0x85 && rdesc[i + 1] == 0x5a &&
> +     rdesc[i + 14] == 0x95 && rdesc[i + 15] == 0x05) {
> + hid_info(hdev, "Fixing up Asus N-Key report descriptor\n");
> + rdesc[i + 15] = 0x01;
> + break;
> + }
> + }
> + }
> +
> return rdesc;
> }
>  
> @@ -1319,4 +1316,4 @@ static struct hid_driver asus_driver = {
> };
> module_hid_driver(asus_driver);
>  
> -MODULE_LICENSE("GPL");
> \ No newline at end of file
> +MODULE_LICENSE("GPL");
> -- 
> 2.43.0
> 
> 
> 
> 




[Index of Archives]     [Linux Kernel]     [Kernel Development Newbies]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite Hiking]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux