You've already forked linux-t2-patches
mirror of
https://github.com/t2linux/linux-t2-patches.git
synced 2026-04-30 13:52:11 -07:00
419 lines
15 KiB
Diff
419 lines
15 KiB
Diff
From 4cc9316f58027ec2617e82fd228b7d2714644907 Mon Sep 17 00:00:00 2001
|
|
From: Aditya Garg <gargaditya08@live.com>
|
|
Date: Tue, 11 Mar 2025 18:44:06 +0530
|
|
Subject: [PATCH 3/5] HID: magicmouse: Add support for trackpads found on T2
|
|
Macs
|
|
|
|
This patch adds support for trackpads found on Macs with the T2
|
|
Security Chip. The touch report format differs from other trackpads.
|
|
It is the same format as type 4 in bcm5974.c
|
|
|
|
Signed-off-by: Aditya Garg <gargaditya08@live.com>
|
|
---
|
|
drivers/hid/hid-magicmouse.c | 296 ++++++++++++++++++++++++++++++++---
|
|
1 file changed, 275 insertions(+), 21 deletions(-)
|
|
|
|
diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c
|
|
index 3c062f80c..b40f41168 100644
|
|
--- a/drivers/hid/hid-magicmouse.c
|
|
+++ b/drivers/hid/hid-magicmouse.c
|
|
@@ -118,6 +118,105 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
|
|
#define TRACKPAD2_RES_Y \
|
|
((TRACKPAD2_MAX_Y - TRACKPAD2_MIN_Y) / (TRACKPAD2_DIMENSION_Y / 100))
|
|
|
|
+#define J140K_TP_DIMENSION_X (float)12100
|
|
+#define J140K_TP_MIN_X -5318
|
|
+#define J140K_TP_MAX_X 5787
|
|
+#define J140K_TP_RES_X \
|
|
+ ((J140K_TP_MAX_X - J140K_TP_MIN_X) / (J140K_TP_DIMENSION_X / 100))
|
|
+#define J140K_TP_DIMENSION_Y (float)8200
|
|
+#define J140K_TP_MIN_Y -157
|
|
+#define J140K_TP_MAX_Y 7102
|
|
+#define J140K_TP_RES_Y \
|
|
+ ((J140K_TP_MAX_Y - J140K_TP_MIN_Y) / (J140K_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J132_TP_DIMENSION_X (float)13500
|
|
+#define J132_TP_MIN_X -6243
|
|
+#define J132_TP_MAX_X 6749
|
|
+#define J132_TP_RES_X \
|
|
+ ((J132_TP_MAX_X - J132_TP_MIN_X) / (J132_TP_DIMENSION_X / 100))
|
|
+#define J132_TP_DIMENSION_Y (float)8400
|
|
+#define J132_TP_MIN_Y -170
|
|
+#define J132_TP_MAX_Y 7685
|
|
+#define J132_TP_RES_Y \
|
|
+ ((J132_TP_MAX_Y - J132_TP_MIN_Y) / (J132_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J680_TP_DIMENSION_X (float)16000
|
|
+#define J680_TP_MIN_X -7456
|
|
+#define J680_TP_MAX_X 7976
|
|
+#define J680_TP_RES_X \
|
|
+ ((J680_TP_MAX_X - J680_TP_MIN_X) / (J680_TP_DIMENSION_X / 100))
|
|
+#define J680_TP_DIMENSION_Y (float)10000
|
|
+#define J680_TP_MIN_Y -163
|
|
+#define J680_TP_MAX_Y 9283
|
|
+#define J680_TP_RES_Y \
|
|
+ ((J680_TP_MAX_Y - J680_TP_MIN_Y) / (J680_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J680_ALT_TP_DIMENSION_X (float)16000
|
|
+#define J680_ALT_TP_MIN_X -7456
|
|
+#define J680_ALT_TP_MAX_X 7976
|
|
+#define J680_ALT_TP_RES_X \
|
|
+ ((J680_ALT_TP_MAX_X - J680_ALT_TP_MIN_X) / (J680_ALT_TP_DIMENSION_X / 100))
|
|
+#define J680_ALT_TP_DIMENSION_Y (float)10000
|
|
+#define J680_ALT_TP_MIN_Y -163
|
|
+#define J680_ALT_TP_MAX_Y 9283
|
|
+#define J680_ALT_TP_RES_Y \
|
|
+ ((J680_ALT_TP_MAX_Y - J680_ALT_TP_MIN_Y) / (J680_ALT_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J213_TP_DIMENSION_X (float)13500
|
|
+#define J213_TP_MIN_X -6243
|
|
+#define J213_TP_MAX_X 6749
|
|
+#define J213_TP_RES_X \
|
|
+ ((J213_TP_MAX_X - J213_TP_MIN_X) / (J213_TP_DIMENSION_X / 100))
|
|
+#define J213_TP_DIMENSION_Y (float)8400
|
|
+#define J213_TP_MIN_Y -170
|
|
+#define J213_TP_MAX_Y 7685
|
|
+#define J213_TP_RES_Y \
|
|
+ ((J213_TP_MAX_Y - J213_TP_MIN_Y) / (J213_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J214K_TP_DIMENSION_X (float)13200
|
|
+#define J214K_TP_MIN_X -6046
|
|
+#define J214K_TP_MAX_X 6536
|
|
+#define J214K_TP_RES_X \
|
|
+ ((J214K_TP_MAX_X - J214K_TP_MIN_X) / (J214K_TP_DIMENSION_X / 100))
|
|
+#define J214K_TP_DIMENSION_Y (float)8200
|
|
+#define J214K_TP_MIN_Y -164
|
|
+#define J214K_TP_MAX_Y 7439
|
|
+#define J214K_TP_RES_Y \
|
|
+ ((J214K_TP_MAX_Y - J214K_TP_MIN_Y) / (J214K_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J223_TP_DIMENSION_X (float)13200
|
|
+#define J223_TP_MIN_X -6046
|
|
+#define J223_TP_MAX_X 6536
|
|
+#define J223_TP_RES_X \
|
|
+ ((J223_TP_MAX_X - J223_TP_MIN_X) / (J223_TP_DIMENSION_X / 100))
|
|
+#define J223_TP_DIMENSION_Y (float)8200
|
|
+#define J223_TP_MIN_Y -164
|
|
+#define J223_TP_MAX_Y 7439
|
|
+#define J223_TP_RES_Y \
|
|
+ ((J223_TP_MAX_Y - J223_TP_MIN_Y) / (J223_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J230K_TP_DIMENSION_X (float)12100
|
|
+#define J230K_TP_MIN_X -5318
|
|
+#define J230K_TP_MAX_X 5787
|
|
+#define J230K_TP_RES_X \
|
|
+ ((J230K_TP_MAX_X - J230K_TP_MIN_X) / (J230K_TP_DIMENSION_X / 100))
|
|
+#define J230K_TP_DIMENSION_Y (float)8200
|
|
+#define J230K_TP_MIN_Y -157
|
|
+#define J230K_TP_MAX_Y 7102
|
|
+#define J230K_TP_RES_Y \
|
|
+ ((J230K_TP_MAX_Y - J230K_TP_MIN_Y) / (J230K_TP_DIMENSION_Y / 100))
|
|
+
|
|
+#define J152F_TP_DIMENSION_X (float)16000
|
|
+#define J152F_TP_MIN_X -7456
|
|
+#define J152F_TP_MAX_X 7976
|
|
+#define J152F_TP_RES_X \
|
|
+ ((J152F_TP_MAX_X - J152F_TP_MIN_X) / (J152F_TP_DIMENSION_X / 100))
|
|
+#define J152F_TP_DIMENSION_Y (float)10000
|
|
+#define J152F_TP_MIN_Y -163
|
|
+#define J152F_TP_MAX_Y 9283
|
|
+#define J152F_TP_RES_Y \
|
|
+ ((J152F_TP_MAX_Y - J152F_TP_MIN_Y) / (J152F_TP_DIMENSION_Y / 100))
|
|
+
|
|
/* These are fallback values, since the real values will be queried from the device. */
|
|
#define J314_TP_DIMENSION_X (float)13000
|
|
#define J314_TP_MIN_X -5900
|
|
@@ -130,7 +229,11 @@ MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state fie
|
|
#define J314_TP_RES_Y \
|
|
((J314_TP_MAX_Y - J314_TP_MIN_Y) / (J314_TP_DIMENSION_Y / 100))
|
|
|
|
-#define J314_TP_MAX_FINGER_ORIENTATION 16384
|
|
+#define T2_TOUCHPAD_ENTRY(model) \
|
|
+ { USB_DEVICE_ID_APPLE_WELLSPRINGT2_##model, model##_TP_MIN_X, model##_TP_MIN_Y, \
|
|
+model##_TP_MAX_X, model##_TP_MAX_Y, model##_TP_RES_X, model##_TP_RES_Y }
|
|
+
|
|
+#define INTERNAL_TP_MAX_FINGER_ORIENTATION 16384
|
|
|
|
struct magicmouse_input_ops {
|
|
int (*raw_event)(struct hid_device *hdev,
|
|
@@ -733,7 +836,7 @@ static void report_finger_data(struct input_dev *input, int slot,
|
|
input_report_abs(input, ABS_MT_WIDTH_MINOR,
|
|
le16_to_int(f->tool_minor) << 1);
|
|
input_report_abs(input, ABS_MT_ORIENTATION,
|
|
- J314_TP_MAX_FINGER_ORIENTATION - le16_to_int(f->orientation));
|
|
+ INTERNAL_TP_MAX_FINGER_ORIENTATION - le16_to_int(f->orientation));
|
|
input_report_abs(input, ABS_MT_PRESSURE, le16_to_int(f->pressure));
|
|
input_report_abs(input, ABS_MT_POSITION_X, pos->x);
|
|
input_report_abs(input, ABS_MT_POSITION_Y, pos->y);
|
|
@@ -821,6 +924,20 @@ static int magicmouse_raw_event_spi(struct hid_device *hdev,
|
|
return magicmouse_raw_event_mtp(hdev, report, data + hdr_sz, size - hdr_sz);
|
|
}
|
|
|
|
+static int magicmouse_raw_event_t2(struct hid_device *hdev,
|
|
+ struct hid_report *report, u8 *data, int size)
|
|
+{
|
|
+ const size_t hdr_sz = sizeof(struct tp_mouse_report);
|
|
+
|
|
+ if (!size)
|
|
+ return 0;
|
|
+
|
|
+ if (data[0] != TRACKPAD2_USB_REPORT_ID || size < hdr_sz)
|
|
+ return 0;
|
|
+
|
|
+ return magicmouse_raw_event_mtp(hdev, report, data + hdr_sz, size - hdr_sz);
|
|
+}
|
|
+
|
|
static int magicmouse_event(struct hid_device *hdev, struct hid_field *field,
|
|
struct hid_usage *usage, __s32 value)
|
|
{
|
|
@@ -1018,8 +1135,32 @@ static int magicmouse_setup_input_usb(struct input_dev *input,
|
|
return 0;
|
|
}
|
|
|
|
-static int magicmouse_setup_input_mtp(struct input_dev *input,
|
|
- struct hid_device *hdev)
|
|
+struct magicmouse_t2_properties {
|
|
+ u32 id;
|
|
+ int min_x;
|
|
+ int min_y;
|
|
+ int max_x;
|
|
+ int max_y;
|
|
+ int res_x;
|
|
+ int res_y;
|
|
+};
|
|
+
|
|
+static const struct magicmouse_t2_properties magicmouse_t2_configs[] = {
|
|
+ T2_TOUCHPAD_ENTRY(J140K),
|
|
+ T2_TOUCHPAD_ENTRY(J132),
|
|
+ T2_TOUCHPAD_ENTRY(J680),
|
|
+ T2_TOUCHPAD_ENTRY(J680_ALT),
|
|
+ T2_TOUCHPAD_ENTRY(J213),
|
|
+ T2_TOUCHPAD_ENTRY(J214K),
|
|
+ T2_TOUCHPAD_ENTRY(J223),
|
|
+ T2_TOUCHPAD_ENTRY(J230K),
|
|
+ T2_TOUCHPAD_ENTRY(J152F),
|
|
+};
|
|
+
|
|
+static int magicmouse_setup_input_int_tpd(struct input_dev *input,
|
|
+ struct hid_device *hdev, int min_x, int min_y,
|
|
+ int max_x, int max_y, int res_x, int res_y,
|
|
+ bool query_dimensions)
|
|
{
|
|
int error;
|
|
int mt_flags = 0;
|
|
@@ -1060,19 +1201,17 @@ static int magicmouse_setup_input_mtp(struct input_dev *input,
|
|
input_abs_set_res(input, ABS_MT_PRESSURE, 1);
|
|
|
|
/* finger orientation */
|
|
- input_set_abs_params(input, ABS_MT_ORIENTATION, -J314_TP_MAX_FINGER_ORIENTATION,
|
|
- J314_TP_MAX_FINGER_ORIENTATION, 0, 0);
|
|
+ input_set_abs_params(input, ABS_MT_ORIENTATION, -INTERNAL_TP_MAX_FINGER_ORIENTATION,
|
|
+ INTERNAL_TP_MAX_FINGER_ORIENTATION, 0, 0);
|
|
|
|
/* finger position */
|
|
- input_set_abs_params(input, ABS_MT_POSITION_X, J314_TP_MIN_X, J314_TP_MAX_X,
|
|
- 0, 0);
|
|
+ input_set_abs_params(input, ABS_MT_POSITION_X, min_x, max_x, 0, 0);
|
|
/* Y axis is inverted */
|
|
- input_set_abs_params(input, ABS_MT_POSITION_Y, -J314_TP_MAX_Y, -J314_TP_MIN_Y,
|
|
- 0, 0);
|
|
+ input_set_abs_params(input, ABS_MT_POSITION_Y, -max_y, -min_y, 0, 0);
|
|
|
|
/* X/Y resolution */
|
|
- input_abs_set_res(input, ABS_MT_POSITION_X, J314_TP_RES_X);
|
|
- input_abs_set_res(input, ABS_MT_POSITION_Y, J314_TP_RES_Y);
|
|
+ input_abs_set_res(input, ABS_MT_POSITION_X, res_x);
|
|
+ input_abs_set_res(input, ABS_MT_POSITION_Y, res_y);
|
|
|
|
input_set_events_per_packet(input, 60);
|
|
|
|
@@ -1099,7 +1238,20 @@ static int magicmouse_setup_input_mtp(struct input_dev *input,
|
|
*/
|
|
input->open = magicmouse_open;
|
|
input->close = magicmouse_close;
|
|
- msc->query_dimensions = true;
|
|
+ msc->query_dimensions = query_dimensions;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int magicmouse_setup_input_mtp(struct input_dev *input,
|
|
+ struct hid_device *hdev)
|
|
+{
|
|
+ int ret = magicmouse_setup_input_int_tpd(input, hdev, J314_TP_MIN_X,
|
|
+ J314_TP_MIN_Y, J314_TP_MAX_X,
|
|
+ J314_TP_MAX_Y, J314_TP_RES_X,
|
|
+ J314_TP_RES_Y, true);
|
|
+ if (ret)
|
|
+ return ret;
|
|
|
|
return 0;
|
|
}
|
|
@@ -1107,7 +1259,34 @@ static int magicmouse_setup_input_mtp(struct input_dev *input,
|
|
static int magicmouse_setup_input_spi(struct input_dev *input,
|
|
struct hid_device *hdev)
|
|
{
|
|
- int ret = magicmouse_setup_input_mtp(input, hdev);
|
|
+ int ret = magicmouse_setup_input_int_tpd(input, hdev, J314_TP_MIN_X,
|
|
+ J314_TP_MIN_Y, J314_TP_MAX_X,
|
|
+ J314_TP_MAX_Y, J314_TP_RES_X,
|
|
+ J314_TP_RES_Y, true);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+
|
|
+ return 0;
|
|
+}
|
|
+
|
|
+static int magicmouse_setup_input_t2(struct input_dev *input,
|
|
+ struct hid_device *hdev)
|
|
+{
|
|
+ int min_x, min_y, max_x, max_y, res_x, res_y;
|
|
+
|
|
+ for (size_t i = 0; i < ARRAY_SIZE(magicmouse_t2_configs); i++) {
|
|
+ if (magicmouse_t2_configs[i].id == hdev->product) {
|
|
+ min_x = magicmouse_t2_configs[i].min_x;
|
|
+ min_y = magicmouse_t2_configs[i].min_y;
|
|
+ max_x = magicmouse_t2_configs[i].max_x;
|
|
+ max_y = magicmouse_t2_configs[i].max_y;
|
|
+ res_x = magicmouse_t2_configs[i].res_x;
|
|
+ res_y = magicmouse_t2_configs[i].res_y;
|
|
+ }
|
|
+ }
|
|
+
|
|
+ int ret = magicmouse_setup_input_int_tpd(input, hdev, min_x, min_y,
|
|
+ max_x, max_y, res_x, res_y, false);
|
|
if (ret)
|
|
return ret;
|
|
|
|
@@ -1180,6 +1359,18 @@ static int magicmouse_enable_multitouch(struct hid_device *hdev)
|
|
feature = feature_mt_trackpad2_usb;
|
|
}
|
|
break;
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680_ALT:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F:
|
|
+ feature_size = sizeof(feature_mt_trackpad2_usb);
|
|
+ feature = feature_mt_trackpad2_usb;
|
|
+ break;
|
|
case USB_DEVICE_ID_APPLE_MAGICMOUSE2:
|
|
case USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC:
|
|
feature_size = sizeof(feature_mt_mouse2);
|
|
@@ -1273,8 +1464,23 @@ static int magicmouse_probe(struct hid_device *hdev,
|
|
int ret;
|
|
|
|
if ((id->bus == BUS_SPI || id->bus == BUS_HOST) && id->vendor == SPI_VENDOR_ID_APPLE &&
|
|
- hdev->type != HID_TYPE_SPI_MOUSE)
|
|
- return -ENODEV;
|
|
+ hdev->type != HID_TYPE_SPI_MOUSE)
|
|
+ return -ENODEV;
|
|
+
|
|
+ switch (id->product) {
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680_ALT:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F:
|
|
+ if (hdev->type != HID_TYPE_USBMOUSE)
|
|
+ return -ENODEV;
|
|
+ break;
|
|
+ }
|
|
|
|
msc = devm_kzalloc(&hdev->dev, sizeof(*msc), GFP_KERNEL);
|
|
if (msc == NULL) {
|
|
@@ -1284,15 +1490,33 @@ static int magicmouse_probe(struct hid_device *hdev,
|
|
|
|
// internal trackpad use a data format use input ops to avoid
|
|
// conflicts with the report ID.
|
|
- if (id->bus == BUS_HOST) {
|
|
+ switch (id->bus) {
|
|
+ case BUS_HOST:
|
|
msc->input_ops.raw_event = magicmouse_raw_event_mtp;
|
|
msc->input_ops.setup_input = magicmouse_setup_input_mtp;
|
|
- } else if (id->bus == BUS_SPI) {
|
|
+ break;
|
|
+ case BUS_SPI:
|
|
msc->input_ops.raw_event = magicmouse_raw_event_spi;
|
|
msc->input_ops.setup_input = magicmouse_setup_input_spi;
|
|
- } else {
|
|
- msc->input_ops.raw_event = magicmouse_raw_event_usb;
|
|
- msc->input_ops.setup_input = magicmouse_setup_input_usb;
|
|
+ break;
|
|
+ default:
|
|
+ switch (id->product) {
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680_ALT:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F:
|
|
+ msc->input_ops.raw_event = magicmouse_raw_event_t2;
|
|
+ msc->input_ops.setup_input = magicmouse_setup_input_t2;
|
|
+ break;
|
|
+ default:
|
|
+ msc->input_ops.raw_event = magicmouse_raw_event_usb;
|
|
+ msc->input_ops.setup_input = magicmouse_setup_input_usb;
|
|
+ }
|
|
}
|
|
|
|
msc->scroll_accel = SCROLL_ACCEL_DEFAULT;
|
|
@@ -1353,6 +1577,18 @@ static int magicmouse_probe(struct hid_device *hdev,
|
|
TRACKPAD2_USB_REPORT_ID, 0);
|
|
}
|
|
break;
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680_ALT:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K:
|
|
+ case USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F:
|
|
+ report = hid_register_report(hdev, HID_INPUT_REPORT,
|
|
+ TRACKPAD2_USB_REPORT_ID, 0);
|
|
+ break;
|
|
case HID_ANY_ID:
|
|
switch (id->bus) {
|
|
case BUS_HOST:
|
|
@@ -1464,6 +1700,24 @@ static const struct hid_device_id magic_mice[] = {
|
|
USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC), .driver_data = 0 },
|
|
{ HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J140K), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J132), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J680_ALT), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J213), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J214K), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J223), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J230K), .driver_data = 0 },
|
|
+ { HID_USB_DEVICE(USB_VENDOR_ID_APPLE,
|
|
+ USB_DEVICE_ID_APPLE_WELLSPRINGT2_J152F), .driver_data = 0 },
|
|
{ HID_SPI_DEVICE(SPI_VENDOR_ID_APPLE, HID_ANY_ID),
|
|
.driver_data = 0 },
|
|
{ HID_DEVICE(BUS_HOST, HID_GROUP_ANY, HOST_VENDOR_ID_APPLE,
|
|
--
|
|
2.50.1
|
|
|