From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B18DE41C2EF for ; Wed, 10 Jun 2026 15:11:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104299; cv=none; b=aN0ZDEtB5iyPHQY98cPAZjpeR9hnBMZDv40arIHqDsS+TxEp8AJU1KtcuBhXRqpU/znYIU4CzAYOsqwO/H67YSx3XzuE4vIqDZlxUmfl6P9ZnmadFAaXSpv6yNO3h+7s5gwCf6pNFLiAyvbipHHj2m6gtWGqDSa6ik2sXo+M4hM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104299; c=relaxed/simple; bh=9QcodduUYoiO9xmozU7b+/LP8U45PqdyifYUn4hP0Dg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Kg3IgukOBqIaqpUMM0F133cMJPAVNRKnunF8QXKlavDpuUKawP8Fgat2b666iBaWMT13GQsfoe1qLdYnmrbamtTq96tdzPP9gCq/Gih6uvHHwJDOZqDuAJn3rBA77UBLX9tGmxfI+DgnvW1jNCH3P2c925zbWOV5YSvr4+WlnXk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=bEKSR7bL; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="bEKSR7bL" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-490aaeabdb4so45128545e9.1 for ; Wed, 10 Jun 2026 08:11:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104296; x=1781709096; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=D7k6MZW9OnF2C3c09sOCruzHTTGqDl760I5gxL0a0c8=; b=bEKSR7bL2Y3VpRxxIe7x2dvabNigxZoFhUo35esJUnK4o+NogWxzTd++NzQcy2FpWS INMEFSKe2Ig7Z2I/HravVQKC4VVaig1lAsSbPGMohMkhhmDZnQXFbwNoKY48xdTUyaHx S6l+clDvMf3FDVgkTc63xG38ETig442Gp3ajNcDuxdmTXmtk3yKiaPnPYnn6foy+TxpG kUw06q3DPmqgzESs2u0Gd1SNqk6ws/oJBC2S4sLwP+R4jdgDVfqVRd6lMc0ZTHIKBFXb bcD7H+g6IXhx1x4kZRI6qdm33WE7L0EBdEbZYTbPDLTjDOToMgWCBbOPLOlui5KUSivd 51zQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104296; x=1781709096; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=D7k6MZW9OnF2C3c09sOCruzHTTGqDl760I5gxL0a0c8=; b=p+9QAxB1003SOdvhgQRzfwpIdjfhy0Xjoj95PfJ9r1GFMVgRU4K88bDo2dLB+TbuhG ZiInMHw3QRJCmHVmx+RD6JhGU+YfaX8v6eekl6Ze4Mb7AAfKYrAZR7hTNf7scAtxUEbl vo3Jd1gZeW5F5SlbC5+CL0t+tR7uLsuEX3stgNYnguguDZyQKYptWtDVd6MKkSBoM2fM 85oZSPP2PJZ3CMZg/7cxofGccfhJ2Zn7i6Kdv38jy8nwqTAV7E136Uab9ycBhbxsQoSt HRHhZFK3D97RaaTkwucbHUbgsV6jjM6pQojAEH8a03QdsP0/k+A8dGAfG/BD0D/vHgML eRxw== X-Gm-Message-State: AOJu0YwhKpF9Ft85J4OGx86MKhHr6aNN/pERx7iMdEgBQc6Gg6kvrk9I 9Vx4K+wuI1BJJio+HtOWcDG1WezQhAAfArzqZUdSf+sYWi2NmHm4tLKCfu7eHcslrJY= X-Gm-Gg: Acq92OGvmX5YMsw+sI5vj5POjFoXTpnl73KAzJ5CrDr0/oxWjPO/z/2y1a3oysFSZZe pPQsj6C2t72EP7i233FHtU2dAZY+wEpRSsjMNcGVbzBBoqPgP8AFpF3IPB27UuIZLFwicfr2ZGc gaWP8PJ29dhHHQQVFYpfUzV5/2eu5Ie8IcgAbWTtjgZ7ffdA/jGlmeCROg/xfppdJkUuHOSS3YY 7SVEvXng9owSbQF6H5ekNzUJ0j36n/fHpFk2bj/sUd6ySTmhYzQEuJKvqUUvx9hptSHIuNBRJZj BOm6nFAl7RzSg0B0f27qd3+cCFi4rQLmoJSu3FxErUXhkHKDEX3GLrQBPwQYbtKPoHY7gp7Ubru Ru//3l7hV0LZcolGBP0+6G2ky5AwJUxFcuWqyUjuZOseVVTHTE9pRJcqAIsH4cNWowYvflqu+uF c9llPzPOdFTtGjPM8AUHvvr4Nb2P4cDwSfcPbMsYS2JWkERWzM5rIQG4UQPH8Ylg== X-Received: by 2002:a05:600c:6206:b0:490:e18f:d0db with SMTP id 5b1f17b1804b1-490e18fd29cmr14229485e9.26.1781104296073; Wed, 10 Jun 2026 08:11:36 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:35 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:24 +0100 Subject: [PATCH v2 01/12] HID: hid-input: use named initializer for 'hid_battery_quirks[]' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-1-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=4353; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=9QcodduUYoiO9xmozU7b+/LP8U45PqdyifYUn4hP0Dg=; b=Yewyh7wQHyB8Tf2ROPtqDvdd812VG7gVNzykQmnq/Spmpa66s+fJ5I0tUZT7Ll89qQYeKXbgv 0Mnb+y+F3z9BY1Zp/1iEgWP5HCjpNLmQs/+rNtSqcpypyzq8YmH626D X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This makes the code a little bit more readable and consistent with other drivers in the HID subsystem that assign the 'driver_data' field in the 'hid_device_id' struct explicitly. While touching the 'hid_battery_quirks[]', align the list terminator entry to use a space between the curly braces for better matching the layout of the other entries. It was confirmed that hid-input.o pre/post the patch are equal using diffscope. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/hid-input.c | 38 ++++++++++++++++++++------------------ 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/drivers/hid/hid-input.c b/drivers/hid/hid-input.c index d73cfa2e73d3..50ee03508806 100644 --- a/drivers/hid/hid-input.c +++ b/drivers/hid/hid-input.c @@ -359,49 +359,51 @@ static enum power_supply_property hidinput_battery_pr= ops[] =3D { static const struct hid_device_id hid_battery_quirks[] =3D { { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ISO), - HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + .driver_data =3D HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE = }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2009_ANSI), - HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + .driver_data =3D HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE = }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ANSI), - HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + .driver_data =3D HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE = }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, - USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO), - HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + USB_DEVICE_ID_APPLE_ALU_WIRELESS_2011_ISO), + .driver_data =3D HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE = }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_WIRELESS_ANSI), - HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE }, + .driver_data =3D HID_BATTERY_QUIRK_PERCENT | HID_BATTERY_QUIRK_FEATURE = }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD), - HID_BATTERY_QUIRK_IGNORE }, + .driver_data =3D HID_BATTERY_QUIRK_IGNORE }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ELECOM, USB_DEVICE_ID_ELECOM_BM084), - HID_BATTERY_QUIRK_IGNORE }, + .driver_data =3D HID_BATTERY_QUIRK_IGNORE }, { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_3), - HID_BATTERY_QUIRK_IGNORE }, + .driver_data =3D HID_BATTERY_QUIRK_IGNORE }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD), - HID_BATTERY_QUIRK_IGNORE }, + .driver_data =3D HID_BATTERY_QUIRK_IGNORE }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_DINOVO_EDGE_KBD), - HID_BATTERY_QUIRK_IGNORE }, + .driver_data =3D HID_BATTERY_QUIRK_IGNORE }, { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO= _L), - HID_BATTERY_QUIRK_AVOID_QUERY }, + .driver_data =3D HID_BATTERY_QUIRK_AVOID_QUERY }, { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO= _PRO_MW), - HID_BATTERY_QUIRK_AVOID_QUERY }, + .driver_data =3D HID_BATTERY_QUIRK_AVOID_QUERY }, { HID_USB_DEVICE(USB_VENDOR_ID_UGEE, USB_DEVICE_ID_UGEE_XPPEN_TABLET_DECO= _PRO_SW), - HID_BATTERY_QUIRK_AVOID_QUERY }, + .driver_data =3D HID_BATTERY_QUIRK_AVOID_QUERY }, { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, I2C_DEVICE_ID_CHROMEBOOK_TROGDOR_POM= POM), - HID_BATTERY_QUIRK_AVOID_QUERY }, + .driver_data =3D HID_BATTERY_QUIRK_AVOID_QUERY }, /* * Elan HID touchscreens seem to all report a non present battery, * set HID_BATTERY_QUIRK_IGNORE for all Elan I2C and USB HID devices. */ - { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_BATTERY_QUIRK_DYNAM= IC }, - { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_BATTERY_QUIRK_DYNAM= IC }, - {} + { HID_I2C_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), + .driver_data =3D HID_BATTERY_QUIRK_DYNAMIC }, + { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), + .driver_data =3D HID_BATTERY_QUIRK_DYNAMIC }, + { } }; =20 static unsigned find_battery_quirk(struct hid_device *hdev) --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C397D33FE05 for ; Wed, 10 Jun 2026 15:11:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104303; cv=none; b=bWeBU+1AJzX5jg2PADFAxfsU/S+6LgZ3heOah7jVEk/SvahQ6fizKJoZn770PzDZHIIh/IgHieEyyPz5aLaocVm71g8l0KVGsK4Qr0iIKqNOgTDm+gEUsyFKR2RragnXr7GKidkpe4WE0pp4AADGi4P3e4z9jyQCx8LmTwbOUS4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104303; c=relaxed/simple; bh=z4tKR5O95CmEy3nzyyT6ali3qjrOUjWo97muVGq2BH4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=EZTeVux8VvIaH54Sp/NgP6M8VuI8c+B9eYOYPt+6zJQSlDZwbK2LCtDL0VsVSA+2Ss62Tq+me6ByI4ZRXMe5wwhU5/9adbyHrWQGZW4NhEJDdGSb6uyaf9yglfmNbH3CuJptVDFfJMGenvOYFr4RQ6mCZyGaqoysaTf0/ZBCJt0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=MxM68KMr; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="MxM68KMr" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-490b12270b3so41538075e9.1 for ; Wed, 10 Jun 2026 08:11:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104297; x=1781709097; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KO/J2Dl6HwkBxr0YFue0IvM4bCbBhrvBLSosDLcgtqk=; b=MxM68KMr/PwM/p9x07VW+cj2eJnVredBmi+cxW2Z2dtnfs+Tk7HzSiscaenz5RRm27 uWI4TeN3pzVQeDfAcP/NBeVRBwxglaz3t4S4hQEJNQ+Y0+hHpLr2LqzH1a0DfWWtRoMA ODReAjH1WL3pKKU6gHYh0dCezJmmPiN55CbW+UD5YsgpNWS7eH2hcxkcy87xpodmnW5j D9P2uFM1MjCLTJT/8l82hCKRLBij90d3vlSeyUN2SRFQ6YviFC3rpmnob+GUXNCbxKfz vmK0/U31VcWiKglTSBsFj9vFA3u/gkYaXc6XuZ8aI61a007M7mSOJI2jaeNTu7GG8wVi Gpyw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104297; x=1781709097; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=KO/J2Dl6HwkBxr0YFue0IvM4bCbBhrvBLSosDLcgtqk=; b=qP0MsBKtzu5NbHUHl0ivS0iTi6SXXjD0s7sZCpbthBK28hyAMETVk/dtJ5X/2zavAt aezaFrrVhCde3MKaz8GHJHWkK4xeeyN4R7RfWkH0PRh17RdWo125cS9eLJFl26Iy+3pq BHUZAwBR2nD7f/HQAtsAP7ZJZ4Ypxx+dQhIZbqt6b7uV7kgsEd521ZImr+hxZ7vQNGr6 7bwtRfPXqtf6Hj6CeqwTB/MVFTlfe2mjIloGypHW4Lr6bPrfMTRwW+BMRHm+M+idF/Uf gXZyBaLt/jwlLWannESR8/VHLnikVMXCmldWAj4ZxTSIdIfJ3V/9UK7VJdDlLfYVoFsz P0Ug== X-Gm-Message-State: AOJu0YzndBn6CQ3AuxMHLQEl4Hdvam24kdkwbO5KX0KrqFCcbirYRzPT /ktrzuJfPtkdQfCOtlQnfZGj1SbIJ0R/A+orpScqgFi7mPKEnIU4LMe9KBNLXa7he70= X-Gm-Gg: Acq92OGIIgXO241qerSjfsfXXSz9DEonRk8Sl8eHhO39HotWgOpWVhMlOECp4vP3aTX fanFVv0+BVgvQfG7nfAM5x2AuCj2bgusWQBP1boN61PQgu/5thGmC1kTz3+XSZljP8oL+eVkU1e kPUabqSbfHAUtoUMSGX6JR77LZ5rGSvLrZIWdwSVv1BUjZhChfGhvHkAD7jt5kDoQviJvPlPuNk PQwYrZ7OztRVcyn3HKM9qbGH+0GtrWlnuu3+AyGHC8Arf89U7BdL9ilJPAKsG1VZjUkREbCzOPp 25i0rA1WvhcO8eWtWAB4s9DYhb6/BIa7UOnNdnTJO6IwlUvd2DWO+6kmvnWP9R1jfHYtOddRnQ7 VPtlq/BpydTEo3fSqikf5pZ5i/AF2JCzd3WUUFAx1jexP3jSgDJnXT1giyCDk3d1gYHwtCVpCZY QM/zms/PGO/1dGBHj1CeW7tvucDO4pBLvRkc0tMeXTsGwtPR+o2io= X-Received: by 2002:a05:600c:1f88:b0:490:e0e3:9587 with SMTP id 5b1f17b1804b1-490e0e395bfmr21713385e9.31.1781104297103; Wed, 10 Jun 2026 08:11:37 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:36 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:25 +0100 Subject: [PATCH v2 02/12] HID: hid-quirks: use named initializer in 'hid_quirks[]' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-2-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=45012; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=z4tKR5O95CmEy3nzyyT6ali3qjrOUjWo97muVGq2BH4=; b=LcQ7BBy55qbHf+lTkKjPhhwIwNQx4A0HMS6eHw27ZRa58pL4EJ3Zu4CbGylrSbWkij405GCOv koUk7JQxKFfDBBIiOdaALS5vdAAAxI/0hY3eNaPbjfhM7nOSPSWKH07 X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This makes the code a little bit more readable and consistent with other drivers in the HID subsystem that assign the 'driver_data' field in the 'hid_device_id' struct explicitly. While touching the 'hid_quirks[]', modify the terminator entry to use a space between the curly braces as opposed to a 0 for consistency. It was confirmed that hid-quirks.o pre/post the patch are equal using diffscope. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/hid-quirks.c | 578 +++++++++++++++++++++++++++++++------------= ---- 1 file changed, 384 insertions(+), 194 deletions(-) diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c index 57d8efdd9b89..71efca6a03ed 100644 --- a/drivers/hid/hid-quirks.c +++ b/drivers/hid/hid-quirks.c @@ -25,202 +25,392 @@ */ =20 static const struct hid_device_id hid_quirks[] =3D { - { HID_USB_DEVICE(USB_VENDOR_ID_8BITDO, USB_DEVICE_ID_8BITDO_PRO_3), HID_Q= UIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD), H= ID_QUIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR), = HID_QUIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMI= NG_MOUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMI= NG_MOUSE_DONGLE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_AFATECH, USB_DEVICE_ID_AFATECH_AF9016), HI= D_QUIRK_FULLSPEED_INTERVAL }, - { HID_USB_DEVICE(USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS), HID_= QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2), HID_QU= IRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD), HID_QUIR= K_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_M= OUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI),= HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM), HID_QU= IRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC), HID_Q= UIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM), HID_QU= IRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U), HID_QUIR= K_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS1758), HID_QUIR= K_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682), HID_QUIRK= _NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692), HID_QUIRK= _NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM), HID_QUI= RK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH= ), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_= OPTICAL_MOUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_= OPTICAL_MOUSE2), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS), = HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD), HID_QUI= RK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK),= HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295), HID_QUIRK_= NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK), HID_QUI= RK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK), HID_QU= IRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YO= KE), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), HID= _QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), HID_QUIR= K_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), HID_QU= IRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_COOLER_MASTER, USB_DEVICE_ID_COOLER_MASTER= _MICE_DONGLE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), HI= D_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPI= DFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), HI= D_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB_RAPI= DFIRE), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70R), HID_= QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K95RGB), HI= D_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_M65RGB), HI= D_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_GLAIVE_RGB)= , HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PR= O_RGB), HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE), HI= D_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OM= NI_SURROUND_51), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICA= L_MOUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PRO_WIRELESS_KM52= 21W), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC), HID_QUIRK_NOG= ET }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES= 2SNES), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES= 4SNES), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_REDRAGON_SEYMUR2= ), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPH= INBAR), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMEC= UBE1), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMEC= UBE3), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3),= HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU)= , HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER= ), HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_EDIFIER, USB_DEVICE_ID_EDIFIER_QR30), HID_= QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700), HID_QUIRK_= NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II= ), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_296= 8), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH), H= ID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), = HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), HID_QU= IRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_SA= T_ADAPTOR), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_US= B_JOYPAD), HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_8BITDO, USB_DEVICE_ID_8BITDO_PRO_3), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_GAMEPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_AASHIMA, USB_DEVICE_ID_AASHIMA_PREDATOR), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMI= NG_MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_ADATA_XPG, USB_VENDOR_ID_ADATA_XPG_WL_GAMI= NG_MOUSE_DONGLE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_AFATECH, USB_DEVICE_ID_AFATECH_AF9016), + .driver_data =3D HID_QUIRK_FULLSPEED_INTERVAL }, + { HID_USB_DEVICE(USB_VENDOR_ID_AIREN, USB_DEVICE_ID_AIREN_SLIMPLUS), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_AKAI_09E8, USB_DEVICE_ID_AKAI_09E8_MIDIMIX= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_AKAI, USB_DEVICE_ID_AKAI_MPKMINI2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_ALPS, USB_DEVICE_ID_IBM_GAMEPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_AMI, USB_DEVICE_ID_AMI_VIRT_KEYBOARD_AND_M= OUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_ALU_REVB_ANSI), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_2PORTKVM), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVMC), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_4PORTKVM), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS124U), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS1758), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS682), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_CS692), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_ATEN, USB_DEVICE_ID_ATEN_UC100KM), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_MULTI_TOUCH= ), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_= OPTICAL_MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_PIXART_USB_= OPTICAL_MOUSE2), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_CHICONY_WIRELESS), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_CHIC, USB_DEVICE_ID_CHIC_GAMEPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_3AXIS_5BUTTON_STICK), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_AXIS_295), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_COMBATSTICK), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FIGHTERSTICK), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_ECLIPSE_YO= KE), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_FLIGHT_SIM_YOKE), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_PEDALS), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_CH, USB_DEVICE_ID_CH_PRO_THROTTLE), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_COOLER_MASTER, USB_DEVICE_ID_COOLER_MASTER= _MICE_DONGLE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K65RGB_RAPI= DFIRE), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70RGB_RAPI= DFIRE), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K70R), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_K95RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_M65RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_GLAIVE_RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_SCIMITAR_PR= O_RGB), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CORSAIR, USB_DEVICE_ID_CORSAIR_STRAFE), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS | HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_CREATIVELABS, USB_DEVICE_ID_CREATIVE_SB_OM= NI_SURROUND_51), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PIXART_USB_OPTICA= L_MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_DELL, USB_DEVICE_ID_DELL_PRO_WIRELESS_KM52= 21W), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_DMI, USB_DEVICE_ID_DMI_ENC), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_2NES= 2SNES), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRACAL_RAPHNET, USB_DEVICE_ID_RAPHNET_4NES= 4SNES), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_REDRAGON_SEYMUR2= ), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_DOLPH= INBAR), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMEC= UBE1), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_GAMEC= UBE3), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_PS3), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DRAGONRISE, USB_DEVICE_ID_DRAGONRISE_WIIU), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_DWAV, USB_DEVICE_ID_EGALAX_TOUCHCONTROLLER= ), + .driver_data =3D HID_QUIRK_MULTI_INPUT | HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_EDIFIER, USB_DEVICE_ID_EDIFIER_QR30), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_ELAN, HID_ANY_ID), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_ELO, USB_DEVICE_ID_ELO_TS2700), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_EMS, USB_DEVICE_ID_EMS_TRIO_LINKER_PLUS_II= ), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH_296= 8), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_ETURBOTOUCH, USB_DEVICE_ID_ETURBOTOUCH), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_FORMOSA, USB_DEVICE_ID_FORMOSA_IR_RECEIVER= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_FREESCALE, USB_DEVICE_ID_FREESCALE_MX28), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_FUTABA, USB_DEVICE_ID_LED_DISPLAY), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_SA= T_ADAPTOR), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_GREENASIA, USB_DEVICE_ID_GREENASIA_DUAL_US= B_JOYPAD), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_GV1= 86), - HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, { HID_USB_DEVICE(USB_VENDOR_ID_GAMEVICE, USB_DEVICE_ID_GAMEVICE_KISHI), - HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), HID_QUI= RK_BADPAD | HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), HID_QU= IRK_BADPAD | HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), HID_QUIR= K_BADPAD | HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBO= ARD_A096), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBO= ARD_A293), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPT= ICAL_MOUSE_0A4A), HID_QUIRK_ALWAYS_POLL }, - { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_ELITE_PRESENTE= R_MOUSE_464A), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPT= ICAL_MOUSE_0B4A), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_094A), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_0941), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_0641), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_1f4a), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), H= ID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATA= RI), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUS= E_ID2), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406), HID_= QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M506), HID_= QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X), HID= _QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X), HI= D_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406W), HID= _QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X), HID= _QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_340), HID_Q= UIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), HI= D_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_M508WX), H= ID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_M508X), HI= D_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), HI= D_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2),= HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_T609A), H= ID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_ODDOR_HANDBRA= KE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_LEGION_GO_DUA= L_DINPUT), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_LEGION_GO2_DU= AL_DINPUT), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_OPTICAL_USB_M= OUSE_600E), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_608D), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_6019), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_602E), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_6093), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_BOLT_RECE= IVER), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), HI= D_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), HI= D_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_= G710_PLUS), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C01= A), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05= A), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06= A), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_= QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_MOUSE_0783), H= ID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE),= HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), = HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2)= , HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2)= , HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2),= HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MOJO, USB_DEVICE_ID_RETRO_ADAPTER), HID_QU= IRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL), = HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4= SNES_OLD), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_NATSU, USB_DEVICE_ID_NATSU_GAMEPAD), HID_Q= UIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD), HID_= QUIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0= 750), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_NEXTWINDOW, USB_DEVICE_ID_NEXTWINDOW_TOUCH= SCREEN), HID_QUIRK_MULTI_INPUT}, - { HID_USB_DEVICE(USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE), HID= _QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE), HID_= QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWI= N_USB_JOYSTICK), HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610), HI= D_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640), HI= D_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_PI_ENGINEERING, USB_DEVICE_ID_PI_ENGINEERI= NG_VEC_USB_FOOTPEDAL), HID_QUIRK_HIDINPUT_FORCE }, - { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN1), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN2), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_M= OUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), = HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4E2A), = HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4D0F), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4D65), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4E22), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS), = HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3001), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3003), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3008), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER), HI= D_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETR= OPAD), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETR= OPORT), HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), H= ID_QUIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52), HID_QUI= RK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_2), HID_Q= UIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_PRO), HID= _QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X65), HID_QUI= RK_INCREMENT_USAGE_ON_DUPLICATE }, - { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD)= , HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD50= 0USB), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEY= BOARD), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_USB= _MOUSE), HID_QUIRK_ALWAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780)= , HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS1030_TOUCH), H= ID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS817_TOUCH), HI= D_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH), H= ID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS_TS), HID_QUIR= K_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE), HI= D_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1), H= ID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2), H= ID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD), HI= D_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1), = HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), = HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103= ), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DELL_K1= 2A), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DELL_K1= 5A), HID_QUIRK_NO_INIT_REPORTS }, - { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), HI= D_QUIRK_BADPAD }, - { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), H= ID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN= _8882), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN= _8883), HID_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), HI= D_QUIRK_NOGET }, - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5= ), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA6= 0), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_WP55= 40), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_VRS, USB_DEVICE_ID_VRS_R295), HID_QUIRK_AL= WAYS_POLL }, - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_= 10_6_INCH), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_= 14_1_INCH), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTER= Y_FREE_TABLET), HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUA= L_PLUS), HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD),= HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE),= HID_QUIRK_MULTI_INPUT }, - { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_GROUP_AUD= IO), HID_QUIRK_NOGET }, - - { 0 } + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_DRIVING), + .driver_data =3D HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FIGHTING), + .driver_data =3D HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_HAPP, USB_DEVICE_ID_UGCI_FLYING), + .driver_data =3D HID_QUIRK_BADPAD | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBO= ARD_A096), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_HOLTEK_ALT, USB_DEVICE_ID_HOLTEK_ALT_KEYBO= ARD_A293), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPT= ICAL_MOUSE_0A4A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_ELITE_PRESENTE= R_MOUSE_464A), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_LOGITECH_OEM_USB_OPT= ICAL_MOUSE_0B4A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_094A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_0941), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_0641), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_HP, USB_PRODUCT_ID_HP_PIXART_OEM_USB_OPTIC= AL_MOUSE_1f4a), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_IDEACOM, USB_DEVICE_ID_IDEACOM_IDC6680), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_INNOMEDIA, USB_DEVICE_ID_INNEX_GENESIS_ATA= RI), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_PIXART_USB_OPTICAL_MOUS= E_ID2), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M506), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_I405X), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406W), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M610X), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_340), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_M912), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_M508WX), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_M508X), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_EASYPEN_M406XE), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_MOUSEPEN_I608X_V2), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_KYE, USB_DEVICE_ID_KYE_PENSKETCH_T609A), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_LABTEC, USB_DEVICE_ID_LABTEC_ODDOR_HANDBRA= KE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_LEGION_GO_DUA= L_DINPUT), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_LEGION_GO2_DU= AL_DINPUT), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_OPTICAL_USB_M= OUSE_600E), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_608D), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_6019), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_602E), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, USB_DEVICE_ID_LENOVO_PIXART_USB_MO= USE_6093), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_BOLT_RECE= IVER), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C007), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_C077), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_KEYBOARD_= G710_PLUS), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C01= A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C05= A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_MOUSE_C06= A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_MOUSE_0783), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MOJO, USB_DEVICE_ID_RETRO_ADAPTER), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_MSI, USB_DEVICE_ID_MSI_GT683R_LED_PANEL), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_MULTIPLE_1781, USB_DEVICE_ID_RAPHNET_4NES4= SNES_OLD), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_NATSU, USB_DEVICE_ID_NATSU_GAMEPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_NEC, USB_DEVICE_ID_NEC_USB_GAME_PAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_NEXIO, USB_DEVICE_ID_NEXIO_MULTITOUCH_PTI0= 750), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_NEXTWINDOW, USB_DEVICE_ID_NEXTWINDOW_TOUCH= SCREEN), + .driver_data =3D HID_QUIRK_MULTI_INPUT}, + { HID_USB_DEVICE(USB_VENDOR_ID_NOVATEK, USB_DEVICE_ID_NOVATEK_MOUSE), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_NTRIG, USB_DEVICE_ID_NTRIG_DUOSENSE), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_PANTHERLORD, USB_DEVICE_ID_PANTHERLORD_TWI= N_USB_JOYSTICK), + .driver_data =3D HID_QUIRK_MULTI_INPUT | HID_QUIRK_SKIP_OUTPUT_REPORTS = }, + { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1610), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_PENMOUNT, USB_DEVICE_ID_PENMOUNT_1640), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_PI_ENGINEERING, + USB_DEVICE_ID_PI_ENGINEERING_VEC_USB_FOOTPEDAL), + .driver_data =3D HID_QUIRK_HIDINPUT_FORCE }, + { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN1), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_OPTICAL_TOUCH= _SCREEN), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_PIXART, USB_DEVICE_ID_PIXART_USB_OPTICAL_M= OUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4D22), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_MOUSE_4E2A), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4D0F), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4D65), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRIMAX, USB_DEVICE_ID_PRIMAX_PIXART_MOUSE_= 4E22), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_PRODIGE, USB_DEVICE_ID_PRODIGE_CORDLESS), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3001), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3003), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_QUANTA, USB_DEVICE_ID_QUANTA_OPTICAL_TOUCH= _3008), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_REALTEK, USB_DEVICE_ID_REALTEK_READER), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETR= OPAD), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_RETROUSB, USB_DEVICE_ID_RETROUSB_SNES_RETR= OPORT), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_RUMBLEPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_2), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X52_PRO), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SAITEK, USB_DEVICE_ID_SAITEK_X65), + .driver_data =3D HID_QUIRK_INCREMENT_USAGE_ON_DUPLICATE }, + { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD2= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SEMICO, USB_DEVICE_ID_SEMICO_USB_KEYKOARD), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SENNHEISER, USB_DEVICE_ID_SENNHEISER_BTD50= 0USB), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_KEY= BOARD), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIGMA_MICRO, USB_DEVICE_ID_SIGMA_MICRO_USB= _MOUSE), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIGMATEL, USB_DEVICE_ID_SIGMATEL_STMP3780), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS1030_TOUCH), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS817_TOUCH), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS9200_TOUCH), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SIS_TOUCH, USB_DEVICE_ID_SIS_TS), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SUN, USB_DEVICE_ID_RARITAN_KVM_DONGLE), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_1), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYMBOL, USB_DEVICE_ID_SYMBOL_SCANNER_2), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_HD), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS1), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_LTS2), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_QUAD_HD= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_TP_V103= ), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DELL_K1= 2A), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_SYNAPTICS, USB_DEVICE_ID_SYNAPTICS_DELL_K1= 5A), + .driver_data =3D HID_QUIRK_NO_INIT_REPORTS }, + { HID_USB_DEVICE(USB_VENDOR_ID_TOPMAX, USB_DEVICE_ID_TOPMAX_COBRAPAD), + .driver_data =3D HID_QUIRK_BADPAD }, + { HID_USB_DEVICE(USB_VENDOR_ID_TOUCHPACK, USB_DEVICE_ID_TOUCHPACK_RTS), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN= _8882), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_TPV, USB_DEVICE_ID_TPV_OPTICAL_TOUCHSCREEN= _8883), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_TURBOX_KEYBOARD), + .driver_data =3D HID_QUIRK_NOGET }, + { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_KNA5= ), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_UCLOGIC, USB_DEVICE_ID_UCLOGIC_TABLET_TWA6= 0), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_UGTIZER, USB_DEVICE_ID_UGTIZER_TABLET_WP55= 40), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_VRS, USB_DEVICE_ID_VRS_R295), + .driver_data =3D HID_QUIRK_ALWAYS_POLL }, + { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_= 10_6_INCH), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_MEDIA_TABLET_= 14_1_INCH), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_WALTOP, USB_DEVICE_ID_WALTOP_SIRIUS_BATTER= Y_FREE_TABLET), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP_LTD2, USB_DEVICE_ID_SMARTJOY_DUA= L_PLUS), + .driver_data =3D HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_WISEGROUP, USB_DEVICE_ID_QUAD_USB_JOYPAD), + .driver_data =3D HID_QUIRK_NOGET | HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_XIN_MO, USB_DEVICE_ID_XIN_MO_DUAL_ARCADE), + .driver_data =3D HID_QUIRK_MULTI_INPUT }, + { HID_USB_DEVICE(USB_VENDOR_ID_LOGITECH, USB_DEVICE_ID_LOGITECH_GROUP_AUD= IO), + .driver_data =3D HID_QUIRK_NOGET }, + { } }; =20 /* --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wr1-f47.google.com (mail-wr1-f47.google.com [209.85.221.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4C3984266A5 for ; Wed, 10 Jun 2026 15:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104303; cv=none; b=Rt9M2c+zs0/Bf25Cv11BVeZhZJWX7TAIkzWvlX7YTb2XIGlg7krcPYPTJHP5/vKySV6nYk92vL9x5BKLj29HRcxlS9B8w8OzPUsR7/lClkeo/RBLfcPIxTKg5dcfbzT7UUWVJiObxADvA7Foths+MFyo4hd2ItGEPly3sz0igNg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104303; c=relaxed/simple; bh=ZxobgAnXXFtu+luTyBrW6xofEaS+5nRX4tb2YO+Ziyc=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=eXPSpJ1Vv85ZA5+i4umladxPrxGBQ3wyhTFIaB2/KJcU6b82HXHVfCj4fgg8D3H8ffi3B0vhavbCbUii7rCiP/ypeUg1N8PAZZUs568Y3BVlsdwT1Svt6dkHF31VwNEHMQRlqCxBfAO4rbaRLu2MHwOKZYzEC7/ZO5CfRBaERc0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=z3dDBieM; arc=none smtp.client-ip=209.85.221.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="z3dDBieM" Received: by mail-wr1-f47.google.com with SMTP id ffacd0b85a97d-45efa80e0afso5401720f8f.2 for ; Wed, 10 Jun 2026 08:11:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104298; x=1781709098; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=trDNQkj/0qrlzEVX1f99jKS+y2H6/G/TDAJPZf3g4nc=; b=z3dDBieMwel783NpAmEUBFy6aaOtU2NtG3N6yCn3bKHElP2O/Vro89dtehzYVfoTJ6 kExxF4IlnPXGUtkBHJbTjDuTJUt6gqgZ5NWAFhhfjaNfCyieASDUXFDpcUQxVMQzCm3o dQyNni1XldVGfPP7VzufKcJqrB1GqV37Im8qoTu4wUr7dI9+G6AAirIx31/ytB97yjFC RQ3M/7GHaKd55QIdOacl0GCcSI+gh2svwKVBFrwHoCva53T96llNhf5G7UMkcJivN2kX qsL2BDk2J4qguuEPyDDKPMtUb7ytvpXtvMUzPwM4XE5Kfig7h/6XUbHeSC+UonUQKFZe kVxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104298; x=1781709098; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=trDNQkj/0qrlzEVX1f99jKS+y2H6/G/TDAJPZf3g4nc=; b=j/Wos9ubWqxokYXFal0JZasGE/k6C3o0w6DI6UgOj8VmsNa5sH1DcVZhsjT8NAqbWN FVXa7u1rS3qgWwB0EaQhUdJSa1flYeKsxR0M7dBlySP5fAEm/EDrH3StWF1FnE3OycIg wiB1bxMfYQR7w15niZZAnqwC7xJ66PGN8tPKmorSNiYuIYX/doKkYr9kHTID74266M9e ExE7Dy0lK8Dad9LmF+urrifbxNpSspa+FxNEr++A1tufQp2OxRK9EtRg05LF9MfQCA/g wwoALDeMGGz22qDu1VUgYVtcqc0PFeBp7R2nehu3s1cPFqC/8OlaPT0nIUUfauqwSr80 9xWg== X-Gm-Message-State: AOJu0Yye03dpGyafXCh51kBY5tjT38fQi1COhXYBheMN+lyHQgr6Ri/k uhrHqjpmiZL8BcWxrGC4dDCJZYvAhSMNkGbmlpCzkC0icCTNxv2s5r8s5AxjyADOGGw= X-Gm-Gg: Acq92OF+xmljn2VdSppoxcXXwALHvBRYBtkaFvQYFGxQvroBsoSS72gaRoZEMj06i8K zOvAOHYqoue/ydam/jveRlAiakRLgGou1bBcL4E9N6tiykIWwSFMZA2ndmHyd//Vrjfq7b3kVsq yqJB9uTc/19Y++kfewPAPaXWWfmvcAuvMRoXKGLpStNPknw8Qwdzeld8XQoWAn/UMr6L38niXR8 QUKKEoX1LPXybbO5rt1hMQQGj32XYBLEb2PWvHSzZ6g+cdXtC7BbYNR01Jco275sc9r93jd1gqa KRrau59AXk1y7t/MCvlSyyUVHDagfZGheXklL8l5GcLJaR+rKk8Q1l5xR8HJR2d2idBWRVe0h4t MvlWM4xlFOwsX8ypBiZ5K5Yya7L3g7PiH7FLLWiig71hDq8TeZSBB6/38U4sRDQAZSo31VDR0h7 basNsaiKFqaEDZGaO9k8cefxP6vg+aaRpBCWrmeFus8WJ8dehMEWo= X-Received: by 2002:a05:600c:5010:b0:490:bb20:de64 with SMTP id 5b1f17b1804b1-490c25b337amr404087285e9.5.1781104298687; Wed, 10 Jun 2026 08:11:38 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:38 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:26 +0100 Subject: [PATCH v2 03/12] HID: hid-asus: use named initializer for 'asus_devices[]' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-3-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=5215; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=ZxobgAnXXFtu+luTyBrW6xofEaS+5nRX4tb2YO+Ziyc=; b=PbZDAbTgj9qsg7a7Q1oYFqch4nNEnw2hhNFTLh1DygV2VN46PqidRPYzXp93W+xTUYR5adqnY y5mVzkFn4TWDYDrCd7fP9pehgKfud63d8HD9Qnma/0/L333uhhFF5OE X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This makes the code a little bit more readable and consistent with other drivers in the HID subsystem that assign the 'driver_data' field in the 'hid_device_id' struct explicitly. It was confirmed that hid-asus.o pre/post the patch are equal using diffscope. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/hid-asus.c | 46 ++++++++++++++++++++++++++++------------------ 1 file changed, 28 insertions(+), 18 deletions(-) diff --git a/drivers/hid/hid-asus.c b/drivers/hid/hid-asus.c index 3f5e96900b67..ba9a49e9c7f0 100644 --- a/drivers/hid/hid-asus.c +++ b/drivers/hid/hid-asus.c @@ -1476,33 +1476,41 @@ static const __u8 *asus_report_fixup(struct hid_dev= ice *hdev, __u8 *rdesc, =20 static const struct hid_device_id asus_devices[] =3D { { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD), I2C_KEYBOARD_QUIRKS}, + USB_DEVICE_ID_ASUSTEK_I2C_KEYBOARD), + .driver_data =3D I2C_KEYBOARD_QUIRKS }, { HID_I2C_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD), I2C_TOUCHPAD_QUIRKS }, + USB_DEVICE_ID_ASUSTEK_I2C_TOUCHPAD), + .driver_data =3D I2C_TOUCHPAD_QUIRKS }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1), QUIRK_USE_KBD_BACKLIGHT }, + USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD1), + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), QUIRK_USE_KBD_BACKLIGHT }, + USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD2), + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3), QUIRK_G752_KEYBOARD }, + USB_DEVICE_ID_ASUSTEK_ROG_KEYBOARD3), + .driver_data =3D QUIRK_G752_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_FX503VD_KEYBOARD), - QUIRK_USE_KBD_BACKLIGHT }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_KEYBOARD2), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_HID_FN_LOCK }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | + QUIRK_HID_FN_LOCK }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_Z13_LIGHTBAR), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_ROG_ALLY_XPAD= }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | + QUIRK_ROG_ALLY_XPAD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_NKEY_ALLY_X), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | QUIRK_ROG_ALLY_XPAD= }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD | + QUIRK_ROG_ALLY_XPAD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_XGM_2022), }, @@ -1511,29 +1519,31 @@ static const struct hid_device_id asus_devices[] = =3D { }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_CLAYMORE_II_KEYBOARD), - QUIRK_ROG_CLAYMORE_II_KEYBOARD }, + .driver_data =3D QUIRK_ROG_CLAYMORE_II_KEYBOARD }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100TA_KEYBOARD), - QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, + .driver_data =3D QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, { HID_USB_DEVICE(USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T100TAF_KEYBOARD), - QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, + .driver_data =3D QUIRK_T100_KEYBOARD | QUIRK_NO_CONSUMER_USAGES }, { HID_USB_DEVICE(USB_VENDOR_ID_CHICONY, USB_DEVICE_ID_ASUS_AK1D) }, { HID_USB_DEVICE(USB_VENDOR_ID_TURBOX, USB_DEVICE_ID_ASUS_MD_5110) }, { HID_USB_DEVICE(USB_VENDOR_ID_JESS, USB_DEVICE_ID_ASUS_MD_5112) }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_ASUSTEK, - USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD), QUIRK_T100CHI }, + USB_DEVICE_ID_ASUSTEK_T100CHI_KEYBOARD), + .driver_data =3D QUIRK_T100CHI }, { HID_USB_DEVICE(USB_VENDOR_ID_ITE, USB_DEVICE_ID_ITE_MEDION_E1239T), - QUIRK_MEDION_E1239T }, + .driver_data =3D QUIRK_MEDION_E1239T }, /* * Note bind to the HID_GROUP_GENERIC group, so that we only bind to the = keyboard * part, while letting hid-multitouch.c handle the touchpad. */ { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_ROG_Z13_FOLIO), - QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, + .driver_data =3D QUIRK_USE_KBD_BACKLIGHT | QUIRK_ROG_NKEY_KEYBOARD }, { HID_DEVICE(BUS_USB, HID_GROUP_GENERIC, - USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD) }, + USB_VENDOR_ID_ASUSTEK, USB_DEVICE_ID_ASUSTEK_T101HA_KEYBOARD), + .driver_data =3D 0 }, { } }; MODULE_DEVICE_TABLE(hid, asus_devices); --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 149D53DDDBD for ; Wed, 10 Jun 2026 15:11:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104304; cv=none; b=MJo+lLxHG/f/cRo5bhPdKFWkdMwo0qweQv1Df7JyFz1hxwGy5URHTInoqURmvMHBh0fEw/2elCL3GmhG1pJAMm2/U2xC286INtBcO3fWneD6w3ae6Yfr4IUmZQLq6rJyK15gvmCsukUxvaMQO59LLZq6KdWUAtV77km4qzXzzh0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104304; c=relaxed/simple; bh=DfbZ16dFZ+wAu5tOIFLqBrwHcPlnbizxh3/o+vMD+5M=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=RQsFGoeV2eF3y6Bcd4fZekMuQlLKHSNfHG8l9uhgM75gb0cS2T4P0J55noxehiuOv2cQ5z6hVQalnAnwQfWV4aswjCEIb3IG5NHbvEuN2axyOQmZf5ZPJxQSfj0O9FXYkAYz/MNZdqM2IU+TO3EEJuh48+h+j7CzcoAGGR1sKWM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=e7Y5xLQb; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="e7Y5xLQb" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490b8a97b11so76823425e9.0 for ; Wed, 10 Jun 2026 08:11:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104299; x=1781709099; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+noZWa5z9Z6zRaYCOeZRe3oQX+SrPybiYkciD/u336U=; b=e7Y5xLQbvTZAG2/98Mycrw/8Y4os0cUdhxZhQy0fywlIU1aCwhxmwSL6wrdD1YwZSN u8fgnbgEePtrv42AgXyBVD7AyRW9HuUsIy2AfTPDO91VYI0txSBcgqLzmTAxiOrrZweB 5g1TxWGpXiDj30PHuvX340X1UZeVBEvq1KPXaO9FXhx/Eny94rBwl3ukcCONSH4nwCt1 dbqk2M+W7oZxlNJ8ce3nKqId4tX8/R1PLze3Vzon2qsZRuneq16G7CkaglvfHfRWKg9T wQGKCvKxGa59ODKb+iRMh0ltmANvj5tTAzqgapEkUnoIFxpZOGq9/JwNrotQ09yZwZrx ZWkA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104299; x=1781709099; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+noZWa5z9Z6zRaYCOeZRe3oQX+SrPybiYkciD/u336U=; b=e4DAztcw7ADBjYXfZVnomuvV1sY5kKLN6M1r1MG9lqCeFMD8wAaEQnUwrU9qgAqEdx qQgCoX9IgFN//BRZNnJqXiR+i5MXYylLMMtRC/OvPqKOFMrf+ko2DFKsiJM4cPje0QJN yGP+T76BpFPh02BFUh7c4zdIrD8VLMgpUus5YoX7cD8Pca5eARBi5WAt5pdlSWDr+uOH oUpxVMPnPsNQMMVYrXOMGB6bWzJg5s5iF4yR/tPMmXno3yAof9N3EVGr2Zh+spwf32g+ 4cKlfx8yw0qO3vYh9gwgvOwlOKJ8zm+4csQtCvhHK4j2ZSr9ZfVw7tmQzdU8x4iKwCw/ U7lA== X-Gm-Message-State: AOJu0Yz9P0WzR/36C7l5OgPQLy7poUT3P7ZHCfQCZzcC2RVCOKJMRmJ6 YfL9rwXqqdN98IXtXrZfLd+nLRyu2tkqTQiEs/GvfxXtukpaqK6jZs9jIidBg+zVQ80= X-Gm-Gg: Acq92OGEYB4ANvG1wm9DaiQtFcw0F5Vi5T1gen3nS4qIuzAs7eFaGBQVF2IZ83DHaj5 DXXlaQ2RoPI74icaaVHEYFjhb/8X2wqRp2bE2HC44H0mXuSJjT63ZPsEtDGvwh8B/yEW4asQHM3 TfzR9foXwRZgK1pXeQqSPeh3phxaTueVSwDYDGbsi6TnSRAdzV7uwgB9whi47JlGW8jf9oSjx2U AsdJgcx5zmem3nK19Pnb4TRYTVNdqNMKzMT+q1Y6ADj9Ka8J/1Uzn+32wS5Md0GV5zu13CDDcfh kwlKZTU9g8I05zA3bd6B6ePIDx+W5jm4HufFQ4U9l8rFkBoK2icwnRpz4Nd2CQ0PcrriwMCqBXT A/J4iCrKXWEKkqUHF+9/Eljs0LsLahCdXeIh+Hc7Uab0JnXyxTu17ig9GnGjbM1+b8Td6s+Ioga CWa25imeeXz4pvODjvtE1IUj1YJ4ctE8dSIwha7fo0v1NglueS8Fo= X-Received: by 2002:a05:600c:19d2:b0:488:d6eb:e63c with SMTP id 5b1f17b1804b1-490c25ae46bmr436691955e9.15.1781104299467; Wed, 10 Jun 2026 08:11:39 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:39 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:27 +0100 Subject: [PATCH v2 04/12] HID: i2c-hid-dmi-quirks: use named initializer for 'i2c_hid_elan_flipped_quirks[]' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-4-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=1071; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=DfbZ16dFZ+wAu5tOIFLqBrwHcPlnbizxh3/o+vMD+5M=; b=vudzAt3S4/YZrk28ApyCMn+JYUXPvgjdUJZQtE6aLu3Fw67L7hjJ9loxCW0eucRWLw5gQPdcT 0/jh+R2PyIHCIjVDr94RieJeyL7PSmr07NvDqY2GKjcwLVl5v0vqrR0 X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This makes the code a little bit more readable and consistent with other drivers in the HID subsystem that assign the 'driver_data' field in the 'hid_device_id' struct explicitly. It was confirmed that i2c-hid-dmi-quirks.o pre/post patch are equal using diffscope. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c b/drivers/hid/i2c-hid= /i2c-hid-dmi-quirks.c index 210f17c3a0be..f3e3cf73641e 100644 --- a/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c +++ b/drivers/hid/i2c-hid/i2c-hid-dmi-quirks.c @@ -420,7 +420,7 @@ static const struct dmi_system_id i2c_hid_dmi_desc_over= ride_table[] =3D { =20 static const struct hid_device_id i2c_hid_elan_flipped_quirks =3D { HID_DEVICE(BUS_I2C, HID_GROUP_MULTITOUCH_WIN_8, USB_VENDOR_ID_ELAN, 0x2dc= d), - HID_QUIRK_X_INVERT | HID_QUIRK_Y_INVERT + .driver_data =3D HID_QUIRK_X_INVERT | HID_QUIRK_Y_INVERT, }; =20 /* --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 0A8ED426EB8 for ; Wed, 10 Jun 2026 15:11:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; cv=none; b=Iep6vMxnhoowQc6FcU3FxTfCx9ygafsK9zb1WbSGvAHrnHPS17JyOBbMuPjiYJo90G9Qw38ntnCUnU0vvReggstPLCQkCYJh6nEvPusDMMDSXkecSoyGzSZ6MZeWIlTNptEqRwOH5MuZ/ii2YOL1XOO5TusrAp5/OjpbRbXkAUI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; c=relaxed/simple; bh=f4DCuRMIiQ+r5mstE+Zb8QQiasX5Wm50BsvucMUuCFQ=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=DsKKuvYjgr0OpY+TWvec6QQZAfQWJ7at1pHKHDyLFRr5lifAl1GnZx0YHBItndnnexrWwK7ILM5EcuT5bAG9xNOYvNTdtVjL1q8fBXEqanpi1/oWn5dvprgHO0zryrNdIx1Hy9tWMLq55lWzWTnHfPAIzdEdNm4/bdnTdpDlhOQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=vGr7macy; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="vGr7macy" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-490c0c92cffso50348225e9.2 for ; Wed, 10 Jun 2026 08:11:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104300; x=1781709100; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=CI76wlVqEv+h2doC3kGTlKypNnsOzMa3uqhTJs+Jf9E=; b=vGr7macyM3Am7ZjlVkCCGPcu2dcfib0+NZJEV3RCAo7EbyvjO+nIhSusV3O2a9Fr4F rTzkXz2KPathh+DBq/fAD+eOUJboWmjgZEksWTS+N7t2UcYas481eLftWW5askf7aqEr FgpgEcVPNRj4oQO0xVNUvuD2vbjOnpaD0PQUaWbfA7qonToMsxTcs9NgJjcLwyMRTQhK DAnaJfg15o230Vd0ibZzXUcwblVuptx9DgpMEGSTuJkC+4rGGS1SVOi0htI0oWDxI6B1 DW2W3G34EcIrXgoVZadRcCEw2oc3VKjjNH1B2gXZyPeSXfYnUYA/4bFgRj521aJY9Fqu vBcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104300; x=1781709100; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CI76wlVqEv+h2doC3kGTlKypNnsOzMa3uqhTJs+Jf9E=; b=BuvNwwEafHHSN71aciy7YlXpevnd0tngZeTA8l/pskhu45wTzmD2Lto3UHEGV5apPB 5b6bL7vrmaw5GWc5NE9Ilq3i5pLSM0hvo5T27SGibtqK2S+dPC98x8Za19hzGF3wdha2 eRRWmptsKZ9HvIrhai8MyX9NaCChtsL2P5KHNREL/LMsYCRrF5NQiyeyTFuwmx1smOFD y6fP2neC0/a8sMusrUfwzKFGd0FxMSfzSpvUIBlG93hW8UZ65Y6GJULKgD6FWxqiW8p/ s7CB4igNoULbRS74jPerhD2gYjOCsYmbD7KThYf4wPrb1zLnSYvu/UQ9976JQVK9A+Yi ALPA== X-Gm-Message-State: AOJu0YyIk5koD0OX7nWBHlii1NyO2wmWeiLP9CFnFwpO+8Et10ZEHnHI XquXfN3bpGxiIcfKacRvVdaTHmaiegNiNp24HWciFJHABXJEkIMfAdSr2SIK7f5yt6U= X-Gm-Gg: Acq92OErjCxvFUxQKZD2VHUJ8iGdvVVLPXOOUFQwb+uRsrZjz3S608Jgr/wBUXDoSL6 VX7477Qif9HsPHRTL260ojLyawkfC6SmhkhkD7alUreSWKLOd+FlR7g4uY0VBMhrG8lf3bydAta Xphdbjnkqz37OFQ3q2icD6CYMx4++h4VyOEVHCzIjIvpkcsmy16stXUMmSpPsLPVfiVAGR7Kspy iczHL/fMWuvWt3h0sA4HM1XcerHZYDNwfIzZTXQ2x7vxsyrolmEOP15UZLyJyghvgrzHZJXLbyg k2oTRp1e3Pl7l64LjMz6Ulo0+shn7XaHgANTfITkVuVSwB7pTlmUX3eNfsfc8ZwhQF3Ch051Tqa h8WHacZkdS541HBAnJO0LTpS3DE9RVm/+DOLvzELaXrgBQYaL/NUgJMEM7MYATsLUAjKSbGlvYD fds2YnRGXj6bOVecxuKLkXPaECzd1OwFXP32fQ14jMmmiGvaYF3hk= X-Received: by 2002:a05:600c:35ca:b0:490:bc46:1a58 with SMTP id 5b1f17b1804b1-490c25dea14mr441660315e9.18.1781104300365; Wed, 10 Jun 2026 08:11:40 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:40 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:28 +0100 Subject: [PATCH v2 05/12] HID: hid-belkin: clean up usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-5-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=1621; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=f4DCuRMIiQ+r5mstE+Zb8QQiasX5Wm50BsvucMUuCFQ=; b=NMCiakeEULIxfhAlhh+I3Jxzj1mXNANdxrCQhZQtZDpxteGGFjj3ckNqOV1MO+dcbnpM0AFdp WW+akCOjic2Cg7GSR5Zc0GP5WESLbaR9+szknSCMhbXDwC3dv3lNc3g X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= The module is storing an integer inside the drvdata pointer, which is confusing, lets fix this and set the whole of 'hid_device_id' struct as the drvdata and then simply use its integer 'driver_data' field for quirks, which shall make the code cleaner, type-safe, consistent and more readable. This makes the cast to (void *) during storage a bit safer (just to suppress the const qualifier warning) and the cast to (unsigned long) during retrieval is removed. Signed-off-by: Pawel Zalewski (The Capable Hub) Signed-off-by: Benjamin Tissoires --- drivers/hid/hid-belkin.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/drivers/hid/hid-belkin.c b/drivers/hid/hid-belkin.c index 75aaed35ee9f..84695115d37b 100644 --- a/drivers/hid/hid-belkin.c +++ b/drivers/hid/hid-belkin.c @@ -27,7 +27,8 @@ static int belkin_input_mapping(struct hid_device *hdev, = struct hid_input *hi, struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + const struct hid_device_id *id =3D hid_get_drvdata(hdev); + unsigned long quirks =3D id->driver_data; =20 if ((usage->hid & HID_USAGE_PAGE) !=3D HID_UP_CONSUMER || !(quirks & BELKIN_WKBD)) @@ -48,7 +49,7 @@ static int belkin_probe(struct hid_device *hdev, const st= ruct hid_device_id *id) unsigned long quirks =3D id->driver_data; int ret; =20 - hid_set_drvdata(hdev, (void *)quirks); + hid_set_drvdata(hdev, (void *)id); =20 ret =3D hid_parse(hdev); if (ret) { --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E6322426ED1 for ; Wed, 10 Jun 2026 15:11:42 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; cv=none; b=Qt8TsGtC/jB89rMreETbhVeLOYPq3u8Q9eNQYLDKIIXHqyo+9KVHrkgBKmjBy8cK0pmOR8fLkNu+jVRR7wntAoJiGIaP7oK8JGaMhL1eXkuVlXDcc48PihBEmQJHUL8Q/WxzGp7UsCMglJjP5yUBtkHQXD3NNiCLH8LuZo9JzI4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; c=relaxed/simple; bh=7pKNkZYBYOJ3nE8OBwZu20iefoJ6u0TO+Moyzq1GPvg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qlRMrxsTN0bnWINCw001tP991PwliSK1XMzetA8x5Kou4O1TE6MoECm/+OBJrq5vD2hJNga+gA8rK7h14Z9dKf3LHIQndBFo656Z8I5DP3zN2pCJrqnYZ5qXdSWfDaLDfs+Wt1m7eFEvqxg23tBSoVn1q0PlrQ7WUCxmMJACogs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=EIJa2nuj; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="EIJa2nuj" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-490cf322ed0so29652325e9.1 for ; Wed, 10 Jun 2026 08:11:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104301; x=1781709101; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=UTZb/sym8oiZGcOh2/RrQUOwA5RHoQUSyGVmsi6Ixy0=; b=EIJa2nujNhGdgRvXm7ONBk2ZsyYwRC1rvaW3EhZj0DUFQYBgCYZuiJubpOwMPkqfcJ pU7aj/Wk2EQUSxbjCOPqiC8Q+tEULLpl4qDgKFUnYsDs+I4S+nFmwDE4DvNG//oQdiE7 pkZRa+Dxa73VebhN92xbFGK+5Xc8CAtlA3puHPciUMfK0+TQ2gVJqOMFbS5Wvusa+cuc DifnqGZLFC9/eTMWXA6J+dixu9UhaVuHfEv/jmUBMwKlO0hmp4Kbs8RXlI/gcccFs6ly 8YIKXTRnURSFqS+LJ6O5vFYsomTYKm3Kd5+RGNlxu85qqIRAtwrUvsYXpf2tbVN705F3 TB+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104301; x=1781709101; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=UTZb/sym8oiZGcOh2/RrQUOwA5RHoQUSyGVmsi6Ixy0=; b=nvHfo5zZeQnNrhPeus+SysRgqxUVJDKhlD7I/9OXVXGvXibeCWC71SVDohNxm4UGMN EX6kxZT99lKNAaNnmyS3l43kgOizN1vjhoFqxFDZUfW3rZQklkP0otnfKLVIxDncy94x RED+XE9Gz954lRlRJag1J5znkjspUWOyeAfcLQg1O4ZKY+iHqIjxdcWQV7LnhRHEsLAc ra6IV/lNojjcXRY5UtLbB2v/aL1AmVl/zopy7wylN7yjwBTXHp0ies1Mu1KIB9GI/sky /nvzwg51rdQquCyGWcqvyJ/ksT8+0AW9Ynh8SYlMDPoXCGCL9456dqpxNw+LTUQ0j/3t bS+A== X-Gm-Message-State: AOJu0Ywk7+Rj/v4cUNZ9LYoNA5+moZzoaZ+nr6ryZGJG239samhJGyhI eBG1FzaAjeAGnGCr0NR1PXVyajWxv0sRvfnZECO/ToOzQMdcvTZeF0HD/sPWmIeODTE= X-Gm-Gg: Acq92OFIpzEMCGoT/FtvVwjI5cHy3sC7cLRwktkhnDE+PHViUdgQO3If6Bw05kNTKWF dc6Mp5TxwzUaQ3y+LL0iTN4axaYIKBGGFml0BKAY9a1mDigOLO4U+SGkawo+PDKL7LPjT4YN32z ntX41KDmmA2QQAJtEODf9zXemf5nNzlqBbE/aUMV4qiGOSIPVijM7cqtxuKVDazEtydccBUVL+Z T9SZNAzEJQjoufeJ26AFdbBRnXd29HVbu9QcIQzD0zY4U0zis5qkiPHyEIucDZFiKjPAd2xgkvG t7Z2zvXCYQeV/h5sMBI8X2jeI6n8lGFlt4gIXzi/I7x5U1xPqnFJ2x8oBFUnEVWsXKPeMEPpsOO /4IEYhHPtw0r5FPkHVBTXHkVJG2pFwTxFbqnXad85KTR/GkoVZV2WRYh5JnGR53lI5fgWSjcrQu Gkcjn69E4VSjNe4Y6g3fJ0ryLC+CYTDwP4QIrHZtsqQItzJsaTJjM= X-Received: by 2002:a05:600c:818c:b0:490:6237:521d with SMTP id 5b1f17b1804b1-490c25b3ca5mr438744025e9.13.1781104301236; Wed, 10 Jun 2026 08:11:41 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:40 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:29 +0100 Subject: [PATCH v2 06/12] HID: hid-cypress: clean up usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-6-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=3832; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=7pKNkZYBYOJ3nE8OBwZu20iefoJ6u0TO+Moyzq1GPvg=; b=NrvuC5mID7ENybkWptCQEHtLBiRYG2rObFWdgGgtXLTqwceV0KxfuvHq5WPgmKgw957sEaesY TXsNO0usDPHCxx1pbFo5T0CPs/UQX5irwk2wDRySeQLsRZaQThKv6Sd X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= The module is storing an integer inside the drvdata pointer, which is confusing - furthermore this integer is mutable. When its value is changed it is set again using the 'hid_set_drvdata' API within the 'cp_event' function. Let's fix this, create and allocate the 'cp_device' struct that is then set as the drvdata and then simply use its integer 'quirks' field for storing the quirks, which shall make the code cleaner, type-safe, consistent and more readable. This makes the cast to (void *) during storage unnecessary and the cast to (unsigned long) during retrieval is also removed. Signed-off-by: Pawel Zalewski (The Capable Hub) Signed-off-by: Benjamin Tissoires --- drivers/hid/hid-cypress.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/drivers/hid/hid-cypress.c b/drivers/hid/hid-cypress.c index 98548201feec..f18fddc176d0 100644 --- a/drivers/hid/hid-cypress.c +++ b/drivers/hid/hid-cypress.c @@ -25,6 +25,10 @@ =20 #define VA_INVAL_LOGICAL_BOUNDARY 0x08 =20 +struct cp_device { + unsigned long quirks; +}; + /* * Some USB barcode readers from cypress have usage min and usage max in * the wrong order @@ -70,7 +74,8 @@ static __u8 *va_logical_boundary_fixup(struct hid_device = *hdev, __u8 *rdesc, static const __u8 *cp_report_fixup(struct hid_device *hdev, __u8 *rdesc, unsigned int *rsize) { - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + const struct cp_device *cp_device =3D hid_get_drvdata(hdev); + unsigned long quirks =3D cp_device->quirks; =20 if (quirks & CP_RDESC_SWAPPED_MIN_MAX) rdesc =3D cp_rdesc_fixup(hdev, rdesc, rsize); @@ -84,7 +89,8 @@ static int cp_input_mapped(struct hid_device *hdev, struc= t hid_input *hi, struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + const struct cp_device *cp_device =3D hid_get_drvdata(hdev); + unsigned long quirks =3D cp_device->quirks; =20 if (!(quirks & CP_2WHEEL_MOUSE_HACK)) return 0; @@ -100,22 +106,21 @@ static int cp_input_mapped(struct hid_device *hdev, s= truct hid_input *hi, static int cp_event(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage, __s32 value) { - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + struct cp_device *cp_device =3D hid_get_drvdata(hdev); =20 if (!(hdev->claimed & HID_CLAIMED_INPUT) || !field->hidinput || - !usage->type || !(quirks & CP_2WHEEL_MOUSE_HACK)) + !usage->type || !(cp_device->quirks & CP_2WHEEL_MOUSE_HACK)) return 0; =20 if (usage->hid =3D=3D 0x00090005) { if (value) - quirks |=3D CP_2WHEEL_MOUSE_HACK_ON; + cp_device->quirks |=3D CP_2WHEEL_MOUSE_HACK_ON; else - quirks &=3D ~CP_2WHEEL_MOUSE_HACK_ON; - hid_set_drvdata(hdev, (void *)quirks); + cp_device->quirks &=3D ~CP_2WHEEL_MOUSE_HACK_ON; return 1; } =20 - if (usage->code =3D=3D REL_WHEEL && (quirks & CP_2WHEEL_MOUSE_HACK_ON)) { + if (usage->code =3D=3D REL_WHEEL && (cp_device->quirks & CP_2WHEEL_MOUSE_= HACK_ON)) { struct input_dev *input =3D field->hidinput->input; =20 input_event(input, usage->type, REL_HWHEEL, value); @@ -127,10 +132,17 @@ static int cp_event(struct hid_device *hdev, struct h= id_field *field, =20 static int cp_probe(struct hid_device *hdev, const struct hid_device_id *i= d) { - unsigned long quirks =3D id->driver_data; int ret; + struct cp_device *cp_device; =20 - hid_set_drvdata(hdev, (void *)quirks); + cp_device =3D devm_kzalloc(&hdev->dev, sizeof(*cp_device), GFP_KERNEL); + + if (!cp_device) + return -ENOMEM; + + cp_device->quirks =3D id->driver_data; + + hid_set_drvdata(hdev, cp_device); =20 ret =3D hid_parse(hdev); if (ret) { --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9F8A64279E3 for ; Wed, 10 Jun 2026 15:11:43 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; cv=none; b=GNpNp9CPYJU7w9x23xXL4/UpGVGgkfcTF9xHICJ0v4FcsJ/03STcenuVp9WLio7u2Sy/WbXww9c9G7YTq2qWFPOUOW9w+8H8BMxd2EzRff85gsMvxj4tzcKZTIinPZ1vLCfhr/IfAGcVk5mt4qU7lVeC9ej+/6lVccvYnOE3a/M= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104306; c=relaxed/simple; bh=8XsOlVp8wHuO7jtRLQE+tepquF1wCjNILjBPoxcZi/o=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aaoz1HL8uVOXfx8F0GctwhVLpM6HCZuY0KZyYZ/mfuHjj+40r05bBcWSq/yVFbWmUD9LyMlmCyR5UP9WQvEfIlW8Ow8T2SBqirbVL+2/chSjD1A0GpcJxAhTqSATG5Eyx45oqzFgLyWGz0W2I66HgAMQ3VWzkiTvP57dF6/otEI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=pbOyVGNg; arc=none smtp.client-ip=209.85.128.47 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="pbOyVGNg" Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-490afc47455so36897995e9.2 for ; Wed, 10 Jun 2026 08:11:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104302; x=1781709102; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=EVXa/HdIHh0jRCDciDMzyH8xdqpLkEo32AXxeIMQYxs=; b=pbOyVGNggfqbIOQLIudmQSNJXGpdCmnXiU72Ti0KiFwypicVfJ3Gu3hHmvDVHOm6Ho WsGp03AN18C3Dx++x+8w4XcCHtuK2YP3xCU1bbAJ6OenW/ZFokVxaJKnEUgM7Tr7oAfF N/QIv0nKWsm+EPxEBQWAP3FtKeIAO0PL7y5J/9f+aM4p033enwHR3USVXqO8MxQs/NWM OGjS6+1UF1Gnw9FfPcNWzEwTZfpi+FIN50LRcer3Fu8JTShwFRyZHRd3o0r1e+RTyvpA 7ntmzvyIrRmtmt5pfbqjTbNKjR4FFos338S9yeYpuMPtMbaGVB5tSQTKK2uGeZZWQ7Pk VINg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104302; x=1781709102; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=EVXa/HdIHh0jRCDciDMzyH8xdqpLkEo32AXxeIMQYxs=; b=TFPIZ1c0AxtI6Tl0pxQjscjwV5lhZo4bZBVQatvemM1YedgK/TZuELqPjJfqZmj+NA mU9J/7UHgq8jKmioQgXjb4BCpeyCcU0dBSxgQK8XwAT6ZaR7QlD+JO7Hn4JJr1SMwr1c rnFxuTVGA1cJj8BDf6yPrSX+aoqDACUWGcHS+ScUEAXTu6XjvkD5Tdx1pZ1YTsPYrcV2 vzTqHjE5Zs5leREAe1s/Z5pdzHL/SlMwQ242zBNZOzGGp/W7t/dfSYqPc1F5klNOuRf4 vHa+MXL2tiMfdxymm3CB3hm+5z59fB+zhjOPLfV1s2D5nb3HvHG+OvYC6hAbXL5BDbe4 vrtw== X-Gm-Message-State: AOJu0YxQlKJ13mrytYfaiWn+zUB+473qM/M85Axrks+pC2bZCAoHFQ9A Lq8Mzq7xMdhd5qIRlXLHUJl6nVzFVuyZawzQkKXayh7Xh2yNBc2Cx++qKOHv3J3DtLM= X-Gm-Gg: Acq92OG2pkHuK9mpsiNK/C1hbNmaHExvgqtI7quMt2k6Ivfd5fe+Oa22/cX0kXB47CK /mSnY0qrqRssGZcYGuYvwVhCoNvS+rRE7olRj1TH4T1J5oLD0i11TGHhXDBp6xMoZ4wDVBULWWD oyG9IFK9wQ6tdOnRb4g5ntFv5ba3p7a/ED0gCP2or1+gSZ83ZlhKrulnSHWaoBH8SYgWOMYiOJF +mNU8ju234MJOBDAmfTk/pXlBwHt/89pMU7qB7LZ1xWqwnuO7TuViZaoXVGSB9bK7lBKK5DZCT4 w4pT3YUz8RLmUhKTT+dOemAR/YW8La3omg4ydgGqjTUZG0sShmtDCWEnUKb4aOAYfeWuBw1dD7g ffSQgSVppHERJaVjzwH7kQWAB3CN2agglh66/NI5h2bXW/z7p0z7tY5jEJPX3PCSbptpXsuzthY HBSGC5PLBkfhgibQOfkyc3kyOAwTp5gAZCTYOoY3Nsc9RNvvX12jE= X-Received: by 2002:a05:600c:1d0a:b0:490:9d1b:f088 with SMTP id 5b1f17b1804b1-490d71ecc2dmr107621265e9.2.1781104301973; Wed, 10 Jun 2026 08:11:41 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:41 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:30 +0100 Subject: [PATCH v2 07/12] HID: hid-gfrm: clean up usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-7-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=2003; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=8XsOlVp8wHuO7jtRLQE+tepquF1wCjNILjBPoxcZi/o=; b=k9Y7F2bSJTOWA7+NfLGNAXL7i7z0babZLetMwZSVmtVCCWNn0q2HHUTw2hC4VEUhA/bdRIzJv O3cZkuBNAL3An5u/OLGAYMkrRcM/bibOO9dEh/ickNCUqiOOsI9qnJO X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= The module is storing an integer inside the drvdata pointer, which is confusing, lets fix this and set the whole of 'hid_device_id' struct as the drvdata and then simply use its integer 'driver_data' field for quirks, which shall make the code cleaner, type-safe, consistent and more readable. This makes the cast to (void *) during storage a bit safer (just to suppress the const qualifier warning) and the cast to (unsigned long) during retrieval is removed. Signed-off-by: Pawel Zalewski (The Capable Hub) Signed-off-by: Benjamin Tissoires --- drivers/hid/hid-gfrm.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/hid/hid-gfrm.c b/drivers/hid/hid-gfrm.c index d2a56bf92b41..f7cc754de84e 100644 --- a/drivers/hid/hid-gfrm.c +++ b/drivers/hid/hid-gfrm.c @@ -28,7 +28,8 @@ static int gfrm_input_mapping(struct hid_device *hdev, st= ruct hid_input *hi, struct hid_field *field, struct hid_usage *usage, unsigned long **bit, int *max) { - unsigned long hdev_type =3D (unsigned long) hid_get_drvdata(hdev); + const struct hid_device_id *id =3D hid_get_drvdata(hdev); + unsigned long hdev_type =3D id->driver_data; =20 if (hdev_type =3D=3D GFRM100) { if (usage->hid =3D=3D (HID_UP_CONSUMER | 0x4)) { @@ -50,7 +51,8 @@ static int gfrm_input_mapping(struct hid_device *hdev, st= ruct hid_input *hi, static int gfrm_raw_event(struct hid_device *hdev, struct hid_report *repo= rt, u8 *data, int size) { - unsigned long hdev_type =3D (unsigned long) hid_get_drvdata(hdev); + const struct hid_device_id *id =3D hid_get_drvdata(hdev); + unsigned long hdev_type =3D id->driver_data; int ret =3D 0; =20 if (hdev_type !=3D GFRM100) @@ -99,7 +101,7 @@ static int gfrm_probe(struct hid_device *hdev, const str= uct hid_device_id *id) { int ret; =20 - hid_set_drvdata(hdev, (void *) id->driver_data); + hid_set_drvdata(hdev, (void *)id); =20 ret =3D hid_parse(hdev); if (ret) --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f51.google.com (mail-wm1-f51.google.com [209.85.128.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8061E426EA3 for ; Wed, 10 Jun 2026 15:11:44 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104307; cv=none; b=D/4vu3yVLilJg+aQSkvIo410MmrKYJVkB8ummSawZRtDzIyvcxwTJhn7GP0auMianwDytkhIJiWe9aDdkleLzX2eUYNrQcZGv4Kif6quB40c8Ho8dUR4Z2KrlifMDmykMNxoW/8uvpdj830bAC+qLXAhdJ/AOAhXgbvaXXYfBR0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104307; c=relaxed/simple; bh=r5wvLahjB4zWxzRimyIkAmElMr1BKspEuFSEmiB5RMA=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=F0Af5mAmqPIqqd326gYSItXVxKS/TFbo5A4Lq2jwfgGwQRe1cb3wK6LHOR7O+ScHSldNY9Tt73LX0JxyFnDyuSsJ1hixYrXeYLRBM0IOSPSyfUXSpWI4tyMg+3bHp/x/WfNtdiaIyJ62q+yUy7EMhLGsdOSPXEa7UEqn2Rp81wU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=knREN7zI; arc=none smtp.client-ip=209.85.128.51 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="knREN7zI" Received: by mail-wm1-f51.google.com with SMTP id 5b1f17b1804b1-490b3637b90so59692465e9.3 for ; Wed, 10 Jun 2026 08:11:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104303; x=1781709103; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=JvDPpcYD4pwkugLT1skXsvI4tmiT1n9X2eJlA86aMJ4=; b=knREN7zI9H3Zd7UyD/BwGeWfzh2J8RA90yXhMmrag9pF2LcTBqB7FYg/7Do4Z0eiy7 WgmICQjE6e842r+97L6p8Snc1LYnBFsB1sgf8StkTKadtPvIis0OX8Ns+AxAZCflT/Uq aRAj0oTrbccYaW8EOV6y/kLp7T1obPOwHXjDeOe+t+74z3cGRganEZ/kFe2GMuHE0ex3 fdYJaGHZUSh3z/SQsPnj2V4NVy9qffa3HFcmyxjf3/EO1biAyOKbJGUEWhJd9j6OmAOX HGgq47IN3S7O/fybnB3kzPa2uBjt08n6BT86PhpsCcTV+84azlRMf/sy+cZgdP9nI8Ow +ecA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104303; x=1781709103; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=JvDPpcYD4pwkugLT1skXsvI4tmiT1n9X2eJlA86aMJ4=; b=RuT0EUni75GyQQ5iSgfCaNN/EBcps4Ud4gu2HGzVw8MhWO0RhHUy8BGBrWbRHemYW0 NvRALkiJlwi6HnUHHL848mDYNtFM6IG2rlyhajzWmGrPGQyrPuwk508HV1Ftb+0K8GRC aahEGAx7ks3u5Bhn1qAsu8u80Pue1YLYjYj7e27+3EMEhM+tts+BuMZAHS4cZm5bCEFw T591ccvhYsZJy2GdvGRT9hmuM8y3s8vcoNzATKbfVUUWnXjqjSGb6X4VqyLhImh11mVI yDtgjHW4VRgieIXQo3qEXwUTsZPdkCEiiDwg8Ksu3ATtHLaxHbM4nPpiqZEtXd/TZd4R iX6Q== X-Gm-Message-State: AOJu0YwtQMs75M88nQ/p2Y91efrdOz6R1j5mMMxFYl4iIogaaEI5lRdN AgfKPLoQlPcJoyRxbQLV9INwvhj2+3T3jKoYSv2vRF+NIIkkAEuDhHCHndWAc1aAQWKXcP8MGO/ k2ksM X-Gm-Gg: Acq92OFoDk7ujH5pz6hjsNfmwrR/tF9RlpHhHyxnyGlKLQ6U2e8yytgx0vFCG+g51wH A9+tG2xziSFd8+/UQOIr2ptTam6ZBoOVD0Xn8hrm9p6ntnE9MwNTRbqPeO4HoZNTy9P7c2OSvnq 761yV+mSX5jN6R1OrghQ/yBmwGLKaiHrOcYhk/UsJavOSqgMhtq94lCXHKppkZMVe8nNDZB+nCB 6z3LyacMPU4nON/pNBGis7fBLYLjmOeRIQh3G0LbcXGxeJhSPGGSHgG3JmTM+//dX17heV+RNKc dcEx385rxjbLzXniHghW5lQO+YtHb/fHAhJUew418CZ3x3bR9dT52/0DShMudEEtz95slsmX+lY Eh5gBVK4Aejl9XEy9GrIFteW4BJBaILcdRauzB3f3figY2VGSO6mwGDN4vvSF5mJCe9qHDDt1GK e7gG27W1sOagjKlbIx+9dyoSxj2uufy7Typ91fBfbSlQ/QXr/g6dw= X-Received: by 2002:a05:600c:34c3:b0:490:5e2a:f924 with SMTP id 5b1f17b1804b1-490c2599e11mr443325885e9.7.1781104302878; Wed, 10 Jun 2026 08:11:42 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:42 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:31 +0100 Subject: [PATCH v2 08/12] HID: hid-ite: clean up usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-8-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=1900; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=r5wvLahjB4zWxzRimyIkAmElMr1BKspEuFSEmiB5RMA=; b=gZfyoMFAwd/qGyYCfDPhlraFS9Tpx3ZKnNOem4Tb715fquFjXI/q+Ud28j6+mREM98vRphd2h zBH8+SL3zgtBbEO5EV/VItibAaerzK7xzcvIkhbbpvk5hySeVZvemkO X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= The module is storing an integer inside the drvdata pointer, which is confusing, lets fix this and set the whole of 'hid_device_id' struct as the drvdata and then simply use its integer 'driver_data' field for quirks, which shall make the code cleaner, type-safe, consistent and more readable. This makes the cast to (void *) during storage a bit safer (just to suppress the const qualifier warning) and the cast to (unsigned long) during retrieval is removed. Signed-off-by: Pawel Zalewski (The Capable Hub) Signed-off-by: Benjamin Tissoires --- drivers/hid/hid-ite.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/drivers/hid/hid-ite.c b/drivers/hid/hid-ite.c index 8e42780a2663..63908f24b524 100644 --- a/drivers/hid/hid-ite.c +++ b/drivers/hid/hid-ite.c @@ -15,7 +15,9 @@ =20 static const __u8 *ite_report_fixup(struct hid_device *hdev, __u8 *rdesc, = unsigned int *rsize) { - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + + const struct hid_device_id *id =3D hid_get_drvdata(hdev); + unsigned long quirks =3D id->driver_data; =20 if (quirks & QUIRK_TOUCHPAD_ON_OFF_REPORT) { /* For Acer Aspire Switch 10 SW5-012 keyboard-dock */ @@ -44,7 +46,8 @@ static int ite_input_mapping(struct hid_device *hdev, int *max) { =20 - unsigned long quirks =3D (unsigned long)hid_get_drvdata(hdev); + const struct hid_device_id *id =3D hid_get_drvdata(hdev); + unsigned long quirks =3D id->driver_data; =20 if ((quirks & QUIRK_TOUCHPAD_ON_OFF_REPORT) && (usage->hid & HID_USAGE_PAGE) =3D=3D 0x00880000) { @@ -94,7 +97,7 @@ static int ite_probe(struct hid_device *hdev, const struc= t hid_device_id *id) { int ret; =20 - hid_set_drvdata(hdev, (void *)id->driver_data); + hid_set_drvdata(hdev, (void *)id); =20 ret =3D hid_open_report(hdev); if (ret) --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 73ACB42848D for ; Wed, 10 Jun 2026 15:11:45 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104307; cv=none; b=It6sHqT/ZHieI5Ghd5pwaBNKwDO3xTqVFMhr3s29JH8TcnWr6kuvzv/i6Rz4F8Szi/tBcXroyWpYpaXFAsK6ugh15jAbJQ7zMBWL3Qfz5L2Rgz9xTWE/xev453k4umrEYv5txsLEhN0nEq0FG/H976PCqLzNj2bGwoRe2n5nOMI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104307; c=relaxed/simple; bh=pZko7Hj5g1cGs7saio5oOi15yOySsgTVL2JUbRACbIw=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=jYnNJKNnsiV08+B/GsydZSWeVqdnYNZazevZDLMDlJQI3RQXriLDKibEhIfPzyixHNJkN0SShPHG8kJ5ZOnQY2Tdu05E9T9mVodX2DyxmN3hHac7WPbfaV+zSpwc/xMTMrvyj1SdVJZFDkghOPx6KhOubU109rPHJdy2etAsqWk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=vbJKDbYm; arc=none smtp.client-ip=209.85.128.49 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="vbJKDbYm" Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-490b1bbcf3aso57828415e9.1 for ; Wed, 10 Jun 2026 08:11:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104304; x=1781709104; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=XU6/JWL8/kZd73XjFeVckB8CfI88LKwyFFmN33r1Spg=; b=vbJKDbYmOYzE2sm79t4JhAKb4T6y9opWDLjZeMKRRO0ZwYdBTjzsaLNu9n+yID5HZA w65guqAXnTEpHT/lf8PE3kt3ku9Pfv3XLKJTqziiYkauSY8eR5pWuAPslfDmFKck6n0K vlkBerlrRz06dcU3DC3fUl3FqQfjMoevGgH3PZQ7PYR0hSTGvweRMNU5vOzUVUDHX3qa CiMdmQC9Emv8a6CdN0nV8ISMF/fyJeIuYY3NSfS7LlwZ3ISFdPJbDBgGx8Ra3/+mWfpD ri6jy4HwWiwFeoiNDNmA7REf6jutLKWh4aU6W9WmptV7fGrzdRla8H5jy1aaQKdyxjgK 4c3w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104304; x=1781709104; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=XU6/JWL8/kZd73XjFeVckB8CfI88LKwyFFmN33r1Spg=; b=GBkrokgW5cjROD+rqRqeoeFnLIuOo5UHQAB1jASM6aYKIrY4+AoKVBuAlrdrdlrp0X GBbRtoH+7e4Bqm3Cunufq4U2KNcey7hRqdHcbLH0tQQshAvC3Ul0ZxJrHQzHVTDiPAtR n9yAmUH3oENz1T7QfQrhWfWziJDhGjZCBhP7tOHW9UDRh3RcqIIl22n4dVYfMPxZ5A3L 0HOqQHJATt/4WRFW+yb7oQuu8tl1tnGga3Li6FOa7hioBPogHan+0H713ZOIWbAUi0fe 2P5SZ5It6Zmj9JeOv6ZfX5yEPDKr0rwZlHoBBCFgPps3TBQUcVlXU42KZSGlZUZ/t+xt /Ckw== X-Gm-Message-State: AOJu0Yz0ldduAQPYfHitttSDD5qnr4cUHY5xTnD06e3hymMDQY60aM1t Hl0jC6gMkXVisvVJ0VSFQRTjzhpB9N7wTB3Y1UyE1z+62A0afvqjKiOutZLkVsWtH04= X-Gm-Gg: Acq92OE2oHWMNO2kuZjEeg/QJVss+7Jz0lkZ2PdzA3TSmXT09Lp88CLhDp8g1ftaSTo FJnriznAbjiwOaVAY50ZuWN36WCBR0RU9993Q1s97aQt25gJMTDKRDjgXaEUhpkmR3QjioaiuQs Uk1ObCwP6yMJZlRlb+3rH1JewhvoNVbyQm6ku4gR1H4zfdxG6lnE02tX4cMZ9EjO6CuXvwaQQJI 0c2jtPotTpH/GgCzJfEo19MUGpXNhNUlkq94EhKuC49efsqwtnF1AZCj9WTEtYmHnNOMcHmpzqc ezFX/UF4jBZIB3YvuakyAfxIqqRxM5nc6HxJpQeyNdUyiHSnX0aWM5haraICdRCynSDd+xGUbll WA2GENBdp9eTp20vH/BvG55Vu4Y5j7E75fP8eZRv+9ytSv6ClavB3HZzwzqFjn2tJuHjQK6G57P vqimFVMBmwjG+ZOHLkc9WDBGmlzgEpLomAaouvG031sEL7sguZbOU= X-Received: by 2002:a05:600c:5250:b0:490:b642:ce2c with SMTP id 5b1f17b1804b1-490d720455bmr93082735e9.14.1781104303650; Wed, 10 Jun 2026 08:11:43 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:43 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:32 +0100 Subject: [PATCH v2 09/12] HID: hid-tmff: clean up usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-9-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=4240; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=pZko7Hj5g1cGs7saio5oOi15yOySsgTVL2JUbRACbIw=; b=1NtRBnT0KwhNLLKY5KcY2dLNLo5TXg2wHJ0heVydR41HUNbIEl0qFWSr8j3/tIWxJMAkg0HOR GMTEbqJx9/oDcqVl9UpXtErCrxK2PU4yKaRZohcZfllNjHcCL0G1n06 X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This module is using the 'hid_device_id::driver_data' field as a valid pointer to dereference. The hid subsystem supports injecting a 'new_id' device from the command line and so it is more convenient to have this value to be an integer - that way userspace can select a valid pointer within the driver via an index. Lets make this possible by storing an index to the table of pointers 'ff_bits_table' there as opposed to the pointer address directly. The retrieval is bounded at runtime by the 'ff_bits_table_index' enum to avoid dereferencing OOB objects. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/hid-tmff.c | 48 +++++++++++++++++++++++++++++++++++++---------= -- 1 file changed, 37 insertions(+), 11 deletions(-) diff --git a/drivers/hid/hid-tmff.c b/drivers/hid/hid-tmff.c index 423f395d01ac..93de756dd30e 100644 --- a/drivers/hid/hid-tmff.c +++ b/drivers/hid/hid-tmff.c @@ -34,6 +34,17 @@ static const signed short ff_joystick[] =3D { -1 }; =20 +enum ff_bits_table_index { + FF_BITS_TABLE_RUMBLE, + FF_BITS_TABLE_JOYSTICK, + NUM_OF_FF_BITS_IN_TABLE +}; + +static const signed short *ff_bits_table[] =3D { + [FF_BITS_TABLE_RUMBLE] =3D ff_rumble, + [FF_BITS_TABLE_JOYSTICK] =3D ff_joystick +}; + #ifdef CONFIG_THRUSTMASTER_FF =20 /* Usages for thrustmaster devices I know about */ @@ -210,9 +221,18 @@ static inline int tmff_init(struct hid_device *hid, co= nst signed short *ff_bits) } #endif =20 +static const signed short *get_ff_bits(enum ff_bits_table_index index) +{ + if (index >=3D NUM_OF_FF_BITS_IN_TABLE) + return NULL; + + return ff_bits_table[index]; +} + static int tm_probe(struct hid_device *hdev, const struct hid_device_id *i= d) { int ret; + const signed short *ff_bits =3D get_ff_bits(id->driver_data); =20 ret =3D hid_parse(hdev); if (ret) { @@ -226,7 +246,13 @@ static int tm_probe(struct hid_device *hdev, const str= uct hid_device_id *id) goto err; } =20 - tmff_init(hdev, (void *)id->driver_data); + if (!ff_bits) { + hid_err(hdev, "no ff_bits found\n"); + ret =3D -EINVAL; + goto err; + } + + tmff_init(hdev, ff_bits); =20 return 0; err: @@ -235,25 +261,25 @@ static int tm_probe(struct hid_device *hdev, const st= ruct hid_device_id *id) =20 static const struct hid_device_id tm_devices[] =3D { { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb300), - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb304), /* FireStorm Dual= Power 2 (and 3) */ - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, THRUSTMASTER_DEVICE_ID_2_IN_= 1_DT), /* Dual Trigger 2-in-1 */ - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb323), /* Dual Trigger 3= -in-1 (PC Mode) */ - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb324), /* Dual Trigger 3= -in-1 (PS3 Mode) */ - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb605), /* NASCAR PRO FF2= Wheel */ - .driver_data =3D (unsigned long)ff_joystick }, + .driver_data =3D FF_BITS_TABLE_JOYSTICK }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb651), /* FGT Rumble Force= Wheel */ - .driver_data =3D (unsigned long)ff_rumble }, + .driver_data =3D FF_BITS_TABLE_RUMBLE }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb653), /* RGT Force Feedba= ck CLUTCH Raging Wheel */ - .driver_data =3D (unsigned long)ff_joystick }, + .driver_data =3D FF_BITS_TABLE_JOYSTICK }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb654), /* FGT Force Feedba= ck Wheel */ - .driver_data =3D (unsigned long)ff_joystick }, + .driver_data =3D FF_BITS_TABLE_JOYSTICK }, { HID_USB_DEVICE(USB_VENDOR_ID_THRUSTMASTER, 0xb65a), /* F430 Force Feedb= ack Wheel */ - .driver_data =3D (unsigned long)ff_joystick }, + .driver_data =3D FF_BITS_TABLE_JOYSTICK }, { } }; MODULE_DEVICE_TABLE(hid, tm_devices); --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8C70542B72B for ; Wed, 10 Jun 2026 15:11:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104309; cv=none; b=mtQE625eYyN9kUKP00q/AuZU3B/oQ33kecXmy6J67JHt2805LOvK79vIavXEgVIiWDY+a3OXdyo7tbmZ6MC/XaEG7aw/KsX7+mVz/kDULxzyfonD/ioYFabEnLB/xh6LTVDiDLVKSSm/6h7/D/VW/dOx1A/U0XpS7eJ40DyyzTs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104309; c=relaxed/simple; bh=zt0iKAPz0TVl9MVmxiCG82HVnrTbeRVQZu5cLzH6oXI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=SGPn+FPvRdECXW8/U9o1ubKoDOtC5iGxqw32sdBqKcbu0VDrDyMGuiH6/W2hj8c1vp1QL8D1IZamswdqToICM1Z15mY8P9+BQkitQVUJSygNx3ddX12yNvNLh+4iNJCmkCYQnKdOT1h/g637Li7NJr1fQ6zghV80OXWGUDlTiEU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=zW+/z6iT; arc=none smtp.client-ip=209.85.128.52 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="zW+/z6iT" Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-490abf12f0fso36707155e9.0 for ; Wed, 10 Jun 2026 08:11:46 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104305; x=1781709105; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=104snq0xFs4M5fMnfc8Apn3XNYh+y0rqZLPIFyvzDT0=; b=zW+/z6iTDJAyo941I9fYqgYuAMK2K/aEMAYCIYp7g9DrjinQra4PZeT7OaUfQO97ni j691XegeSqofXNfO+0I/tEiAmqFL0MqyT4tlL2p94Gsk8Q3O2UmnTxGkfjkf9qev3/XW sUtOv+FKAnH/vngXyTfgLe5s+e0SBAvJMFGgNUVMxYmMx4VmY8BIu9lbrp3ic0LVcZrZ 2L8micv3ApFNUILeAPr1+fDhF2VCM6uS+thlihWiD5i/dUVfnNicQ/QNRe+at8Yb8Xfs I6ikEDrdMNPqKj23PxtHye6o5YKS8KO1ob5oCi0PBH7xO5U0TjvuvGUga4pJW3P4tUC7 hGOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104305; x=1781709105; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=104snq0xFs4M5fMnfc8Apn3XNYh+y0rqZLPIFyvzDT0=; b=P7mFJdXCd8PYsmnSykMDrCOp4pCh8HgW4xjlwG2l0d5fz8AQLkwToVrDhDDfvaAHJA DMXq3qUbXC7HPg6nFizP4vUCjOyET9zKY3gT71CPGqk4l5W5Qx8VIdy5vGEUQ7LaOYvW i/pmpk2zuzliHLAsM5uuG4mO3lN7XR4OFkayv7HaoZzJ/afEOVEOI+fpetq7gyiegAoZ YLVebanb5MXj2i0DvpOylJefExl76sUtVIqUueJRjIKW1M+fkjHTriygs97II/YKOSOY P9BPKEvmlj2/IUm//wp4qZHmxMgygPKIc2Ghh7/iUN3iNYixsM3aZ9xamt5gTiR4PTo7 rGcw== X-Gm-Message-State: AOJu0YwAlsV8C9o1qOjunKUbYm3I4Jt7cAGaFwMG9b5vVUnPzbs3WnUC gdaA5nqVWCCUmfmSNMT3vfNdet4ohgibsSsfCOtqOP3o2XAdoOHo6ew3k4uO0EdXNas= X-Gm-Gg: Acq92OG7qcAY/e5m3a6J3o31Jr3NF6msCtrWq5BomUbLDChmhgR0YlBreTuIQbcKext x5aWbVkU5AzQU9AYNfriuZBu1NMg0HEpj82h1hKfF/RH8p/n5AzmLRn43axwp6zHwtpwEf5efJZ bQDadqkpvx5YQET9cfmi2FnGUPsOjvUnn0BgmdoHat6dhMoDY3ZNKIbLs+qAedLWUP2c+kcdUbl iaWvH3QJlt8TqIa9iOVCpnmAN45GvaTAjxnIfL84z6iTLUyCJvdJ1MTOEYieb8/8JKk0Ub1ssu/ 1RbTrkzAoKWUf65WVxlIEHq+O6EFX/41UL9BAX3SySlpBtQzzAIiA5nXbT/3YH34Zct9Ow2lcYG j9E29J9ZfKLCuL1W13qpYqtqjufV4Er57EYYLEI9H8jDRhLvDcW7yJVCosCnm8iQYz/2DTH3JBj KqrG63IS/VqIc/hF1mc98nMf4Q5AsEy6p1Dd1fvpSK3zKwgG1O78JeHq7pgWvvrA== X-Received: by 2002:a05:600c:6096:b0:490:c1cb:48f4 with SMTP id 5b1f17b1804b1-490c2d038e8mr330197175e9.12.1781104304801; Wed, 10 Jun 2026 08:11:44 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:44 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:33 +0100 Subject: [PATCH v2 10/12] HID: wacom: cleanup usage of 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-10-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=9702; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=zt0iKAPz0TVl9MVmxiCG82HVnrTbeRVQZu5cLzH6oXI=; b=LQCQnP4O326uBAi+NIkGac/p4UJZpskqtS34JNw688hJUIh7drQO5HrVTuSxHKoE8mf2gEMl4 4NwQjeQlucyDWmQ7ZQ8B1EP0zlhmrksSZpHqhvbLrnk6p4hm+y/kxTw X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= This module is using the 'hid_device_id::driver_data' field as a valid pointer to dereference. The hid subsystem allows for injecting 'new_id' device via the command line. It follows that it is more convenient to have 'driver_data' to be an integer to allow the userspace to select a valid pointer via an index. Lets enable this and store an index to the table of pointers 'wacom_features_table' instead, the access to this table is bounded and checked at runtime via the 'wacom_features_table_index' enum to avoid OOB dereferencing of objects. The implementation relies heavily on the preprocessor - but given the large amount of required entries (162) this is justified, more robust and more resilient to user error than manual input. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/wacom.h | 177 ++++++++++++++++++++++++++++++++++++++++++++= ++++ drivers/hid/wacom_sys.c | 22 ++++-- drivers/hid/wacom_wac.c | 25 +++++-- 3 files changed, 214 insertions(+), 10 deletions(-) diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h index 1deacb4568cb..115d0eb23277 100644 --- a/drivers/hid/wacom.h +++ b/drivers/hid/wacom.h @@ -228,6 +228,182 @@ static inline u32 wacom_rescale(u32 value, u32 in_max= , u32 out_max) =20 extern const struct hid_device_id wacom_ids[]; =20 +/* This table lists all unique product IDs that are matched with + * a corresponging wacom_features_##prod struct. So any new product + * should be added to this table. + */ +#define HID_WACOM_PRODUCT_TABLE() \ + table_entry(0x00) \ + table_entry(0x03) \ + table_entry(0x10) \ + table_entry(0x11) \ + table_entry(0x12) \ + table_entry(0x13) \ + table_entry(0x14) \ + table_entry(0x15) \ + table_entry(0x16) \ + table_entry(0x17) \ + table_entry(0x18) \ + table_entry(0x19) \ + table_entry(0x20) \ + table_entry(0x21) \ + table_entry(0x22) \ + table_entry(0x23) \ + table_entry(0x24) \ + table_entry(0x26) \ + table_entry(0x27) \ + table_entry(0x28) \ + table_entry(0x29) \ + table_entry(0x2A) \ + table_entry(0x30) \ + table_entry(0x31) \ + table_entry(0x32) \ + table_entry(0x33) \ + table_entry(0x34) \ + table_entry(0x35) \ + table_entry(0x37) \ + table_entry(0x38) \ + table_entry(0x39) \ + table_entry(0x3F) \ + table_entry(0x41) \ + table_entry(0x42) \ + table_entry(0x43) \ + table_entry(0x44) \ + table_entry(0x45) \ + table_entry(0x47) \ + table_entry(0x57) \ + table_entry(0x59) \ + table_entry(0x5B) \ + table_entry(0x5D) \ + table_entry(0x5E) \ + table_entry(0x60) \ + table_entry(0x61) \ + table_entry(0x62) \ + table_entry(0x63) \ + table_entry(0x64) \ + table_entry(0x65) \ + table_entry(0x69) \ + table_entry(0x6A) \ + table_entry(0x6B) \ + table_entry(0x81) \ + table_entry(0x84) \ + table_entry(0x90) \ + table_entry(0x93) \ + table_entry(0x94) \ + table_entry(0x97) \ + table_entry(0x9A) \ + table_entry(0x9F) \ + table_entry(0xB0) \ + table_entry(0xB1) \ + table_entry(0xB2) \ + table_entry(0xB3) \ + table_entry(0xB4) \ + table_entry(0xB5) \ + table_entry(0xB7) \ + table_entry(0xB8) \ + table_entry(0xB9) \ + table_entry(0xBA) \ + table_entry(0xBB) \ + table_entry(0xBC) \ + table_entry(0xBD) \ + table_entry(0xC0) \ + table_entry(0xC2) \ + table_entry(0xC4) \ + table_entry(0xC5) \ + table_entry(0xC6) \ + table_entry(0xC7) \ + table_entry(0xCC) \ + table_entry(0xCE) \ + table_entry(0xD0) \ + table_entry(0xD1) \ + table_entry(0xD2) \ + table_entry(0xD3) \ + table_entry(0xD4) \ + table_entry(0xD5) \ + table_entry(0xD6) \ + table_entry(0xD7) \ + table_entry(0xD8) \ + table_entry(0xDA) \ + table_entry(0xDB) \ + table_entry(0xDD) \ + table_entry(0xDE) \ + table_entry(0xDF) \ + table_entry(0xE2) \ + table_entry(0xE3) \ + table_entry(0xE5) \ + table_entry(0xE6) \ + table_entry(0xEC) \ + table_entry(0xED) \ + table_entry(0xEF) \ + table_entry(0xF0) \ + table_entry(0xF4) \ + table_entry(0xF6) \ + table_entry(0xF8) \ + table_entry(0xFA) \ + table_entry(0xFB) \ + table_entry(0x100) \ + table_entry(0x101) \ + table_entry(0x10D) \ + table_entry(0x10E) \ + table_entry(0x10F) \ + table_entry(0x116) \ + table_entry(0x12C) \ + table_entry(0x300) \ + table_entry(0x301) \ + table_entry(0x302) \ + table_entry(0x303) \ + table_entry(0x304) \ + table_entry(0x307) \ + table_entry(0x309) \ + table_entry(0x30A) \ + table_entry(0x30C) \ + table_entry(0x30E) \ + table_entry(0x314) \ + table_entry(0x315) \ + table_entry(0x317) \ + table_entry(0x318) \ + table_entry(0x319) \ + table_entry(0x323) \ + table_entry(0x325) \ + table_entry(0x326) \ + table_entry(0x32A) \ + table_entry(0x32B) \ + table_entry(0x32C) \ + table_entry(0x32F) \ + table_entry(0x331) \ + table_entry(0x333) \ + table_entry(0x335) \ + table_entry(0x336) \ + table_entry(0x33B) \ + table_entry(0x33C) \ + table_entry(0x33D) \ + table_entry(0x33E) \ + table_entry(0x343) \ + table_entry(0x360) \ + table_entry(0x361) \ + table_entry(0x377) \ + table_entry(0x379) \ + table_entry(0x37A) \ + table_entry(0x37B) \ + table_entry(0x393) \ + table_entry(0x3c6) \ + table_entry(0x3c8) \ + table_entry(0x3dd) \ + table_entry(0x4001) \ + table_entry(0x4004) \ + table_entry(0x5000) \ + table_entry(0x5002) \ + table_entry(0x6004) \ + table_entry(HID_ANY_ID) \ + +enum wacom_features_table_index { +#define table_entry(product) \ + WACOM_FEATURE_TABLE_##product, + HID_WACOM_PRODUCT_TABLE() + NUM_OF_WACOM_FEATURES_IN_TABLE +#undef table_entry +}; + void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len); void wacom_setup_device_quirks(struct wacom *wacom); int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, @@ -249,4 +425,5 @@ struct wacom_led *wacom_led_next(struct wacom *wacom, s= truct wacom_led *cur); int wacom_equivalent_usage(int usage); int wacom_initialize_leds(struct wacom *wacom); void wacom_idleprox_timeout(struct timer_list *list); +const struct wacom_features *get_wacom_features(enum wacom_features_table_= index index); #endif diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c index 2220168bf116..dd3ed1f8134b 100644 --- a/drivers/hid/wacom_sys.c +++ b/drivers/hid/wacom_sys.c @@ -2561,8 +2561,13 @@ static void wacom_wireless_work(struct work_struct *= work) } =20 /* Stylus interface */ - wacom_wac1->features =3D - *((struct wacom_features *)id->driver_data); + const struct wacom_features *features =3D get_wacom_features(id->driver_= data); + + if (!features) { + hid_err(wacom->hdev, "could not get wacom features.\n"); + return; + } + wacom_wac1->features =3D *features; =20 wacom_wac1->pid =3D wacom_wac->pid; hid_hw_stop(hdev1); @@ -2574,8 +2579,7 @@ static void wacom_wireless_work(struct work_struct *w= ork) if (wacom_wac1->features.touch_max || (wacom_wac1->features.type >=3D INTUOSHT && wacom_wac1->features.type <=3D BAMBOO_PT)) { - wacom_wac2->features =3D - *((struct wacom_features *)id->driver_data); + wacom_wac2->features =3D *features; wacom_wac2->pid =3D wacom_wac->pid; hid_hw_stop(hdev2); error =3D wacom_parse_and_register(wacom2, true); @@ -2845,7 +2849,15 @@ static int wacom_probe(struct hid_device *hdev, wacom->hdev =3D hdev; =20 wacom_wac =3D &wacom->wacom_wac; - wacom_wac->features =3D *((struct wacom_features *)id->driver_data); + + const struct wacom_features *id_features =3D get_wacom_features(id->drive= r_data); + + if (!id_features) { + hid_err(wacom->hdev, "could not get wacom id_features.\n"); + return -EINVAL; + } + wacom_wac->features =3D *id_features; + features =3D &wacom_wac->features; =20 if (features->check_for_hid_type && features->hid_type !=3D hdev->type) diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index da1f0ea85625..d0a864d52509 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -4945,25 +4945,40 @@ static const struct wacom_features wacom_features_H= ID_ANY_ID =3D static const struct wacom_features wacom_features_0x94 =3D { "Wacom Bootloader", .type =3D BOOTLOADER }; =20 +static const struct wacom_features *wacom_features_table[] =3D { +#define table_entry(product) \ + [WACOM_FEATURE_TABLE_##product] =3D &wacom_features_##product, + HID_WACOM_PRODUCT_TABLE() +#undef table_entry +}; + +const struct wacom_features *get_wacom_features(enum wacom_features_table_= index index) +{ + if (index >=3D NUM_OF_WACOM_FEATURES_IN_TABLE) + return NULL; + + return wacom_features_table[index]; +} + #define USB_DEVICE_WACOM(prod) \ HID_DEVICE(BUS_USB, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D (kernel_ulong_t)&wacom_features_##prod + .driver_data =3D WACOM_FEATURE_TABLE_##prod =20 #define BT_DEVICE_WACOM(prod) \ HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D (kernel_ulong_t)&wacom_features_##prod + .driver_data =3D WACOM_FEATURE_TABLE_##prod =20 #define I2C_DEVICE_WACOM(prod) \ HID_DEVICE(BUS_I2C, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D (kernel_ulong_t)&wacom_features_##prod + .driver_data =3D WACOM_FEATURE_TABLE_##prod =20 #define PCI_DEVICE_WACOM(prod) \ HID_DEVICE(BUS_PCI, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D (kernel_ulong_t)&wacom_features_##prod + .driver_data =3D WACOM_FEATURE_TABLE_##prod =20 #define USB_DEVICE_LENOVO(prod) \ HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, prod), \ - .driver_data =3D (kernel_ulong_t)&wacom_features_##prod + .driver_data =3D WACOM_FEATURE_TABLE_##prod =20 const struct hid_device_id wacom_ids[] =3D { { USB_DEVICE_WACOM(0x00) }, --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f53.google.com (mail-wm1-f53.google.com [209.85.128.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 442B042DFF7 for ; Wed, 10 Jun 2026 15:11:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.53 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104309; cv=none; b=kbsn2gweQOfUH+76dsu6kq0GGh4ms7BcVBv+wN7GuK0kG4DKFfCbZVeut/QjJQ0D+/W9boPS9u3pfqKoN9fDCf9IH0bpLFJ8SqHM9Bx3zJS4oZW/i0vJ1nIj7TH1nXXwXR5EXEwQBE00n0z8NZA+HyU5SV9szaBQiKDpNeUFs7s= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104309; c=relaxed/simple; bh=nOLWi0x+sHBQQKxXtuJ+nKnAv2yOVEeKhGv3JPfPYCs=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=pri2lFapHUS/tx8G3u5AeTPCdja416j4WXexh0rTvnU/cTrrw165uaWbpzJrd9pQgkaD8uhqnHqHRggwkd+RRvngxP/LGduYPyA8qzM36bav4eGWWnwFDPmWNiB4JF7N/0C9xL3TlkP1YlX1SrRf29jmgjHFK3TDe8ik2P1WsEU= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=ZbOd/od5; arc=none smtp.client-ip=209.85.128.53 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="ZbOd/od5" Received: by mail-wm1-f53.google.com with SMTP id 5b1f17b1804b1-490b613a17bso67853065e9.3 for ; Wed, 10 Jun 2026 08:11:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104306; x=1781709106; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=IvkxwS9FqCghLm59Hy/sSBR6UhIIHlG6JfFAvyc290A=; b=ZbOd/od5QJIXMsxUuOsjrGAgwtbh3hPk7P5BBqxHhiJ1unCKHCNySKuW8w3Dt2Ro+Q ziKKsDj6oWnBeGL+pUUewBQsik1OTyRLTNAeLVa9LE9LTGon/kdP8/1x298ZI/f4hSEq JRDaL8UOcH1DD7umZtidSCP1N/cI+VbvvRYXJ01/Vz/ujDUvldmG2NjA3z3oqnpb05Js FwEuQ0N4MsGwJncknAxkcYh3y/hn5E62k4NxvjJeGuNL1pJORuIc8Zq5LAQOS9JZbmJ+ rOw6szFDqIjCLPnH7MVPyUffUMKJenOvbwjcyNgXMZ4ThXzQnCOqQ7/YAHPxXrBeH3fy ilIQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104306; x=1781709106; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=IvkxwS9FqCghLm59Hy/sSBR6UhIIHlG6JfFAvyc290A=; b=Jdxp9QVx6pHS+x+372gw5N6XR9hsvipuvCrkRSYXctjqlhjpLPuvsfA0/dLcjEwt5O u7qdwJd4LvNMhwoYdvfU9+CLfaJhqW94oLIPQSNKMlUJHLGF8cE4O/y3QdExFeMuE/WK WB3sFnGTQD4wuCPCXeNKEIEL9/F2JIy10FJgF5tQWSnBPiDRzciXtYn57/l2ANBdIlHO cx2/mP5tUI4FirNQcqXDNfPmsqetSnakRhlsuRZBTkXf+8sguPgSg4n7KAuhjq+ELypn 9bYD8MEMETxROGuITFVsPUJ4QC5b2zdv/LFzM8Pds2cxxBBXVjcFbI2ZuCB/eqfi3LED ybIQ== X-Gm-Message-State: AOJu0Yw1I5Pa1PzPiK57fsmLvva73OwZsjuUrPusvMjmlCENIjRkf9en CuRvjevNAVWC+fBYHQz086015F+4j0koq1z+xi7t2ENRiRNnJmR0TaLGYD+ClnDNs8g= X-Gm-Gg: Acq92OEsmVXtJk2h/XtMWJsInTGer5afpp8vpokT1c8BL2TIoTfrn1ZAu5w8LntuVdP 2xo1J2KaZINQFMWjCN64JtjTi1nvenvffNa7udqXaulJc86Xp//a6WszyW5atinpGeizP0XeIj9 G2JPsOLjzqGRFdP7u5QKP/O5LcYd8rWW/V37WWydYa/Iv8sTBdPwxYCPV/Ij6hdgfzUxrHbR8m/ p0vWmmI7upgcczSlJV5QOVdQLujNZCyKWSA5jdmKGt9g34YCyWg0DEQlXXi1fo5J6qxGgI/YrbC zAkrAfGRCfxcCE9K3TATqiVJo54HN3+U8lzFJnJBbwm4/v1L6yOTjZrLa8NAjUKEHSbEVRkFAfP VFuKjpVDhLokV65UjURqIRvannEAR/8j9wO4BedsEODlihAx92K6YNwrxeU0HtB3sdW9YD5vxH0 k1Grg2USDmyGCf9hBImt6xG+LvlSV75SiYbS32QB6SU8JcNOA9HFE= X-Received: by 2002:a05:600c:34d6:b0:490:ccf2:6dca with SMTP id 5b1f17b1804b1-490d7223706mr94054015e9.20.1781104305699; Wed, 10 Jun 2026 08:11:45 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:45 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:34 +0100 Subject: [PATCH v2 11/12] HID: hid-core: sanitize user input in 'new_id_store' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-11-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=1454; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=nOLWi0x+sHBQQKxXtuJ+nKnAv2yOVEeKhGv3JPfPYCs=; b=gv82IWdwbIYExxBV08C4QIt43PqnAoIJx2tjm4l1rDFcodKv/Ayij2OfKSR2H57PnGcH/4xSZ CSpFw8N99d3Cj43HP7uivxoq7lDJ+2zTNufk5SHETtVbXnQ3KiBqnIi X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= Only accept 'driver_data' values that match an existing 'id_table' entry within the driver. This makes the field mandatory if the 'id_table' is defined in the HID module and disallows overriding pre-defined values within the driver module with arbitrary entries from the command line. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/hid-core.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c index 41a79e43c82b..e060e5ec4ea6 100644 --- a/drivers/hid/hid-core.c +++ b/drivers/hid/hid-core.c @@ -2647,6 +2647,8 @@ static ssize_t new_id_store(struct device_driver *drv= , const char *buf, size_t count) { struct hid_driver *hdrv =3D to_hid_driver(drv); + const struct hid_device_id *ids =3D hdrv->id_table; + struct hid_dynid *dynid; __u32 bus, vendor, product; unsigned long driver_data =3D 0; @@ -2657,6 +2659,22 @@ static ssize_t new_id_store(struct device_driver *dr= v, const char *buf, if (ret < 3) return -EINVAL; =20 + /* Only accept driver_data values that match an + * existing id_table entry + */ + if (ids) { + ret =3D -EINVAL; + while (ids->bus) { + if (driver_data =3D=3D ids->driver_data) { + ret =3D 0; + break; + } + ids++; + } + if (ret) /* No match */ + return ret; + } + dynid =3D kzalloc_obj(*dynid); if (!dynid) return -ENOMEM; --=20 2.43.0 From nobody Fri Jun 12 03:26:43 2026 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 82AF743C056 for ; Wed, 10 Jun 2026 15:11:48 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104311; cv=none; b=RrKm22HGlkWU742qkhdAph0b4hYyLZAQbdlxuFrA3Yl68gIwqEPsLqkrzESx9i3pLAjU6w23llH5N+5W0NyQ9GA1c1QwEKShLDO/cg+6NC/Nvj7yZik6htfMAiZ19Yv5jmL6uIhZiFcfo6bCEP1f+ud6NlNeo4E8FzkOOOjSmds= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1781104311; c=relaxed/simple; bh=/JHXLXf+tVNbMQlN5BvsoyYDgXbWBVdkBrUdjnjLmiI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MM0OWZmI7UiD0uYjqoxbW8iwgXnC0IEWvyiqCOrcZIELFnWMLhI+nYIDWLpMoL7nPrKCJs90xCbmMQwrcduh9NmjeWO/A+O1lvZtbq9BTfJQ949NHLAV+svrdGxpaa+lyZ1TnfDFjBOms91xPJPPTCMGg+fAtCujpA0Lxc/Z3Ss= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk; spf=pass smtp.mailfrom=thegoodpenguin.co.uk; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b=KOpfg3dO; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=thegoodpenguin.co.uk Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=thegoodpenguin-co-uk.20251104.gappssmtp.com header.i=@thegoodpenguin-co-uk.20251104.gappssmtp.com header.b="KOpfg3dO" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-490b211ee6aso53741055e9.3 for ; Wed, 10 Jun 2026 08:11:48 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=thegoodpenguin-co-uk.20251104.gappssmtp.com; s=20251104; t=1781104307; x=1781709107; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=k7a2QW9MDYnLOQRVaYzIR96anihlumGDf20y+QBnVuY=; b=KOpfg3dO4CCLG2GvWkD1cXjwPUGo1R5eixdQTHQdp2M1kOz6PsildZcLgzynXzdm9M JddqU6iA6usmp3UAerDuNRRVzaWb6CmqT53igKdtW2UsCM3xQYpnDApzh4gyvvtuy9TD QpbBb1xAuAZ9GTeAlP8FA/9AaVHQ3ta90QSZfTKJ9Q7rFhAp857H4qrM5zDM7jokl9J1 Cc328LCUut3y4Xsrz8wno9XwYig9NS87GzPK64veqzBPbKVEtck2IqwOh6FozWISDqNr ZHZT5yvYHEBl0nu6rY+mwd7BCCqNq42L/Rp9cJvNrrAergDDM85nDBEh4dIuNeO1jK0Y Yhog== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1781104307; x=1781709107; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=k7a2QW9MDYnLOQRVaYzIR96anihlumGDf20y+QBnVuY=; b=GcewHTg9NUP9PSPJWgDCeyZ06skU2EOSWNICNjOulGGzNf2zL5XOE6mM7x6x5p5ahf /YKnmERhG73IdB7CNTVKgsRt22hBhbUpxrhZ97VYUtFAyFwJtLMJ+jArym75r+sRzZrp eLD2gnljWdE2OTPmQjj0+eK1KpUNteg8IicjG/yR7jw8cGHolfVlDzHBJEgXk9h+xQ2C E66reKwjBtqYFAf6xCQHDVoTWrs5gC012JM0l/ZZAlGKDYqwY3bwvoAJEvhSXGsO9NtM utY/T4WHG7ZhZR+y2XhwfEa11f+v1PlhHZT/s7KPDPVq3s/rz7E3U7k5x8HMRf2pLech WGpg== X-Gm-Message-State: AOJu0YyC6zh70njFibx2d+OyZyhTr86kx0G8lvkspNyrAaaxIdSEc3HZ vpmKQi/ZdnXagXa3LpXSX0fzsP0cNpOFnjPasZvJYyyLEOFb/GMkel486Lq9A+qJpwY= X-Gm-Gg: Acq92OFYHh6StCd/Aq8sLQetZoOeCrcqk7jZAE9oV3WNunrPZwC7BN3CQynOJ0+5Y66 pl7fqlBr0o/qX9PM94sJ1tO/trNBoAKHwcvizTkiMHKh3oDumRm7b2Dn5cU7QkjONDQLkoiHmd8 O/qGX0GdAKHSyZvZUmEFUbzz9YiXUFDY3FKqbipv/7jO+wxSAZ1I4tI/ohpWvYPkUIzy3uAPuCO 4nX8T1k2+xv89WtGD7t7MLYJSVQlYFRzBnXMikAborfog+6nPUQWJAxQKbwvGTFL45jWY6K4jNm v7jj1VxbqVoo2ocFE2GMH8tPrvLdVv9n6J0fi4rQ7QVt6O/5DMNoMcUwtZePceHomhIEeghJxIZ Rk25CSyw4/1nKiR+OL+nSoIr/GsteCcKInNj5UdjgLdY7g306ATW8UxOfTzyniDOS1bs/cQTmS8 IMjHIh69ymMDtP6wV7A/SfZ3xiZvhqjekSjAQps39JGP9sHOIJPGQ= X-Received: by 2002:a05:600c:620c:b0:490:b28d:a6f9 with SMTP id 5b1f17b1804b1-490c256f1f1mr411248405e9.8.1781104306790; Wed, 10 Jun 2026 08:11:46 -0700 (PDT) Received: from [10.42.0.1] ([2a00:23c7:1d1a:9c01:1a6e:6004:a565:d3cf]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-490bc3cbfe4sm585537575e9.7.2026.06.10.08.11.45 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Jun 2026 08:11:46 -0700 (PDT) From: "Pawel Zalewski (The Capable Hub)" Date: Wed, 10 Jun 2026 16:11:35 +0100 Subject: [PATCH v2 12/12] HID: wacom: do not use 'driver_data' Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260610-mod-devicetable-hid_device_id-v2-12-a1d7473ccd9c@thegoodpenguin.co.uk> References: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> In-Reply-To: <20260610-mod-devicetable-hid_device_id-v2-0-a1d7473ccd9c@thegoodpenguin.co.uk> To: Jiri Kosina , Benjamin Tissoires , Ping Cheng , Jason Gerecke Cc: linux-kernel@vger.kernel.org, linux-input@vger.kernel.org, "Pawel Zalewski (The Capable Hub)" X-Mailer: b4 0.15.2 X-Developer-Signature: v=1; a=ed25519-sha256; t=1781104294; l=15808; i=pzalewski@thegoodpenguin.co.uk; s=20260430; h=from:subject:message-id; bh=/JHXLXf+tVNbMQlN5BvsoyYDgXbWBVdkBrUdjnjLmiI=; b=CzVXqQGg3nQInybSyDNieZnxIe6BBDqiqyA1Hm8kVFvgHk4pnPAOx0rann0YKdJlpDgre46Sz c9VDIx7TW1aAZCZgTZohmBM6dODviYxFQZ+k1lYFlhwg6EtInbItfv3 X-Developer-Key: i=pzalewski@thegoodpenguin.co.uk; a=ed25519; pk=vHq4n9IonORH2GTzLv8r6CWAFHzgfBuNkQPXA8NSly0= The driver data field is used to match the product with a 'wacom_features' struct via a remapped enum - since we already have to look it up at runtime and validate, we can just remove the remapping and look up the 'wacom_features' directly by the product id. This makes the code easier to edit and maintain. It also reduces the complexity of macro magic and keeps macros local to the module. Signed-off-by: Pawel Zalewski (The Capable Hub) --- drivers/hid/wacom.h | 178 +------------------------------------------ drivers/hid/wacom_sys.c | 7 +- drivers/hid/wacom_wac.c | 197 +++++++++++++++++++++++++++++++++++++++++++-= ---- drivers/hid/wacom_wac.h | 5 ++ 4 files changed, 186 insertions(+), 201 deletions(-) diff --git a/drivers/hid/wacom.h b/drivers/hid/wacom.h index 115d0eb23277..80a1a5d09e55 100644 --- a/drivers/hid/wacom.h +++ b/drivers/hid/wacom.h @@ -228,182 +228,6 @@ static inline u32 wacom_rescale(u32 value, u32 in_max= , u32 out_max) =20 extern const struct hid_device_id wacom_ids[]; =20 -/* This table lists all unique product IDs that are matched with - * a corresponging wacom_features_##prod struct. So any new product - * should be added to this table. - */ -#define HID_WACOM_PRODUCT_TABLE() \ - table_entry(0x00) \ - table_entry(0x03) \ - table_entry(0x10) \ - table_entry(0x11) \ - table_entry(0x12) \ - table_entry(0x13) \ - table_entry(0x14) \ - table_entry(0x15) \ - table_entry(0x16) \ - table_entry(0x17) \ - table_entry(0x18) \ - table_entry(0x19) \ - table_entry(0x20) \ - table_entry(0x21) \ - table_entry(0x22) \ - table_entry(0x23) \ - table_entry(0x24) \ - table_entry(0x26) \ - table_entry(0x27) \ - table_entry(0x28) \ - table_entry(0x29) \ - table_entry(0x2A) \ - table_entry(0x30) \ - table_entry(0x31) \ - table_entry(0x32) \ - table_entry(0x33) \ - table_entry(0x34) \ - table_entry(0x35) \ - table_entry(0x37) \ - table_entry(0x38) \ - table_entry(0x39) \ - table_entry(0x3F) \ - table_entry(0x41) \ - table_entry(0x42) \ - table_entry(0x43) \ - table_entry(0x44) \ - table_entry(0x45) \ - table_entry(0x47) \ - table_entry(0x57) \ - table_entry(0x59) \ - table_entry(0x5B) \ - table_entry(0x5D) \ - table_entry(0x5E) \ - table_entry(0x60) \ - table_entry(0x61) \ - table_entry(0x62) \ - table_entry(0x63) \ - table_entry(0x64) \ - table_entry(0x65) \ - table_entry(0x69) \ - table_entry(0x6A) \ - table_entry(0x6B) \ - table_entry(0x81) \ - table_entry(0x84) \ - table_entry(0x90) \ - table_entry(0x93) \ - table_entry(0x94) \ - table_entry(0x97) \ - table_entry(0x9A) \ - table_entry(0x9F) \ - table_entry(0xB0) \ - table_entry(0xB1) \ - table_entry(0xB2) \ - table_entry(0xB3) \ - table_entry(0xB4) \ - table_entry(0xB5) \ - table_entry(0xB7) \ - table_entry(0xB8) \ - table_entry(0xB9) \ - table_entry(0xBA) \ - table_entry(0xBB) \ - table_entry(0xBC) \ - table_entry(0xBD) \ - table_entry(0xC0) \ - table_entry(0xC2) \ - table_entry(0xC4) \ - table_entry(0xC5) \ - table_entry(0xC6) \ - table_entry(0xC7) \ - table_entry(0xCC) \ - table_entry(0xCE) \ - table_entry(0xD0) \ - table_entry(0xD1) \ - table_entry(0xD2) \ - table_entry(0xD3) \ - table_entry(0xD4) \ - table_entry(0xD5) \ - table_entry(0xD6) \ - table_entry(0xD7) \ - table_entry(0xD8) \ - table_entry(0xDA) \ - table_entry(0xDB) \ - table_entry(0xDD) \ - table_entry(0xDE) \ - table_entry(0xDF) \ - table_entry(0xE2) \ - table_entry(0xE3) \ - table_entry(0xE5) \ - table_entry(0xE6) \ - table_entry(0xEC) \ - table_entry(0xED) \ - table_entry(0xEF) \ - table_entry(0xF0) \ - table_entry(0xF4) \ - table_entry(0xF6) \ - table_entry(0xF8) \ - table_entry(0xFA) \ - table_entry(0xFB) \ - table_entry(0x100) \ - table_entry(0x101) \ - table_entry(0x10D) \ - table_entry(0x10E) \ - table_entry(0x10F) \ - table_entry(0x116) \ - table_entry(0x12C) \ - table_entry(0x300) \ - table_entry(0x301) \ - table_entry(0x302) \ - table_entry(0x303) \ - table_entry(0x304) \ - table_entry(0x307) \ - table_entry(0x309) \ - table_entry(0x30A) \ - table_entry(0x30C) \ - table_entry(0x30E) \ - table_entry(0x314) \ - table_entry(0x315) \ - table_entry(0x317) \ - table_entry(0x318) \ - table_entry(0x319) \ - table_entry(0x323) \ - table_entry(0x325) \ - table_entry(0x326) \ - table_entry(0x32A) \ - table_entry(0x32B) \ - table_entry(0x32C) \ - table_entry(0x32F) \ - table_entry(0x331) \ - table_entry(0x333) \ - table_entry(0x335) \ - table_entry(0x336) \ - table_entry(0x33B) \ - table_entry(0x33C) \ - table_entry(0x33D) \ - table_entry(0x33E) \ - table_entry(0x343) \ - table_entry(0x360) \ - table_entry(0x361) \ - table_entry(0x377) \ - table_entry(0x379) \ - table_entry(0x37A) \ - table_entry(0x37B) \ - table_entry(0x393) \ - table_entry(0x3c6) \ - table_entry(0x3c8) \ - table_entry(0x3dd) \ - table_entry(0x4001) \ - table_entry(0x4004) \ - table_entry(0x5000) \ - table_entry(0x5002) \ - table_entry(0x6004) \ - table_entry(HID_ANY_ID) \ - -enum wacom_features_table_index { -#define table_entry(product) \ - WACOM_FEATURE_TABLE_##product, - HID_WACOM_PRODUCT_TABLE() - NUM_OF_WACOM_FEATURES_IN_TABLE -#undef table_entry -}; - void wacom_wac_irq(struct wacom_wac *wacom_wac, size_t len); void wacom_setup_device_quirks(struct wacom *wacom); int wacom_setup_pen_input_capabilities(struct input_dev *input_dev, @@ -425,5 +249,5 @@ struct wacom_led *wacom_led_next(struct wacom *wacom, s= truct wacom_led *cur); int wacom_equivalent_usage(int usage); int wacom_initialize_leds(struct wacom *wacom); void wacom_idleprox_timeout(struct timer_list *list); -const struct wacom_features *get_wacom_features(enum wacom_features_table_= index index); +const struct wacom_features *get_wacom_features(u32 product); #endif diff --git a/drivers/hid/wacom_sys.c b/drivers/hid/wacom_sys.c index dd3ed1f8134b..1d5bdb4da29c 100644 --- a/drivers/hid/wacom_sys.c +++ b/drivers/hid/wacom_sys.c @@ -2561,7 +2561,7 @@ static void wacom_wireless_work(struct work_struct *w= ork) } =20 /* Stylus interface */ - const struct wacom_features *features =3D get_wacom_features(id->driver_= data); + const struct wacom_features *features =3D get_wacom_features(id->product= ); =20 if (!features) { hid_err(wacom->hdev, "could not get wacom features.\n"); @@ -2833,9 +2833,6 @@ static int wacom_probe(struct hid_device *hdev, struct wacom_features *features; int error; =20 - if (!id->driver_data) - return -EINVAL; - hdev->quirks |=3D HID_QUIRK_NO_INIT_REPORTS; =20 /* hid-core sets this quirk for the boot interface */ @@ -2850,7 +2847,7 @@ static int wacom_probe(struct hid_device *hdev, =20 wacom_wac =3D &wacom->wacom_wac; =20 - const struct wacom_features *id_features =3D get_wacom_features(id->drive= r_data); + const struct wacom_features *id_features =3D get_wacom_features(id->produ= ct); =20 if (!id_features) { hid_err(wacom->hdev, "could not get wacom id_features.\n"); diff --git a/drivers/hid/wacom_wac.c b/drivers/hid/wacom_wac.c index d0a864d52509..e066aa334837 100644 --- a/drivers/hid/wacom_wac.c +++ b/drivers/hid/wacom_wac.c @@ -4945,40 +4945,199 @@ static const struct wacom_features wacom_features_= HID_ANY_ID =3D static const struct wacom_features wacom_features_0x94 =3D { "Wacom Bootloader", .type =3D BOOTLOADER }; =20 -static const struct wacom_features *wacom_features_table[] =3D { -#define table_entry(product) \ - [WACOM_FEATURE_TABLE_##product] =3D &wacom_features_##product, - HID_WACOM_PRODUCT_TABLE() -#undef table_entry +#define WACOM_FEATURE_TABLE_ENTRY(product_id) \ + {.product =3D product_id, .wacom_features_ptr =3D &wacom_features_##produ= ct_id} + +static const struct wacom_features_table_item wacom_features_table[] =3D { + WACOM_FEATURE_TABLE_ENTRY(0x00), + WACOM_FEATURE_TABLE_ENTRY(0x03), + WACOM_FEATURE_TABLE_ENTRY(0x10), + WACOM_FEATURE_TABLE_ENTRY(0x11), + WACOM_FEATURE_TABLE_ENTRY(0x12), + WACOM_FEATURE_TABLE_ENTRY(0x13), + WACOM_FEATURE_TABLE_ENTRY(0x14), + WACOM_FEATURE_TABLE_ENTRY(0x15), + WACOM_FEATURE_TABLE_ENTRY(0x16), + WACOM_FEATURE_TABLE_ENTRY(0x17), + WACOM_FEATURE_TABLE_ENTRY(0x18), + WACOM_FEATURE_TABLE_ENTRY(0x19), + WACOM_FEATURE_TABLE_ENTRY(0x20), + WACOM_FEATURE_TABLE_ENTRY(0x21), + WACOM_FEATURE_TABLE_ENTRY(0x22), + WACOM_FEATURE_TABLE_ENTRY(0x23), + WACOM_FEATURE_TABLE_ENTRY(0x24), + WACOM_FEATURE_TABLE_ENTRY(0x26), + WACOM_FEATURE_TABLE_ENTRY(0x27), + WACOM_FEATURE_TABLE_ENTRY(0x28), + WACOM_FEATURE_TABLE_ENTRY(0x29), + WACOM_FEATURE_TABLE_ENTRY(0x2A), + WACOM_FEATURE_TABLE_ENTRY(0x30), + WACOM_FEATURE_TABLE_ENTRY(0x31), + WACOM_FEATURE_TABLE_ENTRY(0x32), + WACOM_FEATURE_TABLE_ENTRY(0x33), + WACOM_FEATURE_TABLE_ENTRY(0x34), + WACOM_FEATURE_TABLE_ENTRY(0x35), + WACOM_FEATURE_TABLE_ENTRY(0x37), + WACOM_FEATURE_TABLE_ENTRY(0x38), + WACOM_FEATURE_TABLE_ENTRY(0x39), + WACOM_FEATURE_TABLE_ENTRY(0x3F), + WACOM_FEATURE_TABLE_ENTRY(0x41), + WACOM_FEATURE_TABLE_ENTRY(0x42), + WACOM_FEATURE_TABLE_ENTRY(0x43), + WACOM_FEATURE_TABLE_ENTRY(0x44), + WACOM_FEATURE_TABLE_ENTRY(0x45), + WACOM_FEATURE_TABLE_ENTRY(0x47), + WACOM_FEATURE_TABLE_ENTRY(0x57), + WACOM_FEATURE_TABLE_ENTRY(0x59), + WACOM_FEATURE_TABLE_ENTRY(0x5B), + WACOM_FEATURE_TABLE_ENTRY(0x5D), + WACOM_FEATURE_TABLE_ENTRY(0x5E), + WACOM_FEATURE_TABLE_ENTRY(0x60), + WACOM_FEATURE_TABLE_ENTRY(0x61), + WACOM_FEATURE_TABLE_ENTRY(0x62), + WACOM_FEATURE_TABLE_ENTRY(0x63), + WACOM_FEATURE_TABLE_ENTRY(0x64), + WACOM_FEATURE_TABLE_ENTRY(0x65), + WACOM_FEATURE_TABLE_ENTRY(0x69), + WACOM_FEATURE_TABLE_ENTRY(0x6A), + WACOM_FEATURE_TABLE_ENTRY(0x6B), + WACOM_FEATURE_TABLE_ENTRY(0x81), + WACOM_FEATURE_TABLE_ENTRY(0x84), + WACOM_FEATURE_TABLE_ENTRY(0x90), + WACOM_FEATURE_TABLE_ENTRY(0x93), + WACOM_FEATURE_TABLE_ENTRY(0x94), + WACOM_FEATURE_TABLE_ENTRY(0x97), + WACOM_FEATURE_TABLE_ENTRY(0x9A), + WACOM_FEATURE_TABLE_ENTRY(0x9F), + WACOM_FEATURE_TABLE_ENTRY(0xB0), + WACOM_FEATURE_TABLE_ENTRY(0xB1), + WACOM_FEATURE_TABLE_ENTRY(0xB2), + WACOM_FEATURE_TABLE_ENTRY(0xB3), + WACOM_FEATURE_TABLE_ENTRY(0xB4), + WACOM_FEATURE_TABLE_ENTRY(0xB5), + WACOM_FEATURE_TABLE_ENTRY(0xB7), + WACOM_FEATURE_TABLE_ENTRY(0xB8), + WACOM_FEATURE_TABLE_ENTRY(0xB9), + WACOM_FEATURE_TABLE_ENTRY(0xBA), + WACOM_FEATURE_TABLE_ENTRY(0xBB), + WACOM_FEATURE_TABLE_ENTRY(0xBC), + WACOM_FEATURE_TABLE_ENTRY(0xBD), + WACOM_FEATURE_TABLE_ENTRY(0xC0), + WACOM_FEATURE_TABLE_ENTRY(0xC2), + WACOM_FEATURE_TABLE_ENTRY(0xC4), + WACOM_FEATURE_TABLE_ENTRY(0xC5), + WACOM_FEATURE_TABLE_ENTRY(0xC6), + WACOM_FEATURE_TABLE_ENTRY(0xC7), + WACOM_FEATURE_TABLE_ENTRY(0xCC), + WACOM_FEATURE_TABLE_ENTRY(0xCE), + WACOM_FEATURE_TABLE_ENTRY(0xD0), + WACOM_FEATURE_TABLE_ENTRY(0xD1), + WACOM_FEATURE_TABLE_ENTRY(0xD2), + WACOM_FEATURE_TABLE_ENTRY(0xD3), + WACOM_FEATURE_TABLE_ENTRY(0xD4), + WACOM_FEATURE_TABLE_ENTRY(0xD5), + WACOM_FEATURE_TABLE_ENTRY(0xD6), + WACOM_FEATURE_TABLE_ENTRY(0xD7), + WACOM_FEATURE_TABLE_ENTRY(0xD8), + WACOM_FEATURE_TABLE_ENTRY(0xDA), + WACOM_FEATURE_TABLE_ENTRY(0xDB), + WACOM_FEATURE_TABLE_ENTRY(0xDD), + WACOM_FEATURE_TABLE_ENTRY(0xDE), + WACOM_FEATURE_TABLE_ENTRY(0xDF), + WACOM_FEATURE_TABLE_ENTRY(0xE2), + WACOM_FEATURE_TABLE_ENTRY(0xE3), + WACOM_FEATURE_TABLE_ENTRY(0xE5), + WACOM_FEATURE_TABLE_ENTRY(0xE6), + WACOM_FEATURE_TABLE_ENTRY(0xEC), + WACOM_FEATURE_TABLE_ENTRY(0xED), + WACOM_FEATURE_TABLE_ENTRY(0xEF), + WACOM_FEATURE_TABLE_ENTRY(0xF0), + WACOM_FEATURE_TABLE_ENTRY(0xF4), + WACOM_FEATURE_TABLE_ENTRY(0xF6), + WACOM_FEATURE_TABLE_ENTRY(0xF8), + WACOM_FEATURE_TABLE_ENTRY(0xFA), + WACOM_FEATURE_TABLE_ENTRY(0xFB), + WACOM_FEATURE_TABLE_ENTRY(0x100), + WACOM_FEATURE_TABLE_ENTRY(0x101), + WACOM_FEATURE_TABLE_ENTRY(0x10D), + WACOM_FEATURE_TABLE_ENTRY(0x10E), + WACOM_FEATURE_TABLE_ENTRY(0x10F), + WACOM_FEATURE_TABLE_ENTRY(0x116), + WACOM_FEATURE_TABLE_ENTRY(0x12C), + WACOM_FEATURE_TABLE_ENTRY(0x300), + WACOM_FEATURE_TABLE_ENTRY(0x301), + WACOM_FEATURE_TABLE_ENTRY(0x302), + WACOM_FEATURE_TABLE_ENTRY(0x303), + WACOM_FEATURE_TABLE_ENTRY(0x304), + WACOM_FEATURE_TABLE_ENTRY(0x307), + WACOM_FEATURE_TABLE_ENTRY(0x309), + WACOM_FEATURE_TABLE_ENTRY(0x30A), + WACOM_FEATURE_TABLE_ENTRY(0x30C), + WACOM_FEATURE_TABLE_ENTRY(0x30E), + WACOM_FEATURE_TABLE_ENTRY(0x314), + WACOM_FEATURE_TABLE_ENTRY(0x315), + WACOM_FEATURE_TABLE_ENTRY(0x317), + WACOM_FEATURE_TABLE_ENTRY(0x318), + WACOM_FEATURE_TABLE_ENTRY(0x319), + WACOM_FEATURE_TABLE_ENTRY(0x323), + WACOM_FEATURE_TABLE_ENTRY(0x325), + WACOM_FEATURE_TABLE_ENTRY(0x326), + WACOM_FEATURE_TABLE_ENTRY(0x32A), + WACOM_FEATURE_TABLE_ENTRY(0x32B), + WACOM_FEATURE_TABLE_ENTRY(0x32C), + WACOM_FEATURE_TABLE_ENTRY(0x32F), + WACOM_FEATURE_TABLE_ENTRY(0x331), + WACOM_FEATURE_TABLE_ENTRY(0x333), + WACOM_FEATURE_TABLE_ENTRY(0x335), + WACOM_FEATURE_TABLE_ENTRY(0x336), + WACOM_FEATURE_TABLE_ENTRY(0x33B), + WACOM_FEATURE_TABLE_ENTRY(0x33C), + WACOM_FEATURE_TABLE_ENTRY(0x33D), + WACOM_FEATURE_TABLE_ENTRY(0x33E), + WACOM_FEATURE_TABLE_ENTRY(0x343), + WACOM_FEATURE_TABLE_ENTRY(0x360), + WACOM_FEATURE_TABLE_ENTRY(0x361), + WACOM_FEATURE_TABLE_ENTRY(0x377), + WACOM_FEATURE_TABLE_ENTRY(0x379), + WACOM_FEATURE_TABLE_ENTRY(0x37A), + WACOM_FEATURE_TABLE_ENTRY(0x37B), + WACOM_FEATURE_TABLE_ENTRY(0x393), + WACOM_FEATURE_TABLE_ENTRY(0x3c6), + WACOM_FEATURE_TABLE_ENTRY(0x3c8), + WACOM_FEATURE_TABLE_ENTRY(0x3dd), + WACOM_FEATURE_TABLE_ENTRY(0x4001), + WACOM_FEATURE_TABLE_ENTRY(0x4004), + WACOM_FEATURE_TABLE_ENTRY(0x5000), + WACOM_FEATURE_TABLE_ENTRY(0x5002), + WACOM_FEATURE_TABLE_ENTRY(0x6004), + WACOM_FEATURE_TABLE_ENTRY(HID_ANY_ID), }; =20 -const struct wacom_features *get_wacom_features(enum wacom_features_table_= index index) +const struct wacom_features *get_wacom_features(u32 product) { - if (index >=3D NUM_OF_WACOM_FEATURES_IN_TABLE) - return NULL; + int i; =20 - return wacom_features_table[index]; + for (i =3D 0; i < ARRAY_SIZE(wacom_features_table); i++) + if (wacom_features_table[i].product =3D=3D product) + return wacom_features_table[i].wacom_features_ptr; + + return NULL; } =20 #define USB_DEVICE_WACOM(prod) \ - HID_DEVICE(BUS_USB, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D WACOM_FEATURE_TABLE_##prod + HID_DEVICE(BUS_USB, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod) =20 #define BT_DEVICE_WACOM(prod) \ - HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D WACOM_FEATURE_TABLE_##prod + HID_DEVICE(BUS_BLUETOOTH, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod) =20 #define I2C_DEVICE_WACOM(prod) \ - HID_DEVICE(BUS_I2C, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D WACOM_FEATURE_TABLE_##prod + HID_DEVICE(BUS_I2C, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod) =20 #define PCI_DEVICE_WACOM(prod) \ - HID_DEVICE(BUS_PCI, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod),\ - .driver_data =3D WACOM_FEATURE_TABLE_##prod + HID_DEVICE(BUS_PCI, HID_GROUP_WACOM, USB_VENDOR_ID_WACOM, prod) =20 #define USB_DEVICE_LENOVO(prod) \ - HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, prod), \ - .driver_data =3D WACOM_FEATURE_TABLE_##prod + HID_USB_DEVICE(USB_VENDOR_ID_LENOVO, prod) =20 const struct hid_device_id wacom_ids[] =3D { { USB_DEVICE_WACOM(0x00) }, diff --git a/drivers/hid/wacom_wac.h b/drivers/hid/wacom_wac.h index 126bec6e5c0c..ecb85c459d9a 100644 --- a/drivers/hid/wacom_wac.h +++ b/drivers/hid/wacom_wac.h @@ -279,6 +279,11 @@ struct wacom_features { int hid_type; }; =20 +struct wacom_features_table_item { + u32 product; + const struct wacom_features *wacom_features_ptr; +}; + struct wacom_shared { bool stylus_in_proximity; bool touch_down; --=20 2.43.0