On 10/10/26 12:24 PM, Ryoya Tsujita wrote:
The 2024 USB-C Magic Keyboards (05ac:0320, 05ac:0321 and 05ac:0322)
have a Device Management HID interface as interface 0 and the Boot
Keyboard as interface 1. U-Boot only looks at interface 0 when matching
a driver, so these keyboards are bound to the generic USB device driver
and do not work as a console input device.
Match them by vendor and product ID so that usb_kbd binds to them.
probe_usb_keyboard() already looks through all interfaces and uses the
Boot Keyboard on interface 1.
Tested with a 05ac:0320 keyboard (US layout, no Touch ID) on qemu_arm64
with USB passthrough. Without this patch the device is bound to the
generic driver and no usbkbd console device is registered; with it,
usb_kbd is bound and keyboard input works.
05ac:0321 and 05ac:0322 are untested. The IDs are taken from Linux's
drivers/hid/hid-ids.h.
Signed-off-by: Ryoya Tsujita <[email protected]>
Reviewed-by: Marek Vasut <[email protected]>
---
common/usb_kbd.c | 15 +++++++++++++++
1 file changed, 15 insertions(+)
diff --git a/common/usb_kbd.c b/common/usb_kbd.c
index 36107a3b278..25d8a0dff64 100644
--- a/common/usb_kbd.c
+++ b/common/usb_kbd.c
@@ -30,6 +30,9 @@
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021 0x029c
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021 0x029a
#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021 0x029f
+#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024 0x0320
+#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2024 0x0321
+#define USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2024 0x0322
#define USB_VENDOR_ID_KEYCHRON 0x3434
@@ -724,6 +727,18 @@ static const struct usb_device_id kbd_id_table[] = {
USB_DEVICE(USB_VENDOR_ID_APPLE,
USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021),
},
+ {
+ USB_DEVICE(USB_VENDOR_ID_APPLE,
+ USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2024),
+ },
+ {
+ USB_DEVICE(USB_VENDOR_ID_APPLE,
+ USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2024),
+ },
+ {
+ USB_DEVICE(USB_VENDOR_ID_APPLE,
+ USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2024),
+ },
{ } /* Terminating entry */
};