diff --git a/1016-Documentation-leds-standardise-keyboard-backlight-le.patch b/1016-Documentation-leds-standardise-keyboard-backlight-le.patch deleted file mode 100644 index c96cd2b..0000000 --- a/1016-Documentation-leds-standardise-keyboard-backlight-le.patch +++ /dev/null @@ -1,38 +0,0 @@ -From e34c6d09241ba826a6e9b2b0e50e306b273b7bda Mon Sep 17 00:00:00 2001 -From: Orlando Chamberlain -Date: Thu, 16 Feb 2023 12:32:34 +1100 -Subject: [PATCH 5/8] Documentation: leds: standardise keyboard backlight led - names - -Advice use of either "input*:*:kbd_backlight" or ":*:kbd_backlight". We -don't want people using vendor or product name (e.g. "smc", "apple", -"asus") as this information is available from sysfs anyway, and it made the -folder names inconsistent. - -Signed-off-by: Orlando Chamberlain ---- - Documentation/leds/well-known-leds.txt | 8 ++++++++ - 1 file changed, 8 insertions(+) - -diff --git a/Documentation/leds/well-known-leds.txt b/Documentation/leds/well-known-leds.txt -index 2160382c86be..4e5429fce4d8 100644 ---- a/Documentation/leds/well-known-leds.txt -+++ b/Documentation/leds/well-known-leds.txt -@@ -44,6 +44,14 @@ Legacy: "lp5523:kb{1,2,3,4,5,6}" (Nokia N900) - - Frontlight/backlight of main keyboard. - -+Good: ":*:kbd_backlight" -+Good: "input*:*:kbd_backlight" -+Legacy: "*:*:kbd_backlight" -+ -+Many drivers have the vendor or product name as the first field of the led name, -+this makes names inconsistent and is redundant as that information is already in -+sysfs. -+ - Legacy: "button-backlight" (Motorola Droid 4) - - Some phones have touch buttons below screen; it is different from main --- -2.39.1 - diff --git a/1016-HID-apple-Add-support-for-magic-keyboard-backlight-o.patch b/1016-HID-apple-Add-support-for-magic-keyboard-backlight-o.patch new file mode 100644 index 0000000..efac9a6 --- /dev/null +++ b/1016-HID-apple-Add-support-for-magic-keyboard-backlight-o.patch @@ -0,0 +1,172 @@ +From 394ba612f9419ec5bfebbffb72212fd3b2094986 Mon Sep 17 00:00:00 2001 +From: Orlando Chamberlain +Date: Wed, 3 Jul 2024 17:54:11 +0000 +Subject: HID: apple: Add support for magic keyboard backlight on T2 Macs + +Unlike T2 Macs with Butterfly keyboard, who have their keyboard backlight +on the USB device the T2 Macs with Magic keyboard have their backlight on +the Touchbar backlight device (05ac:8102). + +Support for Butterfly keyboards has already been added in +commit 9018eacbe623 ("HID: apple: Add support for keyboard backlight on +certain T2 Macs.") This patch adds support for the Magic keyboards. + +Signed-off-by: Orlando Chamberlain +Co-developed-by: Aditya Garg +Signed-off-by: Aditya Garg +Link: https://patch.msgid.link/E1D444EA-7FD0-42DA-B198-50B0F03298FB@live.com +Signed-off-by: Benjamin Tissoires +--- + drivers/hid/hid-apple.c | 87 +++++++++++++++++++++++++++++++++++++++++++++++++ + 1 file changed, 87 insertions(+) + +diff --git a/drivers/hid/hid-apple.c b/drivers/hid/hid-apple.c +index bd022e0043569c..6dedb84d7cc397 100644 +--- a/drivers/hid/hid-apple.c ++++ b/drivers/hid/hid-apple.c +@@ -8,6 +8,8 @@ + * Copyright (c) 2006-2007 Jiri Kosina + * Copyright (c) 2008 Jiri Slaby + * Copyright (c) 2019 Paul Pawlowski ++ * Copyright (c) 2023 Orlando Chamberlain ++ * Copyright (c) 2024 Aditya Garg + */ + + /* +@@ -23,6 +25,7 @@ + #include + #include + #include ++#include + + #include "hid-ids.h" + +@@ -38,12 +41,17 @@ + #define APPLE_RDESC_BATTERY BIT(9) + #define APPLE_BACKLIGHT_CTL BIT(10) + #define APPLE_IS_NON_APPLE BIT(11) ++#define APPLE_MAGIC_BACKLIGHT BIT(12) + + #define APPLE_FLAG_FKEY 0x01 + + #define HID_COUNTRY_INTERNATIONAL_ISO 13 + #define APPLE_BATTERY_TIMEOUT_MS 60000 + ++#define HID_USAGE_MAGIC_BL 0xff00000f ++#define APPLE_MAGIC_REPORT_ID_POWER 3 ++#define APPLE_MAGIC_REPORT_ID_BRIGHTNESS 1 ++ + static unsigned int fnmode = 3; + module_param(fnmode, uint, 0644); + MODULE_PARM_DESC(fnmode, "Mode of fn key on Apple keyboards (0 = disabled, " +@@ -81,6 +89,12 @@ struct apple_sc_backlight { + struct hid_device *hdev; + }; + ++struct apple_magic_backlight { ++ struct led_classdev cdev; ++ struct hid_report *brightness; ++ struct hid_report *power; ++}; ++ + struct apple_sc { + struct hid_device *hdev; + unsigned long quirks; +@@ -822,6 +836,66 @@ cleanup_and_exit: + return ret; + } + ++static void apple_magic_backlight_report_set(struct hid_report *rep, s32 value, u8 rate) ++{ ++ rep->field[0]->value[0] = value; ++ rep->field[1]->value[0] = 0x5e; /* Mimic Windows */ ++ rep->field[1]->value[0] |= rate << 8; ++ ++ hid_hw_request(rep->device, rep, HID_REQ_SET_REPORT); ++} ++ ++static void apple_magic_backlight_set(struct apple_magic_backlight *backlight, ++ int brightness, char rate) ++{ ++ apple_magic_backlight_report_set(backlight->power, brightness ? 1 : 0, rate); ++ if (brightness) ++ apple_magic_backlight_report_set(backlight->brightness, brightness, rate); ++} ++ ++static int apple_magic_backlight_led_set(struct led_classdev *led_cdev, ++ enum led_brightness brightness) ++{ ++ struct apple_magic_backlight *backlight = container_of(led_cdev, ++ struct apple_magic_backlight, cdev); ++ ++ apple_magic_backlight_set(backlight, brightness, 1); ++ return 0; ++} ++ ++static int apple_magic_backlight_init(struct hid_device *hdev) ++{ ++ struct apple_magic_backlight *backlight; ++ struct hid_report_enum *report_enum; ++ ++ /* ++ * Ensure this usb endpoint is for the keyboard backlight, not touchbar ++ * backlight. ++ */ ++ if (hdev->collection[0].usage != HID_USAGE_MAGIC_BL) ++ return -ENODEV; ++ ++ backlight = devm_kzalloc(&hdev->dev, sizeof(*backlight), GFP_KERNEL); ++ if (!backlight) ++ return -ENOMEM; ++ ++ report_enum = &hdev->report_enum[HID_FEATURE_REPORT]; ++ backlight->brightness = report_enum->report_id_hash[APPLE_MAGIC_REPORT_ID_BRIGHTNESS]; ++ backlight->power = report_enum->report_id_hash[APPLE_MAGIC_REPORT_ID_POWER]; ++ ++ if (!backlight->brightness || !backlight->power) ++ return -ENODEV; ++ ++ backlight->cdev.name = ":white:" LED_FUNCTION_KBD_BACKLIGHT; ++ backlight->cdev.max_brightness = backlight->brightness->field[0]->logical_maximum; ++ backlight->cdev.brightness_set_blocking = apple_magic_backlight_led_set; ++ ++ apple_magic_backlight_set(backlight, 0, 0); ++ ++ return devm_led_classdev_register(&hdev->dev, &backlight->cdev); ++ ++} ++ + static int apple_probe(struct hid_device *hdev, + const struct hid_device_id *id) + { +@@ -860,7 +934,18 @@ static int apple_probe(struct hid_device *hdev, + if (quirks & APPLE_BACKLIGHT_CTL) + apple_backlight_init(hdev); + ++ if (quirks & APPLE_MAGIC_BACKLIGHT) { ++ ret = apple_magic_backlight_init(hdev); ++ if (ret) ++ goto out_err; ++ } ++ + return 0; ++ ++out_err: ++ del_timer_sync(&asc->battery_timer); ++ hid_hw_stop(hdev); ++ return ret; + } + + static void apple_remove(struct hid_device *hdev) +@@ -1073,6 +1158,8 @@ static const struct hid_device_id apple_devices[] = { + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK | APPLE_RDESC_BATTERY }, + { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_NUMPAD_2021), + .driver_data = APPLE_HAS_FN | APPLE_ISO_TILDE_QUIRK }, ++ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT), ++ .driver_data = APPLE_MAGIC_BACKLIGHT }, + + { } + }; +-- +cgit 1.2.3-korg + diff --git a/1017-HID-hid-apple-magic-backlight-Add-driver-for-keyboar.patch b/1017-HID-hid-apple-magic-backlight-Add-driver-for-keyboar.patch deleted file mode 100644 index eeafa08..0000000 --- a/1017-HID-hid-apple-magic-backlight-Add-driver-for-keyboar.patch +++ /dev/null @@ -1,207 +0,0 @@ -From c124f5401040d02abd6d349979be29acd1e88545 Mon Sep 17 00:00:00 2001 -From: Orlando Chamberlain -Date: Fri, 10 Feb 2023 23:14:31 +1100 -Subject: [PATCH 6/8] HID: hid-apple-magic-backlight: Add driver for keyboard - backlight on internal Magic Keyboards -MIME-Version: 1.0 -Content-Type: text/plain; charset=UTF-8 -Content-Transfer-Encoding: 8bit - -This driver adds support for the keyboard backlight on Intel T2 Macs -with internal Magic Keyboards (MacBookPro16,x and MacBookAir9,1) - -Co-developed-by: Kerem Karabay -Signed-off-by: Kerem Karabay -Signed-off-by: Orlando Chamberlain -Reviewed-by: Andy Shevchenko -Reviewed-by: Thomas Weißschuh ---- - MAINTAINERS | 6 ++ - drivers/hid/Kconfig | 13 +++ - drivers/hid/Makefile | 1 + - drivers/hid/hid-apple-magic-backlight.c | 120 ++++++++++++++++++++++++ - 4 files changed, 140 insertions(+) - create mode 100644 drivers/hid/hid-apple-magic-backlight.c - -diff --git a/MAINTAINERS b/MAINTAINERS -index dfc63d257..9148bda0a 100644 ---- a/MAINTAINERS -+++ b/MAINTAINERS -@@ -9169,6 +9169,12 @@ L: linux-input@vger.kernel.org - S: Maintained - F: drivers/hid/hid-appletb-* - -+HID APPLE MAGIC BACKLIGHT DRIVER -+M: Orlando Chamberlain -+L: linux-input@vger.kernel.org -+S: Maintained -+F: drivers/hid/apple-magic-backlight.c -+ - HID CORE LAYER - M: Jiri Kosina - M: Benjamin Tissoires -diff --git a/drivers/hid/Kconfig b/drivers/hid/Kconfig -index 4e238df87..83fbab6d4 100644 ---- a/drivers/hid/Kconfig -+++ b/drivers/hid/Kconfig -@@ -169,6 +169,19 @@ config HID_APPLETB_KBD - To compile this driver as a module, choose M here: the - module will be called hid-appletb-kbd. - -+config HID_APPLE_MAGIC_BACKLIGHT -+ tristate "Apple Magic Keyboard Backlight" -+ depends on USB_HID -+ depends on LEDS_CLASS -+ depends on NEW_LEDS -+ help -+ Say Y here if you want support for the keyboard backlight on Macs with -+ the magic keyboard (MacBookPro16,x and MacBookAir9,1). Note that this -+ driver is not for external magic keyboards. -+ -+ To compile this driver as a module, choose M here: the -+ module will be called hid-apple-magic-backlight. -+ - config HID_ASUS - tristate "Asus" - depends on USB_HID -diff --git a/drivers/hid/Makefile b/drivers/hid/Makefile -index 5b60015fd..581f5e720 100644 ---- a/drivers/hid/Makefile -+++ b/drivers/hid/Makefile -@@ -31,6 +31,7 @@ obj-$(CONFIG_HID_APPLE) += hid-apple.o - obj-$(CONFIG_HID_APPLEIR) += hid-appleir.o - obj-$(CONFIG_HID_APPLETB_BL) += hid-appletb-bl.o - obj-$(CONFIG_HID_APPLETB_KBD) += hid-appletb-kbd.o -+obj-$(CONFIG_HID_APPLE_MAGIC_BACKLIGHT) += hid-apple-magic-backlight.o - obj-$(CONFIG_HID_CREATIVE_SB0540) += hid-creative-sb0540.o - obj-$(CONFIG_HID_ASUS) += hid-asus.o - obj-$(CONFIG_HID_AUREAL) += hid-aureal.o -diff --git a/drivers/hid/hid-apple-magic-backlight.c b/drivers/hid/hid-apple-magic-backlight.c -new file mode 100644 -index 000000000..f0fc02ff3 ---- /dev/null -+++ b/drivers/hid/hid-apple-magic-backlight.c -@@ -0,0 +1,120 @@ -+// SPDX-License-Identifier: GPL-2.0 -+/* -+ * Apple Magic Keyboard Backlight Driver -+ * -+ * For Intel Macs with internal Magic Keyboard (MacBookPro16,1-4 and MacBookAir9,1) -+ * -+ * Copyright (c) 2022 Kerem Karabay -+ * Copyright (c) 2023 Orlando Chamberlain -+ */ -+ -+#include -+#include -+#include -+#include -+#include -+ -+#include "hid-ids.h" -+ -+#define HID_USAGE_MAGIC_BL 0xff00000f -+ -+#define APPLE_MAGIC_REPORT_ID_POWER 3 -+#define APPLE_MAGIC_REPORT_ID_BRIGHTNESS 1 -+ -+struct apple_magic_backlight { -+ struct led_classdev cdev; -+ struct hid_report *brightness; -+ struct hid_report *power; -+}; -+ -+static void apple_magic_backlight_report_set(struct hid_report *rep, s32 value, u8 rate) -+{ -+ rep->field[0]->value[0] = value; -+ rep->field[1]->value[0] = 0x5e; /* Mimic Windows */ -+ rep->field[1]->value[0] |= rate << 8; -+ -+ hid_hw_request(rep->device, rep, HID_REQ_SET_REPORT); -+} -+ -+static void apple_magic_backlight_set(struct apple_magic_backlight *backlight, -+ int brightness, char rate) -+{ -+ apple_magic_backlight_report_set(backlight->power, brightness ? 1 : 0, rate); -+ if (brightness) -+ apple_magic_backlight_report_set(backlight->brightness, brightness, rate); -+} -+ -+static int apple_magic_backlight_led_set(struct led_classdev *led_cdev, -+ enum led_brightness brightness) -+{ -+ struct apple_magic_backlight *backlight = container_of(led_cdev, -+ struct apple_magic_backlight, cdev); -+ -+ apple_magic_backlight_set(backlight, brightness, 1); -+ return 0; -+} -+ -+static int apple_magic_backlight_probe(struct hid_device *hdev, -+ const struct hid_device_id *id) -+{ -+ struct apple_magic_backlight *backlight; -+ int rc; -+ -+ rc = hid_parse(hdev); -+ if (rc) -+ return rc; -+ -+ /* -+ * Ensure this usb endpoint is for the keyboard backlight, not touchbar -+ * backlight. -+ */ -+ if (hdev->collection[0].usage != HID_USAGE_MAGIC_BL) -+ return -ENODEV; -+ -+ backlight = devm_kzalloc(&hdev->dev, sizeof(*backlight), GFP_KERNEL); -+ if (!backlight) -+ return -ENOMEM; -+ -+ rc = hid_hw_start(hdev, HID_CONNECT_DEFAULT); -+ if (rc) -+ return rc; -+ -+ backlight->brightness = hid_register_report(hdev, HID_FEATURE_REPORT, -+ APPLE_MAGIC_REPORT_ID_BRIGHTNESS, 0); -+ backlight->power = hid_register_report(hdev, HID_FEATURE_REPORT, -+ APPLE_MAGIC_REPORT_ID_POWER, 0); -+ -+ if (!backlight->brightness || !backlight->power) { -+ rc = -ENODEV; -+ goto hw_stop; -+ } -+ -+ backlight->cdev.name = ":white:" LED_FUNCTION_KBD_BACKLIGHT; -+ backlight->cdev.max_brightness = backlight->brightness->field[0]->logical_maximum; -+ backlight->cdev.brightness_set_blocking = apple_magic_backlight_led_set; -+ -+ apple_magic_backlight_set(backlight, 0, 0); -+ -+ return devm_led_classdev_register(&hdev->dev, &backlight->cdev); -+ -+hw_stop: -+ hid_hw_stop(hdev); -+ return rc; -+} -+ -+static const struct hid_device_id apple_magic_backlight_hid_ids[] = { -+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) }, -+ { } -+}; -+MODULE_DEVICE_TABLE(hid, apple_magic_backlight_hid_ids); -+ -+static struct hid_driver apple_magic_backlight_hid_driver = { -+ .name = "hid-apple-magic-backlight", -+ .id_table = apple_magic_backlight_hid_ids, -+ .probe = apple_magic_backlight_probe, -+}; -+module_hid_driver(apple_magic_backlight_hid_driver); -+ -+MODULE_DESCRIPTION("MacBook Magic Keyboard Backlight"); -+MODULE_AUTHOR("Orlando Chamberlain "); -+MODULE_LICENSE("GPL"); --- -2.39.2 -