Merge branch 'for-5.17/apple' into for-linus
authorJiri Kosina <jkosina@suse.cz>
Mon, 10 Jan 2022 08:54:31 +0000 (09:54 +0100)
committerJiri Kosina <jkosina@suse.cz>
Mon, 10 Jan 2022 08:54:31 +0000 (09:54 +0100)
- Apple Magic Keyboard support improvements (José Expósito, Alex Henrie,
  Benjamin Berg)

1  2 
drivers/hid/hid-ids.h
drivers/hid/hid-magicmouse.c
drivers/hid/hid-quirks.c

diff --combined drivers/hid/hid-ids.h
  #define USB_DEVICE_ID_APPLE_IRCONTROL4        0x8242
  #define USB_DEVICE_ID_APPLE_IRCONTROL5        0x8243
  #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_VENDOR_ID_ASUS            0x0486
  #define USB_DEVICE_ID_ASUS_T91MT      0x0185
  #define USB_DEVICE_ID_TOSHIBA_CLICK_L9W       0x0401
  #define USB_DEVICE_ID_HP_X2           0x074d
  #define USB_DEVICE_ID_HP_X2_10_COVER  0x0755
 +#define I2C_DEVICE_ID_HP_ENVY_X360_15 0x2d05
  #define I2C_DEVICE_ID_HP_SPECTRE_X360_15      0x2817
 +#define USB_DEVICE_ID_ASUS_UX550VE_TOUCHSCREEN        0x2544
  #define USB_DEVICE_ID_ASUS_UX550_TOUCHSCREEN  0x2706
  #define I2C_DEVICE_ID_SURFACE_GO_TOUCHSCREEN  0x261A
  
  #define USB_DEVICE_ID_GOOGLE_MAGNEMITE        0x503d
  #define USB_DEVICE_ID_GOOGLE_MOONBALL 0x5044
  #define USB_DEVICE_ID_GOOGLE_DON      0x5050
 +#define USB_DEVICE_ID_GOOGLE_EEL      0x5057
  
  #define USB_VENDOR_ID_GOTOP           0x08f2
  #define USB_DEVICE_ID_SUPER_Q2                0x007f
  #define USB_DEVICE_ID_MS_TOUCH_COVER_2   0x07a7
  #define USB_DEVICE_ID_MS_TYPE_COVER_2    0x07a9
  #define USB_DEVICE_ID_MS_POWER_COVER     0x07da
 +#define USB_DEVICE_ID_MS_SURFACE3_COVER               0x07de
  #define USB_DEVICE_ID_MS_XBOX_ONE_S_CONTROLLER        0x02fd
  #define USB_DEVICE_ID_MS_PIXART_MOUSE    0x00cb
  #define USB_DEVICE_ID_8BITDO_SN30_PRO_PLUS      0x02e0
@@@ -51,6 -51,8 +51,8 @@@ static bool report_undeciphered
  module_param(report_undeciphered, bool, 0644);
  MODULE_PARM_DESC(report_undeciphered, "Report undeciphered multi-touch state field using a MSC_RAW event");
  
+ #define TRACKPAD2_2021_BT_VERSION 0x110
  #define TRACKPAD_REPORT_ID 0x28
  #define TRACKPAD2_USB_REPORT_ID 0x02
  #define TRACKPAD2_BT_REPORT_ID 0x31
@@@ -256,11 -258,8 +258,11 @@@ static void magicmouse_emit_touch(struc
                unsigned long now = jiffies;
                int step_x = msc->touches[id].scroll_x - x;
                int step_y = msc->touches[id].scroll_y - y;
 -              int step_hr = ((64 - (int)scroll_speed) * msc->scroll_accel) /
 -                            SCROLL_HR_STEPS;
 +              int step_hr =
 +                      max_t(int,
 +                            ((64 - (int)scroll_speed) * msc->scroll_accel) /
 +                                      SCROLL_HR_STEPS,
 +                            1);
                int step_x_hr = msc->touches[id].scroll_x_hr - x;
                int step_y_hr = msc->touches[id].scroll_y_hr - y;
  
@@@ -538,10 -537,22 +540,22 @@@ static int magicmouse_setup_input(struc
                        __set_bit(REL_HWHEEL_HI_RES, input->relbit);
                }
        } else if (input->id.product == USB_DEVICE_ID_APPLE_MAGICTRACKPAD2) {
-               /* setting the device name to ensure the same driver settings
-                * get loaded, whether connected through bluetooth or USB
+               /* If the trackpad has been connected to a Mac, the name is
+                * automatically personalized, e.g., "José Expósito's Trackpad".
+                * When connected through Bluetooth, the personalized name is
+                * reported, however, when connected through USB the generic
+                * name is reported.
+                * Set the device name to ensure the same driver settings get
+                * loaded, whether connected through bluetooth or USB.
                 */
-               input->name = "Apple Inc. Magic Trackpad 2";
+               if (hdev->vendor == BT_VENDOR_ID_APPLE) {
+                       if (input->id.version == TRACKPAD2_2021_BT_VERSION)
+                               input->name = "Apple Inc. Magic Trackpad";
+                       else
+                               input->name = "Apple Inc. Magic Trackpad 2";
+               } else { /* USB_VENDOR_ID_APPLE */
+                       input->name = hdev->name;
+               }
  
                __clear_bit(EV_MSC, input->evbit);
                __clear_bit(BTN_0, input->keybit);
diff --combined drivers/hid/hid-quirks.c
@@@ -124,7 -124,6 +124,7 @@@ static const struct hid_device_id hid_q
        { HID_USB_DEVICE(USB_VENDOR_ID_MCS, USB_DEVICE_ID_MCS_GAMEPADBLOCK), HID_QUIRK_MULTI_INPUT },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_PIXART_MOUSE), HID_QUIRK_ALWAYS_POLL },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_POWER_COVER), HID_QUIRK_NO_INIT_REPORTS },
 +      { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE3_COVER), HID_QUIRK_NO_INIT_REPORTS },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_SURFACE_PRO_2), HID_QUIRK_NO_INIT_REPORTS },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TOUCH_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
        { HID_USB_DEVICE(USB_VENDOR_ID_MICROSOFT, USB_DEVICE_ID_MS_TYPE_COVER_2), HID_QUIRK_NO_INIT_REPORTS },
@@@ -304,6 -303,7 +304,7 @@@ static const struct hid_device_id hid_h
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_FOUNTAIN_TP_ONLY) },
        { 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) },
  #endif
  #if IS_ENABLED(CONFIG_HID_APPLEIR)
        { HID_USB_DEVICE(USB_VENDOR_ID_APPLE, USB_DEVICE_ID_APPLE_IRCONTROL) },