Add files via upload

This commit is contained in:
Aditya Garg
2022-11-08 20:45:50 +05:30
committed by GitHub
parent b4de2445a9
commit cf95461a8f
7 changed files with 3034 additions and 0 deletions
@@ -0,0 +1,70 @@
From dc27d4db5787546ae5eacf3483f3b87f2d4fb1c1 Mon Sep 17 00:00:00 2001
From: Redecorating <69827514+Redecorating@users.noreply.github.com>
Date: Mon, 7 Nov 2022 14:56:34 +0530
Subject: [PATCH] Put apple-bce in drivers/staging
---
drivers/staging/Kconfig | 2 ++
drivers/staging/Makefile | 1 +
drivers/staging/apple-bce/Kconfig | 18 ++++++++++++++++++
drivers/staging/apple-bce/Makefile | 2 +-
4 files changed, 22 insertions(+), 1 deletion(-)
create mode 100644 drivers/staging/apple-bce/Kconfig
diff --git a/drivers/staging/Kconfig b/drivers/staging/Kconfig
index 5cfabd537..3b8e61d26 100644
--- a/drivers/staging/Kconfig
+++ b/drivers/staging/Kconfig
@@ -80,4 +80,6 @@ source "drivers/staging/qlge/Kconfig"
source "drivers/staging/vme_user/Kconfig"
+source "drivers/staging/apple-bce/Kconfig"
+
endif # STAGING
diff --git a/drivers/staging/Makefile b/drivers/staging/Makefile
index f8c3aa9c2..1e148d6c3 100644
--- a/drivers/staging/Makefile
+++ b/drivers/staging/Makefile
@@ -29,3 +29,4 @@ obj-$(CONFIG_PI433) += pi433/
obj-$(CONFIG_XIL_AXIS_FIFO) += axis-fifo/
obj-$(CONFIG_FIELDBUS_DEV) += fieldbus/
obj-$(CONFIG_QLGE) += qlge/
+obj-$(CONFIG_APPLE_BCE) += apple-bce/
diff --git a/drivers/staging/apple-bce/Kconfig b/drivers/staging/apple-bce/Kconfig
new file mode 100644
index 000000000..fe92bc441
--- /dev/null
+++ b/drivers/staging/apple-bce/Kconfig
@@ -0,0 +1,18 @@
+config APPLE_BCE
+ tristate "Apple BCE driver (VHCI and Audio support)"
+ default m
+ depends on X86
+ select SOUND
+ select SND
+ select SND_PCM
+ select SND_JACK
+ help
+ VHCI and audio support on Apple MacBooks with the T2 Chip.
+ This driver is divided in three components:
+ - BCE (Buffer Copy Engine): which establishes a basic communication
+ channel with the T2 chip. This component is required by the other two:
+ - VHCI (Virtual Host Controller Interface): Access to keyboard, mouse
+ and other system devices depend on this virtual USB host controller
+ - Audio: a driver for the T2 audio interface.
+
+ If "M" is selected, the module will be called apple-bce.'
diff --git a/drivers/staging/apple-bce/Makefile b/drivers/staging/apple-bce/Makefile
index a6a656f06..8cfbd3f64 100644
--- a/drivers/staging/apple-bce/Makefile
+++ b/drivers/staging/apple-bce/Makefile
@@ -1,5 +1,5 @@
modname := apple-bce
-obj-m += $(modname).o
+obj-$(CONFIG_APPLE_BCE) += $(modname).o
apple-bce-objs := apple_bce.o mailbox.o queue.o queue_dma.o vhci/vhci.o vhci/queue.o vhci/transfer.o audio/audio.o audio/protocol.o audio/protocol_bce.o audio/pcm.o
--
2.34.1
@@ -0,0 +1,63 @@
From 18bed33b3b1180a8af8a52dcf544b67b61786e89 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ronald=20Tschal=C3=A4r?= <ronald@innovation.ch>
Date: Sat, 27 Feb 2021 17:26:39 -0800
Subject: [PATCH 1/6] HID: Recognize sensors with application collections too.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
According to HUTRR39 logical sensor devices may be nested inside
physical collections or may be specified in multiple top-level
application collections (see page 59, strategies 1 and 2). However,
the current code was only recognizing those with physical collections.
This issue turned up in recent MacBook Pro's which define the ALS in
a top-level application collection.
Signed-off-by: Ronald Tschalär <ronald@innovation.ch>
---
drivers/hid/hid-core.c | 3 ++-
drivers/hid/hid-sensor-hub.c | 6 ++++--
2 files changed, 6 insertions(+), 3 deletions(-)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index b7f5566e338d..8fcd663b10e2 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -804,7 +804,8 @@ static void hid_scan_collection(struct hid_parser *parser, unsigned type)
int i;
if (((parser->global.usage_page << 16) == HID_UP_SENSOR) &&
- type == HID_COLLECTION_PHYSICAL)
+ (type == HID_COLLECTION_PHYSICAL ||
+ type == HID_COLLECTION_APPLICATION))
hid->group = HID_GROUP_SENSOR_HUB;
if (hid->vendor == USB_VENDOR_ID_MICROSOFT &&
diff --git a/drivers/hid/hid-sensor-hub.c b/drivers/hid/hid-sensor-hub.c
index 6abd3e2a9094..d03dc4ca095f 100644
--- a/drivers/hid/hid-sensor-hub.c
+++ b/drivers/hid/hid-sensor-hub.c
@@ -397,7 +397,8 @@ int sensor_hub_input_get_attribute_info(struct hid_sensor_hub_device *hsdev,
for (i = 0; i < report->maxfield; ++i) {
field = report->field[i];
if (field->maxusage) {
- if (field->physical == usage_id &&
+ if ((field->physical == usage_id ||
+ field->application == usage_id) &&
(field->logical == attr_usage_id ||
field->usage[0].hid ==
attr_usage_id) &&
@@ -506,7 +507,8 @@ static int sensor_hub_raw_event(struct hid_device *hdev,
collection->usage);
callback = sensor_hub_get_callback(hdev,
- report->field[i]->physical,
+ report->field[i]->physical ?:
+ report->field[i]->application,
report->field[i]->usage[0].collection_index,
&hsdev, &priv);
if (!callback) {
--
2.38.1
@@ -0,0 +1,221 @@
From 360637979541fa2f3a64ed54af818f07e4e95a8d Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ronald=20Tschal=C3=A4r?= <ronald@innovation.ch>
Date: Sat, 27 Feb 2021 17:26:41 -0800
Subject: [PATCH 2/6] HID: core: Export some report item parsing functions.
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
These are useful to drivers that need to scan or parse reports
themselves.
Signed-off-by: Ronald Tschalär <ronald@innovation.ch>
---
drivers/hid/hid-core.c | 54 +++++++++++++++++++++++++-----------------
include/linux/hid.h | 4 ++++
2 files changed, 36 insertions(+), 22 deletions(-)
diff --git a/drivers/hid/hid-core.c b/drivers/hid/hid-core.c
index 8fcd663b10e2..f0d914238e55 100644
--- a/drivers/hid/hid-core.c
+++ b/drivers/hid/hid-core.c
@@ -343,7 +343,7 @@ static int hid_add_field(struct hid_parser *parser, unsigned report_type, unsign
* Read data value from item.
*/
-static u32 item_udata(struct hid_item *item)
+u32 hid_item_udata(struct hid_item *item)
{
switch (item->size) {
case 1: return item->data.u8;
@@ -352,8 +352,9 @@ static u32 item_udata(struct hid_item *item)
}
return 0;
}
+EXPORT_SYMBOL_GPL(hid_item_udata);
-static s32 item_sdata(struct hid_item *item)
+s32 hid_item_sdata(struct hid_item *item)
{
switch (item->size) {
case 1: return item->data.s8;
@@ -362,6 +363,7 @@ static s32 item_sdata(struct hid_item *item)
}
return 0;
}
+EXPORT_SYMBOL_GPL(hid_item_sdata);
/*
* Process a global item.
@@ -394,29 +396,29 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
return 0;
case HID_GLOBAL_ITEM_TAG_USAGE_PAGE:
- parser->global.usage_page = item_udata(item);
+ parser->global.usage_page = hid_item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_LOGICAL_MINIMUM:
- parser->global.logical_minimum = item_sdata(item);
+ parser->global.logical_minimum = hid_item_sdata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_LOGICAL_MAXIMUM:
if (parser->global.logical_minimum < 0)
- parser->global.logical_maximum = item_sdata(item);
+ parser->global.logical_maximum = hid_item_sdata(item);
else
- parser->global.logical_maximum = item_udata(item);
+ parser->global.logical_maximum = hid_item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_PHYSICAL_MINIMUM:
- parser->global.physical_minimum = item_sdata(item);
+ parser->global.physical_minimum = hid_item_sdata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_PHYSICAL_MAXIMUM:
if (parser->global.physical_minimum < 0)
- parser->global.physical_maximum = item_sdata(item);
+ parser->global.physical_maximum = hid_item_sdata(item);
else
- parser->global.physical_maximum = item_udata(item);
+ parser->global.physical_maximum = hid_item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_UNIT_EXPONENT:
@@ -424,7 +426,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
* nibble due to the common misunderstanding of HID
* specification 1.11, 6.2.2.7 Global Items. Attempt to handle
* both this and the standard encoding. */
- raw_value = item_sdata(item);
+ raw_value = hid_item_sdata(item);
if (!(raw_value & 0xfffffff0))
parser->global.unit_exponent = hid_snto32(raw_value, 4);
else
@@ -432,11 +434,11 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
return 0;
case HID_GLOBAL_ITEM_TAG_UNIT:
- parser->global.unit = item_udata(item);
+ parser->global.unit = hid_item_udata(item);
return 0;
case HID_GLOBAL_ITEM_TAG_REPORT_SIZE:
- parser->global.report_size = item_udata(item);
+ parser->global.report_size = hid_item_udata(item);
if (parser->global.report_size > 256) {
hid_err(parser->device, "invalid report_size %d\n",
parser->global.report_size);
@@ -445,7 +447,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
return 0;
case HID_GLOBAL_ITEM_TAG_REPORT_COUNT:
- parser->global.report_count = item_udata(item);
+ parser->global.report_count = hid_item_udata(item);
if (parser->global.report_count > HID_MAX_USAGES) {
hid_err(parser->device, "invalid report_count %d\n",
parser->global.report_count);
@@ -454,7 +456,7 @@ static int hid_parser_global(struct hid_parser *parser, struct hid_item *item)
return 0;
case HID_GLOBAL_ITEM_TAG_REPORT_ID:
- parser->global.report_id = item_udata(item);
+ parser->global.report_id = hid_item_udata(item);
if (parser->global.report_id == 0 ||
parser->global.report_id >= HID_MAX_IDS) {
hid_err(parser->device, "report_id %u is invalid\n",
@@ -479,7 +481,7 @@ static int hid_parser_local(struct hid_parser *parser, struct hid_item *item)
unsigned n;
__u32 count;
- data = item_udata(item);
+ data = hid_item_udata(item);
switch (item->tag) {
case HID_LOCAL_ITEM_TAG_DELIMITER:
@@ -611,7 +613,7 @@ static int hid_parser_main(struct hid_parser *parser, struct hid_item *item)
hid_concatenate_last_usage_page(parser);
- data = item_udata(item);
+ data = hid_item_udata(item);
switch (item->tag) {
case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION:
@@ -712,12 +714,19 @@ static void hid_device_release(struct device *dev)
kfree(hid);
}
-/*
+/**
+ * hid_fetch_item - fetch an item from a report
+ *
+ * @start: the current position in the report buffer to read the next item from
+ * @end: the end of the report buffer
+ * @item: the item struct to fill in
+ *
* Fetch a report description item from the data stream. We support long
* items, though they are not used yet.
+ *
+ * Return: the position of the next item in the report
*/
-
-static u8 *fetch_item(__u8 *start, __u8 *end, struct hid_item *item)
+u8 *hid_fetch_item(__u8 *start, __u8 *end, struct hid_item *item)
{
u8 b;
@@ -778,6 +787,7 @@ static u8 *fetch_item(__u8 *start, __u8 *end, struct hid_item *item)
return NULL;
}
+EXPORT_SYMBOL_GPL(hid_fetch_item);
static void hid_scan_input_usage(struct hid_parser *parser, u32 usage)
{
@@ -836,7 +846,7 @@ static int hid_scan_main(struct hid_parser *parser, struct hid_item *item)
hid_concatenate_last_usage_page(parser);
- data = item_udata(item);
+ data = hid_item_udata(item);
switch (item->tag) {
case HID_MAIN_ITEM_TAG_BEGIN_COLLECTION:
@@ -896,7 +906,7 @@ static int hid_scan_report(struct hid_device *hid)
* be robust against hid errors. Those errors will be raised by
* hid_open_report() anyway.
*/
- while ((start = fetch_item(start, end, &item)) != NULL)
+ while ((start = hid_fetch_item(start, end, &item)) != NULL)
dispatch_type[item.type](parser, &item);
/*
@@ -1255,7 +1265,7 @@ int hid_open_report(struct hid_device *device)
device->collection_size = HID_DEFAULT_NUM_COLLECTIONS;
ret = -EINVAL;
- while ((next = fetch_item(start, end, &item)) != NULL) {
+ while ((next = hid_fetch_item(start, end, &item)) != NULL) {
start = next;
if (item.format != HID_ITEM_FORMAT_SHORT) {
diff --git a/include/linux/hid.h b/include/linux/hid.h
index 4363a63b9775..b39f97d565e2 100644
--- a/include/linux/hid.h
+++ b/include/linux/hid.h
@@ -941,6 +941,10 @@ struct hid_report *hid_validate_values(struct hid_device *hid,
unsigned int field_index,
unsigned int report_counts);
+u32 hid_item_udata(struct hid_item *item);
+s32 hid_item_sdata(struct hid_item *item);
+u8 *hid_fetch_item(__u8 *start, __u8 *end, struct hid_item *item);
+
void hid_setup_resolution_multiplier(struct hid_device *hid);
int hid_open_report(struct hid_device *device);
int hid_check_keys_pressed(struct hid_device *hid);
--
2.38.1
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -0,0 +1,233 @@
From c36014bd8cbf435a3668dbe257cb3d4293968074 Mon Sep 17 00:00:00 2001
From: Orlando Chamberlain <redecorating@protonmail.com>
Date: Sun, 6 Nov 2022 19:23:56 +0300
Subject: [PATCH 5/6] HID: apple-touchbar: support magic keyboard backlight
MacBookPro16,1/2/3/4 have the magic keyboard, with the keyboard
backlight controlled via the Touch Bar Backlight USB device.
We check that the internal keyboard's USB product ID matches that of
models with the magic keyboard, and then we create a sysfs led class
dev that controls the backlight.
NOTE: This commit hasn't been signed off yet
---
drivers/hid/apple-touchbar.c | 167 +++++++++++++++++++++++++++++++++++
1 file changed, 167 insertions(+)
diff --git a/drivers/hid/apple-touchbar.c b/drivers/hid/apple-touchbar.c
index 87cb9ebafb61..e2cf41b35363 100644
--- a/drivers/hid/apple-touchbar.c
+++ b/drivers/hid/apple-touchbar.c
@@ -78,6 +78,8 @@
#define APPLETB_FEATURE_IS_T1 BIT(0)
+#define APPLE_MAGIC_KBD_BL_MAX 60
+
static int appletb_tb_def_idle_timeout = 5 * 60;
module_param_named(idle_timeout, appletb_tb_def_idle_timeout, int, 0444);
MODULE_PARM_DESC(idle_timeout, "Default touch bar idle timeout:\n"
@@ -136,6 +138,12 @@ static const struct attribute_group appletb_attr_group = {
.attrs = appletb_attrs,
};
+struct apple_magic_backlight {
+ struct led_classdev cdev;
+ struct usb_device *dev;
+ bool powered;
+};
+
struct appletb_device {
bool active;
struct device *log_dev;
@@ -175,6 +183,8 @@ struct appletb_device {
int fn_mode;
bool is_t1;
+
+ struct apple_magic_backlight kbd_backlight;
};
struct appletb_key_translation {
@@ -197,6 +207,30 @@ static const struct appletb_key_translation appletb_fn_codes[] = {
{ KEY_F12, KEY_VOLUMEUP },
};
+struct apple_magic_keyboard_backlight_brightness_report {
+ u8 report_id; /* 0x01 */
+ u8 mode; /* If 0x00, brightness can turn off backlight */
+ u8 brightness;
+ u8 override_1; /* If these are non-zero, backlight is overridden to max brightness */
+ u8 override_2;
+ u8 max; /* Lower is brighter, only takes effect when turning backlight
+ * on from off, can be unreliable
+ */
+ u8 rate;
+ u8 magic_1; /* If these are non-zero, we are ignored. */
+ u8 magic_2;
+};
+
+struct apple_magic_keyboard_backlight_power_report {
+ u8 report_id; /* 0x03 */
+ u8 power;
+ u8 max; /* Lower is brighter, only takes effect when turning backlight
+ * on from off, can be unreliable
+ */
+ u8 rate;
+ u8 magic_1; /* If these are non-zero, we are ignored. */
+ u8 magic_2;
+};
static struct appletb_device *appletb_dev;
static int appletb_send_usb_ctrl(struct appletb_iface_info *iface_info,
@@ -317,6 +351,132 @@ static int appletb_send_hid_report(struct appletb_iface_info *iface_info,
return rc;
}
+static int apple_magic_keyboard_backlight_power_set(struct apple_magic_backlight *backlight,
+ char power, char rate)
+{
+ int tries = 0;
+ int rc;
+ struct apple_magic_keyboard_backlight_power_report *rep;
+
+ rep = kmalloc(sizeof(*rep), GFP_KERNEL);
+ if (rep == NULL)
+ return -ENOMEM;
+
+ backlight->powered = power ? true : false;
+
+ rep->report_id = 0x03;
+ rep->power = power;
+ rep->max = 0x5e; /* Windows uses 0x5e when turning on, and 0xf4 when
+ * turning off. When it's off it doesn't matter, so
+ * use 0x5e
+ */
+ rep->rate = rate;
+
+ do {
+ /*
+ * FIXME: use appletb_send_hid_report, don't hard code all of this
+ * Need to get apple_tb_send_hid_report to use wIndex=0x01
+ */
+ rc = usb_control_msg(backlight->dev,
+ usb_sndctrlpipe(backlight->dev, 0),
+ HID_REQ_SET_REPORT, USB_DIR_OUT |
+ USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+ 0x0303, 0x01, rep, sizeof(*rep),
+ 2000);
+ if (rc != -EPIPE)
+ break;
+
+ usleep_range(1000 << tries, 3000 << tries);
+ } while (++tries < 5);
+
+ kfree(rep);
+ return (rc > 0) ? 0 : rc;
+}
+
+static int apple_magic_keyboard_backlight_brightness_set(struct apple_magic_backlight *backlight,
+ char brightness, char rate)
+{
+ int tries = 0;
+ int rc;
+ struct apple_magic_keyboard_backlight_brightness_report *rep;
+
+ rep = kmalloc(sizeof(*rep), GFP_KERNEL);
+ if (rep == NULL)
+ return -ENOMEM;
+
+ rep->report_id = 0x01;
+ rep->mode = brightness;
+ rep->brightness = brightness;
+ rep->max = 0x5e;
+ rep->rate = rate;
+
+ do {
+ /*
+ * FIXME: use appletb_send_hid_report, don't hard code all of this
+ * Need to get apple_tb_send_hid_report to use wIndex=0x01
+ */
+ rc = usb_control_msg(backlight->dev,
+ usb_sndctrlpipe(backlight->dev, 0),
+ HID_REQ_SET_REPORT, USB_DIR_OUT |
+ USB_TYPE_CLASS | USB_RECIP_INTERFACE,
+ 0x0301, 0x01, rep, sizeof(*rep),
+ 2000);
+ if (rc != -EPIPE)
+ break;
+
+ usleep_range(1000 << tries, 3000 << tries);
+ } while (++tries < 5);
+
+ kfree(rep);
+ return (rc > 0) ? 0 : rc;
+}
+
+static int apple_magic_keyboard_backlight_set(struct apple_magic_backlight *backlight,
+ char brightness, char rate)
+{
+ int rc;
+
+ if (!brightness)
+ return apple_magic_keyboard_backlight_power_set(backlight, 0, rate);
+
+ rc = apple_magic_keyboard_backlight_brightness_set(backlight, brightness, rate);
+ if (rc)
+ return rc;
+
+ if (!backlight->powered && brightness)
+ rc = apple_magic_keyboard_backlight_power_set(backlight, 1, rate);
+
+ return (rc > 0) ? 0 : rc;
+}
+
+static int apple_magic_keyboard_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);
+
+ return apple_magic_keyboard_backlight_set(backlight, brightness, 1);
+}
+
+static int apple_magic_keyboard_backlight_init(struct appletb_device *tb_dev)
+{
+ int ret;
+
+ tb_dev->kbd_backlight.dev = interface_to_usbdev(tb_dev->disp_iface.usb_iface);
+ tb_dev->kbd_backlight.cdev.name = "apple::kbd_backlight";
+ tb_dev->kbd_backlight.cdev.max_brightness = APPLE_MAGIC_KBD_BL_MAX;
+ tb_dev->kbd_backlight.cdev.brightness_set_blocking = apple_magic_keyboard_backlight_led_set;
+
+ ret = apple_magic_keyboard_backlight_set(&tb_dev->kbd_backlight, 0, 0);
+ if (ret) {
+ dev_err(tb_dev->log_dev,
+ "Failed to initialise Magic Keyboard Backlight (%d)\n", ret);
+ return ret;
+ }
+
+ return devm_led_classdev_register(tb_dev->log_dev, &tb_dev->kbd_backlight.cdev);
+}
+
static int appletb_set_tb_disp(struct appletb_device *tb_dev,
unsigned char disp)
{
@@ -881,6 +1041,13 @@ static int appletb_inp_connect(struct input_handler *handler,
if (id->driver_info == APPLETB_DEVID_KEYBOARD) {
handle = &tb_dev->kbd_handle;
handle->name = "tbkbd";
+ switch (dev->id.product) {
+ case 0x0340u: /* MacBookPro16,1/4 */
+ case 0x027eu: /* MacBookPro16,2 */
+ case 0x027fu: /* MacBookPro16,3 */
+ apple_magic_keyboard_backlight_init(tb_dev);
+ break;
+ }
} else if (id->driver_info == APPLETB_DEVID_TOUCHPAD) {
handle = &tb_dev->tpd_handle;
handle->name = "tbtpad";
--
2.38.1
@@ -0,0 +1,35 @@
From 17d3c266246722505ef5bddd470d532d2dd75a3f Mon Sep 17 00:00:00 2001
From: Aditya Garg <gargaditya08@live.com>
Date: Mon, 7 Nov 2022 01:17:17 +0530
Subject: [PATCH 6/6] HID: quirks: Use touchbar quirks when touchbar driver is
enabled
Signed-off-by: Aditya Garg <gargaditya08@live.com>
---
drivers/hid/hid-quirks.c | 6 ++++--
1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/drivers/hid/hid-quirks.c b/drivers/hid/hid-quirks.c
index cc862fbf1995..32ff8b7b336f 100644
--- a/drivers/hid/hid-quirks.c
+++ b/drivers/hid/hid-quirks.c
@@ -314,12 +314,14 @@ static const struct hid_device_id hid_have_special_driver[] = {
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_GEYSER1_TP_ONLY) },
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_2021) },
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGIC_KEYBOARD_FINGERPRINT_2021) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
- { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
#endif
#if IS_ENABLED(CONFIG_HID_APPLE_IBRIDGE)
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IBRIDGE) },
#endif
+#if IS_ENABLED(CONFIG_HID_APPLE_TOUCHBAR)
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_BACKLIGHT) },
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_TOUCHBAR_DISPLAY) },
+#endif
#if IS_ENABLED(CONFIG_HID_APPLEIR)
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL2) },
--
2.38.1