From patchwork Tue Apr 15 16:17:32 2025 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Aditya Garg X-Patchwork-Id: 14052425 X-Patchwork-Delegate: jikos@jikos.cz Received: from MA0PR01CU012.outbound.protection.outlook.com (mail-southindiaazolkn19011037.outbound.protection.outlook.com [52.103.67.37]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6A34B2DFA58; Tue, 15 Apr 2025 16:17:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=fail smtp.client-ip=52.103.67.37 ARC-Seal: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744733862; cv=fail; b=ugL+cOObMM/4JCKK08Hil2nA9Snka0YfH1WyVtdLvvTuBI4pEHaXIsISMKlOAAL7a3R6cz7zEpXlVt1t2e1Eb8oaeaAQqI7qRICvBVC5DfUo63Vm9g2aRvVD26zSA1NjeTEai5GwKoIw0Rva27uMDDR2bGUdAuIO63XugSEo84k= ARC-Message-Signature: i=2; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1744733862; c=relaxed/simple; bh=LCk9i/j/BhvloRvlrwVcZXldErQNzEJy0uNCdgACbtc=; h=Message-ID:Date:To:Cc:From:Subject:Content-Type:MIME-Version; b=WP4Doec2lfb0yCPPw8UI6pxoQPq2IhJhWMi3YD3q9jI8m+CbPUt4QdfU9VyqgAsRH6Ok5c27pw2cJCjdraqUni25AzLPx5S8PGYsmIS/DVUY8i2Y0+ZDceTI8wg5XH2DD3Z0ZUkmOydsqaH/rDuAxkiZqz+aS7tC0NMtlir7sik= ARC-Authentication-Results: i=2; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=live.com; spf=pass smtp.mailfrom=live.com; dkim=pass (2048-bit key) header.d=live.com header.i=@live.com header.b=B3rcunuE; arc=fail smtp.client-ip=52.103.67.37 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=live.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=live.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=live.com header.i=@live.com header.b="B3rcunuE" ARC-Seal: i=1; a=rsa-sha256; s=arcselector10001; d=microsoft.com; cv=none; b=VxmF2zSCD/G4tmqBRS+EmIkqhLS+bFpCAjGy8IJ7dBooR0PRF9CE6PJuicUSbwLkmal0jApb1wrvLPkEJ7Qn7gGEh63x+wR+eDn/xf4V2/wtKxQaZrsIRIA/mWQde2qsGRALKoIVOmyNLmgAYNgXQuOlfQxx6hAw13DO9uqIdd3Ux5aWrmlza6thT6/CUZsYXFRVdBN5+GHvYfjmqP2F0/0GfAVbEOPxqW9bFKIPUv4kWiKPk0XHwdOOQ/1dBbpNtKW3FIQi28dzm9JR80UKOO72utvB2dW3c0dr8rq4NG6hrOjyJceozAdnhQafUXwhC6a4UNLFWkhJlZ4KGl56Hw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=microsoft.com; s=arcselector10001; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-AntiSpam-MessageData-ChunkCount:X-MS-Exchange-AntiSpam-MessageData-0:X-MS-Exchange-AntiSpam-MessageData-1; bh=AfhgnReNOkT4JdoJm3g9gNI4Uz3uOoqKYEDdE0SAEG8=; b=c8/0fsmcW7YSa8V4P/St0bVMfbZum70AKeN+soVQDqTSlzJ5d0Y8CJLr0XHoPiiPYHj6RKs8KIEmuj937tCK92n50Ig5N0vIKc2JkhJFQ6rKsRJvpTA1dWHybdt4ioXLFWw14cOzlruv84LUuah8g+qoIJcuPsV4SNt4CzVLhDNkV++rjTXa5GJfCZMseHHh4UdI4M3UDtBtNZKK+QkXoHyu3k9d2lk2APrm5I2kXunR69OKLjdQz5gsnDs4kWVBOUoL81iRBxK6nhsK023qBX8D1Uu7WNn83i0WsURTC0SKvJhslIiEGXp5r5tQZDcjqPQ7SwU8wu6x/0gHd6Q9DQ== ARC-Authentication-Results: i=1; mx.microsoft.com 1; spf=none; dmarc=none; dkim=none; arc=none DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=live.com; s=selector1; h=From:Date:Subject:Message-ID:Content-Type:MIME-Version:X-MS-Exchange-SenderADCheck; bh=AfhgnReNOkT4JdoJm3g9gNI4Uz3uOoqKYEDdE0SAEG8=; b=B3rcunuEGTW/3ucUd1NK/LvjFJ/JLzwKiRq+vspexo3ZWIV21IZhuosDVBfPkAC2exwVXpu8GYHh9ozdVxI3xB5Y61gAivImP/VG65clwxxldtPz2l9ZzTVH09DHRyuR7OL29/NhrDtbYfkxuMX41iZFg2HP+7yxLOnNC20tfyb3tFd90ahyR7VcUOaiP+fTAub6C9cbq5macbtIIA78cbZwW3dloe8+Eb221ijaYak5hkSakVzxy9eaLjVTFFo5GeZZOvUDS7nf8Lpr4/XikOxURPTniTPtRNz2vglt+B3ehR3zSWNpVQytb//eltsRAKJRb8Sqi9vVhGw1QNFYAw== Received: from PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c01:f7::14) by PN2PR01MB9735.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c01:12d::11) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_256_GCM_SHA384) id 15.20.8632.32; Tue, 15 Apr 2025 16:17:36 +0000 Received: from PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM ([fe80::324:c085:10c8:4e77]) by PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM ([fe80::324:c085:10c8:4e77%5]) with mapi id 15.20.8632.035; Tue, 15 Apr 2025 16:17:36 +0000 Message-ID: Date: Tue, 15 Apr 2025 21:47:32 +0530 User-Agent: Mozilla Thunderbird Content-Language: en-US To: Jiri Kosina , Jiri Kosina , Benjamin Tissoires , Benjamin Tissoires Cc: Linux Kernel Mailing List , linux-input@vger.kernel.org From: Aditya Garg Subject: [PATCH RESEND v2] HID: magicmouse: Apple Magic Mouse 2 USB-C support X-ClientProxiedBy: MA0P287CA0003.INDP287.PROD.OUTLOOK.COM (2603:1096:a01:d9::20) To PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM (2603:1096:c01:f7::14) X-Microsoft-Original-Message-ID: Precedence: bulk X-Mailing-List: linux-input@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 X-MS-Exchange-MessageSentRepresentingType: 1 X-MS-PublicTrafficType: Email X-MS-TrafficTypeDiagnostic: PN3PR01MB9597:EE_|PN2PR01MB9735:EE_ X-MS-Office365-Filtering-Correlation-Id: c7348f60-76f7-46ca-740f-08dd7c3908b0 X-Microsoft-Antispam: BCL:0;ARA:14566002|461199028|5062599005|8060799006|6090799003|19110799003|5072599009|15080799006|7092599003|440099028|3412199025|41001999003; X-Microsoft-Antispam-Message-Info: =?utf-8?q?iVDZbPnLz84iTyjjxAZFb0QB/MxHCaG?= =?utf-8?q?PRlfUOlkcG4cMsuOGKR2GyscdEJzns4ZKOi2q2ZON42kWBWqXqtxM1wjolart0TIq?= =?utf-8?q?4uAou74C77KQyW3HgNMu+m4mKklQivUcXsAhW253BEtaSOb5rQFTuzBfEYAOi29z6?= =?utf-8?q?I0gRFauTPzNLFRYN9hGF1rRkkbgYutkJxzPttbXFivdX6xCQhxyms9CyxEc6BW+8A?= =?utf-8?q?DhgSGIZo/FLwmAhslss+s2vh84EHYDXlRttVvANWbld4kba7DWesAp3kNpu2A4zt4?= =?utf-8?q?FgpsdRyEjLtBuba34J5hXNYoIUlDLTjQP0VwMs62onlrTmH6lTLvTVtznfGLq8p7w?= =?utf-8?q?iq6RV0pZLgWZ6S7mO8rFgdbd7JPoLzrQjyE+/bK0jL7ioKkAJoqnle3JfSfAMAur6?= =?utf-8?q?+YQ5M8Y4PoPLQV5d6LwKcDNY4CCw2Lgu0jIkF0S0ilJTAmBbDWxCDbr2W+UOhjmlb?= =?utf-8?q?T/il6qErgA8pKtgYy/X+OFfqy/eojsRe72BMuS1+lTHN+NpkQ1P8rPUi6eQqES/6l?= =?utf-8?q?lHEuXSrfTYKwCNIoMidsLK5FTSbyiKEngxHPSDdCC/VcnCCYJSVLD+SdziUqgMR0r?= =?utf-8?q?WIB2+qBXapGoSNzf7ibtWcvuQECek8vlLZO8sTH324LwG14tW2k4zOwMuZloZCeDD?= =?utf-8?q?66B/guFCRMQTyEkzS0Au7VtAaRTjSY7wjL1lD+mD7nuT+W5O860meMeLLQkfu2Q3v?= =?utf-8?q?eg8gTaRWqZufdjn3+m05PFGueQ6280QVcKAasAna6rJTSYJXaD8uWPNOOJdgrVz9Y?= =?utf-8?q?WYen1fWPrzjrwqiDCuhZswePp1UYamK8Az+tdNZtBnUYg5CNK9yy1JT3j4WO+WHMm?= =?utf-8?q?Spg+lhAigPhnBztklYxkrYJ8DAldKy9Nx0vUSTTUUHqLS8Y6HwaK0RhByx+OEXN5o?= =?utf-8?q?uzE4ym7N92CiLEIzuexymnmBgtX4Mzxgm9Iz/WsavHDyZfX/OcE12KrpswM3U+Brs?= =?utf-8?q?tjCJuD3jqxsl9ekRXC0WnTfm5OHQna7avRqK2f/q5m8wrNrPy37CHtb0n07IvosP2?= =?utf-8?q?z9b7bMqtbmy7hJVs5N/TIOZf0XeCgFInAs8KTgESL8Ndt6AOXyViM5Vb/JuxRjUVf?= =?utf-8?q?P1c1NVLwibZNugVexIg4neOo1RGDvWZtG/ro159d1oGZ/hrK0aqhgKcKnFPYSIPpZ?= =?utf-8?q?R4bNPD0SJT+DR8EScdURqT7DFRApB6vuETFQA=3D=3D?= X-MS-Exchange-AntiSpam-MessageData-ChunkCount: 1 X-MS-Exchange-AntiSpam-MessageData-0: =?utf-8?q?+EADUN/mHYzVkpU5wHsKZHW10wGV?= =?utf-8?q?Ndh1Zan4lUmCZFSfvSdrK8ZB7BgL6ggWpt5uSwfs0OqtoyI5dleLk4abRrYZyv6c4?= =?utf-8?q?sWpL9zdiW+9anZVAXqptq54OvJmcCGhKpyn2W0mQOSVVP51o8HkW9f6JQPTS/cJA3?= =?utf-8?q?9sQr5E9lpyI05vyz6OYgHINlXL+zU0rksRx/dZkmFfwHWau8jhzAOit8wjjI1Wz3d?= =?utf-8?q?hRV2pnwIt2RZLUE21Ft3gCyVUAbbTdqGQNzOHJvYG+K3Rw4T2tUKjJjHRGLM1Eg9K?= =?utf-8?q?yg1mPGIL5a6dyH2Q1+i070OZ1eJ5Q1MKQ/F2FevIExswh/mzYwKLIToxHVyg3ochP?= =?utf-8?q?XGaSxbMMk2IceL8oTvk/DlOLgmWXnKLskVvI8TNysf4nrOLDCAbmLXYji5GWpayYG?= =?utf-8?q?fzzi+moVGgjMdk4s1axzV04vDQrIIR6gZwpW4LUaT8YvCmkcsxFcBIS6q3cQcjVWb?= =?utf-8?q?25yK9J19y664B3sL4uaQhzMQcCyCpZr3qEcdIe4355t0MH4QjSfL6+J4P2x+mTjng?= =?utf-8?q?BQ9neJtcpuYHtTK/X7epWlHkv7urc2NTQwzXUpMxACsjns0UKhzBRyN2NQMM6IHjB?= =?utf-8?q?Na9BwABafDNc23Ljs1NIYFCu/XZWG8GDcu/TeDp8/Va2BsnQeupnfawhkF26Xzt2e?= =?utf-8?q?kibZRvq2oUIpT5DT7r/3C1GySC5i6TJj7mZsI/P83ffm7IJ8THn5k5udW+X/7KG1F?= =?utf-8?q?OF4ZyN/r/3MJ0+Ej4YvJbVeeXNM71uUruRHpT490sQJxw4j05kEOe/IsoO8q1TM/6?= =?utf-8?q?wR/Dkm8Peam3lThZfOxodLPjHzzUCxNrXXt7FjNunyld7jq2Bhgptqk9NpJsahlaW?= =?utf-8?q?rJwf6Nd9sLkFt8JUewdvQT2DFyXvEt/RN40O0b4leJjI5jA/tJPbZArkNRyhE+H76?= =?utf-8?q?vCL17Heju18Qr5ImGCA6ZmyG/ZbdhjdHZnqPW1Bp1HQr+A/AapCDUtz0+u0NINiV7?= =?utf-8?q?Vfdj0l/sKA6w92PE5L1z3hzW9Ze9p/RbEoKDsuuD/CdIrCxDEDqnHk/Hicc6zySnr?= =?utf-8?q?g8Sit42VZdOCcZjvXN5Rya3A67391FexdYxIxIHAwxLlmBS5Ps1KgrXf3h1qp7Sa4?= =?utf-8?q?Y8KXeuEMIGWy45ymMk87GnvB1ZabOZp5BN3/qGMuDp6rIDEOFNqC9IEA9jL0aUlTs?= =?utf-8?q?iNTV3iGRmLS2tbOWsX1dIR6+fCE2z3Q5IsRzhUPg0uQIV3yDgFnOa0A79Bdjrf4dc?= =?utf-8?q?7HI/df25yWzEsrh8SXB+LKb2ojuLMq0seDilY5YT8QlRW/mmIzBFcQTrIZWw6MH5V?= =?utf-8?q?EzByVD2k3eevWYXX?= X-OriginatorOrg: sct-15-20-7719-20-msonline-outlook-ae5c4.templateTenant X-MS-Exchange-CrossTenant-Network-Message-Id: c7348f60-76f7-46ca-740f-08dd7c3908b0 X-MS-Exchange-CrossTenant-AuthSource: PN3PR01MB9597.INDPRD01.PROD.OUTLOOK.COM X-MS-Exchange-CrossTenant-AuthAs: Internal X-MS-Exchange-CrossTenant-OriginalArrivalTime: 15 Apr 2025 16:17:35.9652 (UTC) X-MS-Exchange-CrossTenant-FromEntityHeader: Hosted X-MS-Exchange-CrossTenant-Id: 84df9e7f-e9f6-40af-b435-aaaaaaaaaaaa X-MS-Exchange-CrossTenant-RMS-PersistedConsumerOrg: 00000000-0000-0000-0000-000000000000 X-MS-Exchange-Transport-CrossTenantHeadersStamped: PN2PR01MB9735 From: Aditya Garg This patch adds support for USB-C model of Apple Magic Mouse 2. Except for the hardware ID, it should resemble the existing configuration for the older Magic Mouse 2. Signed-off-by: Aditya Garg --- v2: Fix broken patch drivers/hid/hid-ids.h | 1 + drivers/hid/hid-magicmouse.c | 74 ++++++++++++++++++++++++------------ 2 files changed, 51 insertions(+), 24 deletions(-) diff --git a/drivers/hid/hid-ids.h b/drivers/hid/hid-ids.h index 288a2b864..2d3f96af6 100644 --- a/drivers/hid/hid-ids.h +++ b/drivers/hid/hid-ids.h @@ -92,6 +92,7 @@ #define USB_DEVICE_ID_APPLE_MIGHTYMOUSE 0x0304 #define USB_DEVICE_ID_APPLE_MAGICMOUSE 0x030d #define USB_DEVICE_ID_APPLE_MAGICMOUSE2 0x0269 +#define USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC 0x0323 #define USB_DEVICE_ID_APPLE_MAGICTRACKPAD 0x030e #define USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 0x0265 #define USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC 0x0324 diff --git a/drivers/hid/hid-magicmouse.c b/drivers/hid/hid-magicmouse.c index a76f17158..423d50702 100644 --- a/drivers/hid/hid-magicmouse.c +++ b/drivers/hid/hid-magicmouse.c @@ -218,7 +218,8 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tda int pressure = 0; if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE || - input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) { id = (tdata[6] << 2 | tdata[5] >> 6) & 0xf; x = (tdata[1] << 28 | tdata[0] << 20) >> 20; y = -((tdata[2] << 24 | tdata[1] << 16) >> 20); @@ -370,7 +371,8 @@ static void magicmouse_emit_touch(struct magicmouse_sc *msc, int raw_id, u8 *tda if (report_undeciphered) { if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE || - input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) input_event(input, EV_MSC, MSC_RAW, tdata[7]); else if (input->id.product != USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 && @@ -497,7 +499,8 @@ static int magicmouse_raw_event(struct hid_device *hdev, } if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE || - input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) { magicmouse_emit_buttons(msc, clicks & 3); input_report_rel(input, REL_X, x); input_report_rel(input, REL_Y, y); @@ -519,7 +522,8 @@ static int magicmouse_event(struct hid_device *hdev, struct hid_field *field, struct hid_usage *usage, __s32 value) { struct magicmouse_sc *msc = hid_get_drvdata(hdev); - if (msc->input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 && + if ((msc->input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + msc->input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) && field->report->id == MOUSE2_REPORT_ID) { /* * magic_mouse_raw_event has done all the work. Skip hidinput. @@ -540,7 +544,8 @@ static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hd __set_bit(EV_KEY, input->evbit); if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE || - input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) { __set_bit(BTN_LEFT, input->keybit); __set_bit(BTN_RIGHT, input->keybit); if (emulate_3button) @@ -625,7 +630,8 @@ static int magicmouse_setup_input(struct input_dev *input, struct hid_device *hd * inverse of the reported Y. */ if (input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE || - input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + input->id.product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC) { input_set_abs_params(input, ABS_MT_ORIENTATION, -31, 32, 1, 0); input_set_abs_params(input, ABS_MT_POSITION_X, MOUSE_MIN_X, MOUSE_MAX_X, 4, 0); @@ -741,19 +747,25 @@ static int magicmouse_enable_multitouch(struct hid_device *hdev) int ret; int feature_size; - if (hdev->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 || - hdev->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC) { - if (hdev->vendor == BT_VENDOR_ID_APPLE) { + switch (hdev->product) { + case USB_DEVICE_ID_APPLE_MAGICTRACKPAD2: + case USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC: + switch (hdev->vendor) { + case BT_VENDOR_ID_APPLE: feature_size = sizeof(feature_mt_trackpad2_bt); feature = feature_mt_trackpad2_bt; - } else { /* USB_VENDOR_ID_APPLE */ + break; + default: /* USB_VENDOR_ID_APPLE */ feature_size = sizeof(feature_mt_trackpad2_usb); feature = feature_mt_trackpad2_usb; } - } else if (hdev->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + break; + case USB_DEVICE_ID_APPLE_MAGICMOUSE2: + case USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC: feature_size = sizeof(feature_mt_mouse2); feature = feature_mt_mouse2; - } else { + break; + default: feature_size = sizeof(feature_mt); feature = feature_mt; } @@ -787,6 +799,7 @@ static int magicmouse_fetch_battery(struct hid_device *hdev) if (!hdev->battery || hdev->vendor != USB_VENDOR_ID_APPLE || (hdev->product != USB_DEVICE_ID_APPLE_MAGICMOUSE2 && + hdev->product != USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC && hdev->product != USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 && hdev->product != USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC)) return -1; @@ -857,6 +870,7 @@ static int magicmouse_probe(struct hid_device *hdev, if (id->vendor == USB_VENDOR_ID_APPLE && (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC || ((id->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 || id->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC) && hdev->type != HID_TYPE_USBMOUSE))) @@ -868,21 +882,27 @@ static int magicmouse_probe(struct hid_device *hdev, goto err_stop_hw; } - if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE) - report = hid_register_report(hdev, HID_INPUT_REPORT, - MOUSE_REPORT_ID, 0); - else if (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) - report = hid_register_report(hdev, HID_INPUT_REPORT, - MOUSE2_REPORT_ID, 0); - else if (id->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 || - id->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC) { - if (id->vendor == BT_VENDOR_ID_APPLE) + switch (id->product) { + case USB_DEVICE_ID_APPLE_MAGICMOUSE: + report = hid_register_report(hdev, HID_INPUT_REPORT, MOUSE_REPORT_ID, 0); + break; + case USB_DEVICE_ID_APPLE_MAGICMOUSE2: + case USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC: + report = hid_register_report(hdev, HID_INPUT_REPORT, MOUSE2_REPORT_ID, 0); + break; + case USB_DEVICE_ID_APPLE_MAGICTRACKPAD2: + case USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC: + switch (id->vendor) { + case BT_VENDOR_ID_APPLE: report = hid_register_report(hdev, HID_INPUT_REPORT, TRACKPAD2_BT_REPORT_ID, 0); - else /* USB_VENDOR_ID_APPLE */ + break; + default: report = hid_register_report(hdev, HID_INPUT_REPORT, TRACKPAD2_USB_REPORT_ID, 0); - } else { /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */ + } + break; + default: /* USB_DEVICE_ID_APPLE_MAGICTRACKPAD */ report = hid_register_report(hdev, HID_INPUT_REPORT, TRACKPAD_REPORT_ID, 0); report = hid_register_report(hdev, HID_INPUT_REPORT, @@ -909,7 +929,8 @@ static int magicmouse_probe(struct hid_device *hdev, hid_err(hdev, "unable to request touch data (%d)\n", ret); goto err_stop_hw; } - if (ret == -EIO && id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2) { + if (ret == -EIO && (id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + id->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC)) { schedule_delayed_work(&msc->work, msecs_to_jiffies(500)); } @@ -945,6 +966,7 @@ static const __u8 *magicmouse_report_fixup(struct hid_device *hdev, __u8 *rdesc, */ if (hdev->vendor == USB_VENDOR_ID_APPLE && (hdev->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2 || + hdev->product == USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC || hdev->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2 || hdev->product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2_USBC) && *rsize == 83 && rdesc[46] == 0x84 && rdesc[58] == 0x85) { @@ -971,6 +993,10 @@ static const struct hid_device_id magic_mice[] = { USB_DEVICE_ID_APPLE_MAGICMOUSE2), .driver_data = 0 }, { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICMOUSE2), .driver_data = 0 }, + { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE, + USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC), .driver_data = 0 }, + { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, + USB_DEVICE_ID_APPLE_MAGICMOUSE2_USBC), .driver_data = 0 }, { HID_BLUETOOTH_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_MAGICTRACKPAD), .driver_data = 0 }, { HID_BLUETOOTH_DEVICE(BT_VENDOR_ID_APPLE,