Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge tag 'input-for-v6.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input fixes from Dmitry Torokhov:

- Synaptics touchpad on multiple laptops (Dynabook Portege X30L-G,
Dynabook Portege X30-D, TUXEDO InfinityBook Pro 14 v5, Dell Precision
M3800, HP Elitebook 850 G1) switched from PS/2 to SMBus mode

- a number of new controllers added to xpad driver: HORI Drum
controller, PowerA Fusion Pro 4, PowerA MOGA XP-Ultra controller,
8BitDo Ultimate 2 Wireless Controller, 8BitDo Ultimate 3-mode
Controller, Hyperkin DuchesS Xbox One controller

- fixes to xpad driver to properly handle Mad Catz JOYTECH NEO SE
Advanced and PDP Mirror's Edge Official controllers

- fixes to xpad driver to properly handle "Share" button on some
controllers

- a fix for device initialization timing and for waking up the
controller in cyttsp5 driver

- a fix for hisi_powerkey driver to properly wake up from s2idle state

- other assorted cleanups and fixes

* tag 'input-for-v6.15-rc5' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
Input: xpad - fix xpad_device sorting
Input: xpad - add support for several more controllers
Input: xpad - fix Share button on Xbox One controllers
Input: xpad - fix two controller table values
Input: hisi_powerkey - enable system-wakeup for s2idle
Input: synaptics - enable InterTouch on Dell Precision M3800
Input: synaptics - enable InterTouch on TUXEDO InfinityBook Pro 14 v5
Input: synaptics - enable InterTouch on Dynabook Portege X30L-G
Input: synaptics - enable InterTouch on Dynabook Portege X30-D
Input: synaptics - enable SMBus for HP Elitebook 850 G1
Input: mtk-pmic-keys - fix possible null pointer dereference
Input: xpad - add support for 8BitDo Ultimate 2 Wireless Controller
Input: cyttsp5 - fix power control issue on wakeup
MAINTAINERS: .mailmap: update Mattijs Korpershoek's email address
dt-bindings: mediatek,mt6779-keypad: Update Mattijs' email address
Input: stmpe-ts - use module alias instead of device table
Input: cyttsp5 - ensure minimum reset pulse width
Input: sparcspkr - avoid unannotated fall-through
input/joystick: magellan: Mark __nonstring look-up table

+65 -38
+1
.mailmap
··· 485 485 Matthieu Baerts <matttbe@kernel.org> <matthieu.baerts@tessares.net> 486 486 Matthieu CASTET <castet.matthieu@free.fr> 487 487 Matti Vaittinen <mazziesaccount@gmail.com> <matti.vaittinen@fi.rohmeurope.com> 488 + Mattijs Korpershoek <mkorpershoek@kernel.org> <mkorpershoek@baylibre.com> 488 489 Matt Ranostay <matt@ranostay.sg> <matt.ranostay@konsulko.com> 489 490 Matt Ranostay <matt@ranostay.sg> <matt@ranostay.consulting> 490 491 Matt Ranostay <matt@ranostay.sg> Matthew Ranostay <mranostay@embeddedalley.com>
+1 -1
Documentation/devicetree/bindings/input/mediatek,mt6779-keypad.yaml
··· 7 7 title: Mediatek's Keypad Controller 8 8 9 9 maintainers: 10 - - Mattijs Korpershoek <mkorpershoek@baylibre.com> 10 + - Mattijs Korpershoek <mkorpershoek@kernel.org> 11 11 12 12 allOf: 13 13 - $ref: /schemas/input/matrix-keymap.yaml#
+1 -1
MAINTAINERS
··· 15072 15072 F: drivers/media/platform/mediatek/jpeg/ 15073 15073 15074 15074 MEDIATEK KEYPAD DRIVER 15075 - M: Mattijs Korpershoek <mkorpershoek@baylibre.com> 15075 + M: Mattijs Korpershoek <mkorpershoek@kernel.org> 15076 15076 S: Supported 15077 15077 F: Documentation/devicetree/bindings/input/mediatek,mt6779-keypad.yaml 15078 15078 F: drivers/input/keyboard/mt6779-keypad.c
+1 -1
drivers/input/joystick/magellan.c
··· 48 48 49 49 static int magellan_crunch_nibbles(unsigned char *data, int count) 50 50 { 51 - static unsigned char nibbles[16] __nonstring = "0AB3D56GH9:K<MN?"; 51 + static const unsigned char nibbles[16] __nonstring = "0AB3D56GH9:K<MN?"; 52 52 53 53 do { 54 54 if (data[count] == nibbles[data[count] & 0xf])
+31 -18
drivers/input/joystick/xpad.c
··· 77 77 * xbox d-pads should map to buttons, as is required for DDR pads 78 78 * but we map them to axes when possible to simplify things 79 79 */ 80 - #define MAP_DPAD_TO_BUTTONS (1 << 0) 81 - #define MAP_TRIGGERS_TO_BUTTONS (1 << 1) 82 - #define MAP_STICKS_TO_NULL (1 << 2) 83 - #define MAP_SELECT_BUTTON (1 << 3) 84 - #define MAP_PADDLES (1 << 4) 85 - #define MAP_PROFILE_BUTTON (1 << 5) 80 + #define MAP_DPAD_TO_BUTTONS BIT(0) 81 + #define MAP_TRIGGERS_TO_BUTTONS BIT(1) 82 + #define MAP_STICKS_TO_NULL BIT(2) 83 + #define MAP_SHARE_BUTTON BIT(3) 84 + #define MAP_PADDLES BIT(4) 85 + #define MAP_PROFILE_BUTTON BIT(5) 86 + #define MAP_SHARE_OFFSET BIT(6) 86 87 87 88 #define DANCEPAD_MAP_CONFIG (MAP_DPAD_TO_BUTTONS | \ 88 89 MAP_TRIGGERS_TO_BUTTONS | MAP_STICKS_TO_NULL) ··· 136 135 { 0x03f0, 0x048D, "HyperX Clutch", 0, XTYPE_XBOX360 }, /* wireless */ 137 136 { 0x03f0, 0x0495, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, 138 137 { 0x03f0, 0x07A0, "HyperX Clutch Gladiate RGB", 0, XTYPE_XBOXONE }, 139 - { 0x03f0, 0x08B6, "HyperX Clutch Gladiate", 0, XTYPE_XBOXONE }, /* v2 */ 138 + { 0x03f0, 0x08B6, "HyperX Clutch Gladiate", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, /* v2 */ 140 139 { 0x03f0, 0x09B4, "HyperX Clutch Tanto", 0, XTYPE_XBOXONE }, 141 140 { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX }, 142 141 { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX }, 143 142 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, 144 - { 0x044f, 0xd01e, "ThrustMaster, Inc. ESWAP X 2 ELDEN RING EDITION", 0, XTYPE_XBOXONE }, 145 143 { 0x044f, 0x0f10, "Thrustmaster Modena GT Wheel", 0, XTYPE_XBOX }, 146 144 { 0x044f, 0xb326, "Thrustmaster Gamepad GP XID", 0, XTYPE_XBOX360 }, 145 + { 0x044f, 0xd01e, "ThrustMaster, Inc. ESWAP X 2 ELDEN RING EDITION", 0, XTYPE_XBOXONE }, 147 146 { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX }, 148 147 { 0x045e, 0x0285, "Microsoft X-Box pad (Japan)", 0, XTYPE_XBOX }, 149 148 { 0x045e, 0x0287, "Microsoft Xbox Controller S", 0, XTYPE_XBOX }, ··· 160 159 { 0x045e, 0x0719, "Xbox 360 Wireless Receiver", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360W }, 161 160 { 0x045e, 0x0b00, "Microsoft X-Box One Elite 2 pad", MAP_PADDLES, XTYPE_XBOXONE }, 162 161 { 0x045e, 0x0b0a, "Microsoft X-Box Adaptive Controller", MAP_PROFILE_BUTTON, XTYPE_XBOXONE }, 163 - { 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE }, 162 + { 0x045e, 0x0b12, "Microsoft Xbox Series S|X Controller", MAP_SHARE_BUTTON | MAP_SHARE_OFFSET, XTYPE_XBOXONE }, 164 163 { 0x046d, 0xc21d, "Logitech Gamepad F310", 0, XTYPE_XBOX360 }, 165 164 { 0x046d, 0xc21e, "Logitech Gamepad F510", 0, XTYPE_XBOX360 }, 166 165 { 0x046d, 0xc21f, "Logitech Gamepad F710", 0, XTYPE_XBOX360 }, ··· 206 205 { 0x0738, 0x9871, "Mad Catz Portable Drum", 0, XTYPE_XBOX360 }, 207 206 { 0x0738, 0xb726, "Mad Catz Xbox controller - MW2", 0, XTYPE_XBOX360 }, 208 207 { 0x0738, 0xb738, "Mad Catz MVC2TE Stick 2", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 209 - { 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", XTYPE_XBOX360 }, 208 + { 0x0738, 0xbeef, "Mad Catz JOYTECH NEO SE Advanced GamePad", 0, XTYPE_XBOX360 }, 210 209 { 0x0738, 0xcb02, "Saitek Cyborg Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 }, 211 210 { 0x0738, 0xcb03, "Saitek P3200 Rumble Pad - PC/Xbox 360", 0, XTYPE_XBOX360 }, 212 211 { 0x0738, 0xcb29, "Saitek Aviator Stick AV8R02", 0, XTYPE_XBOX360 }, 213 212 { 0x0738, 0xf738, "Super SFIV FightStick TE S", 0, XTYPE_XBOX360 }, 214 213 { 0x07ff, 0xffff, "Mad Catz GamePad", 0, XTYPE_XBOX360 }, 215 - { 0x0b05, 0x1a38, "ASUS ROG RAIKIRI", 0, XTYPE_XBOXONE }, 214 + { 0x0b05, 0x1a38, "ASUS ROG RAIKIRI", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 216 215 { 0x0b05, 0x1abb, "ASUS ROG RAIKIRI PRO", 0, XTYPE_XBOXONE }, 217 216 { 0x0c12, 0x0005, "Intec wireless", 0, XTYPE_XBOX }, 218 217 { 0x0c12, 0x8801, "Nyko Xbox Controller", 0, XTYPE_XBOX }, ··· 241 240 { 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE }, 242 241 { 0x0e6f, 0x0147, "PDP Marvel Xbox One Controller", 0, XTYPE_XBOXONE }, 243 242 { 0x0e6f, 0x015c, "PDP Xbox One Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, 244 - { 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", XTYPE_XBOXONE }, 243 + { 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", 0, XTYPE_XBOXONE }, 245 244 { 0x0e6f, 0x0161, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, 246 245 { 0x0e6f, 0x0162, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, 247 246 { 0x0e6f, 0x0163, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, ··· 282 281 { 0x0f0d, 0x00dc, "HORIPAD FPS for Nintendo Switch", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 283 282 { 0x0f0d, 0x0151, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE }, 284 283 { 0x0f0d, 0x0152, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE }, 284 + { 0x0f0d, 0x01b2, "HORI Taiko No Tatsujin Drum Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 285 285 { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, 286 286 { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, 287 287 { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, ··· 355 353 { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE }, 356 354 { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE }, 357 355 { 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 }, 356 + { 0x20d6, 0x400b, "PowerA FUSION Pro 4 Wired Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 357 + { 0x20d6, 0x890b, "PowerA MOGA XP-Ultra Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 358 358 { 0x2345, 0xe00b, "Machenike G5 Pro Controller", 0, XTYPE_XBOX360 }, 359 359 { 0x24c6, 0x5000, "Razer Atrox Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 360 360 { 0x24c6, 0x5300, "PowerA MINI PROEX Controller", 0, XTYPE_XBOX360 }, ··· 388 384 { 0x294b, 0x3404, "Snakebyte GAMEPAD RGB X", 0, XTYPE_XBOXONE }, 389 385 { 0x2993, 0x2001, "TECNO Pocket Go", 0, XTYPE_XBOX360 }, 390 386 { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, 387 + { 0x2dc8, 0x200f, "8BitDo Ultimate 3-mode Controller for Xbox", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 391 388 { 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 }, 392 389 { 0x2dc8, 0x3109, "8BitDo Ultimate Wireless Bluetooth", 0, XTYPE_XBOX360 }, 393 390 { 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 }, 391 + { 0x2dc8, 0x310b, "8BitDo Ultimate 2 Wireless Controller", 0, XTYPE_XBOX360 }, 394 392 { 0x2dc8, 0x6001, "8BitDo SN30 Pro", 0, XTYPE_XBOX360 }, 393 + { 0x2e24, 0x0423, "Hyperkin DuchesS Xbox One pad", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 395 394 { 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE }, 396 395 { 0x2e24, 0x1688, "Hyperkin X91 X-Box One pad", 0, XTYPE_XBOXONE }, 397 - { 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE }, 396 + { 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SHARE_BUTTON, XTYPE_XBOXONE }, 398 397 { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 }, 399 398 { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 }, 400 399 { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 }, ··· 721 714 XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init), 722 715 XBOXONE_INIT_PKT(0x045e, 0x0b00, extra_input_packet_init), 723 716 XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_led_on), 717 + XBOXONE_INIT_PKT(0x0f0d, 0x01b2, xboxone_pdp_led_on), 724 718 XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_led_on), 725 719 XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_auth), 720 + XBOXONE_INIT_PKT(0x0f0d, 0x01b2, xboxone_pdp_auth), 726 721 XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_auth), 727 722 XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init), 728 723 XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init), ··· 1036 1027 * The report format was gleaned from 1037 1028 * https://github.com/kylelemons/xbox/blob/master/xbox.go 1038 1029 */ 1039 - static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data) 1030 + static void xpadone_process_packet(struct usb_xpad *xpad, u16 cmd, unsigned char *data, u32 len) 1040 1031 { 1041 1032 struct input_dev *dev = xpad->dev; 1042 1033 bool do_sync = false; ··· 1077 1068 /* menu/view buttons */ 1078 1069 input_report_key(dev, BTN_START, data[4] & BIT(2)); 1079 1070 input_report_key(dev, BTN_SELECT, data[4] & BIT(3)); 1080 - if (xpad->mapping & MAP_SELECT_BUTTON) 1081 - input_report_key(dev, KEY_RECORD, data[22] & BIT(0)); 1071 + if (xpad->mapping & MAP_SHARE_BUTTON) { 1072 + if (xpad->mapping & MAP_SHARE_OFFSET) 1073 + input_report_key(dev, KEY_RECORD, data[len - 26] & BIT(0)); 1074 + else 1075 + input_report_key(dev, KEY_RECORD, data[len - 18] & BIT(0)); 1076 + } 1082 1077 1083 1078 /* buttons A,B,X,Y */ 1084 1079 input_report_key(dev, BTN_A, data[4] & BIT(4)); ··· 1230 1217 xpad360w_process_packet(xpad, 0, xpad->idata); 1231 1218 break; 1232 1219 case XTYPE_XBOXONE: 1233 - xpadone_process_packet(xpad, 0, xpad->idata); 1220 + xpadone_process_packet(xpad, 0, xpad->idata, urb->actual_length); 1234 1221 break; 1235 1222 default: 1236 1223 xpad_process_packet(xpad, 0, xpad->idata); ··· 1957 1944 xpad->xtype == XTYPE_XBOXONE) { 1958 1945 for (i = 0; xpad360_btn[i] >= 0; i++) 1959 1946 input_set_capability(input_dev, EV_KEY, xpad360_btn[i]); 1960 - if (xpad->mapping & MAP_SELECT_BUTTON) 1947 + if (xpad->mapping & MAP_SHARE_BUTTON) 1961 1948 input_set_capability(input_dev, EV_KEY, KEY_RECORD); 1962 1949 } else { 1963 1950 for (i = 0; xpad_btn[i] >= 0; i++)
+2 -2
drivers/input/keyboard/mtk-pmic-keys.c
··· 147 147 u32 value, mask; 148 148 int error; 149 149 150 - kregs_home = keys->keys[MTK_PMIC_HOMEKEY_INDEX].regs; 151 - kregs_pwr = keys->keys[MTK_PMIC_PWRKEY_INDEX].regs; 150 + kregs_home = &regs->keys_regs[MTK_PMIC_HOMEKEY_INDEX]; 151 + kregs_pwr = &regs->keys_regs[MTK_PMIC_PWRKEY_INDEX]; 152 152 153 153 error = of_property_read_u32(keys->dev->of_node, "power-off-time-sec", 154 154 &long_press_debounce);
+1 -1
drivers/input/misc/hisi_powerkey.c
··· 30 30 { 31 31 struct input_dev *input = q; 32 32 33 - pm_wakeup_event(input->dev.parent, MAX_HELD_TIME); 33 + pm_wakeup_dev_event(input->dev.parent, MAX_HELD_TIME, true); 34 34 input_report_key(input, KEY_POWER, 1); 35 35 input_sync(input); 36 36
+16 -6
drivers/input/misc/sparcspkr.c
··· 74 74 return -1; 75 75 76 76 switch (code) { 77 - case SND_BELL: if (value) value = 1000; 78 - case SND_TONE: break; 79 - default: return -1; 77 + case SND_BELL: 78 + if (value) 79 + value = 1000; 80 + break; 81 + case SND_TONE: 82 + break; 83 + default: 84 + return -1; 80 85 } 81 86 82 87 if (value > 20 && value < 32767) ··· 114 109 return -1; 115 110 116 111 switch (code) { 117 - case SND_BELL: if (value) value = 1000; 118 - case SND_TONE: break; 119 - default: return -1; 112 + case SND_BELL: 113 + if (value) 114 + value = 1000; 115 + break; 116 + case SND_TONE: 117 + break; 118 + default: 119 + return -1; 120 120 } 121 121 122 122 if (value > 20 && value < 32767)
+5
drivers/input/mouse/synaptics.c
··· 164 164 #ifdef CONFIG_MOUSE_PS2_SYNAPTICS_SMBUS 165 165 static const char * const smbus_pnp_ids[] = { 166 166 /* all of the topbuttonpad_pnp_ids are valid, we just add some extras */ 167 + "DLL060d", /* Dell Precision M3800 */ 167 168 "LEN0048", /* X1 Carbon 3 */ 168 169 "LEN0046", /* X250 */ 169 170 "LEN0049", /* Yoga 11e */ ··· 191 190 "LEN2054", /* E480 */ 192 191 "LEN2055", /* E580 */ 193 192 "LEN2068", /* T14 Gen 1 */ 193 + "SYN1221", /* TUXEDO InfinityBook Pro 14 v5 */ 194 + "SYN3003", /* HP EliteBook 850 G1 */ 194 195 "SYN3015", /* HP EliteBook 840 G2 */ 195 196 "SYN3052", /* HP EliteBook 840 G4 */ 196 197 "SYN3221", /* HP 15-ay000 */ 197 198 "SYN323d", /* HP Spectre X360 13-w013dx */ 198 199 "SYN3257", /* HP Envy 13-ad105ng */ 200 + "TOS01f6", /* Dynabook Portege X30L-G */ 201 + "TOS0213", /* Dynabook Portege X30-D */ 199 202 NULL 200 203 }; 201 204 #endif
+5 -2
drivers/input/touchscreen/cyttsp5.c
··· 580 580 int rc; 581 581 582 582 SET_CMD_REPORT_TYPE(cmd[0], 0); 583 - SET_CMD_REPORT_ID(cmd[0], HID_POWER_SLEEP); 583 + SET_CMD_REPORT_ID(cmd[0], state); 584 584 SET_CMD_OPCODE(cmd[1], HID_CMD_SET_POWER); 585 585 586 586 rc = cyttsp5_write(ts, HID_COMMAND_REG, cmd, sizeof(cmd)); ··· 870 870 ts->input->phys = ts->phys; 871 871 input_set_drvdata(ts->input, ts); 872 872 873 - /* Reset the gpio to be in a reset state */ 873 + /* Assert gpio to be in a reset state */ 874 874 ts->reset_gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH); 875 875 if (IS_ERR(ts->reset_gpio)) { 876 876 error = PTR_ERR(ts->reset_gpio); 877 877 dev_err(dev, "Failed to request reset gpio, error %d\n", error); 878 878 return error; 879 879 } 880 + 881 + fsleep(10); /* Ensure long-enough reset pulse (minimum 10us). */ 882 + 880 883 gpiod_set_value_cansleep(ts->reset_gpio, 0); 881 884 882 885 /* Need a delay to have device up */
+1 -6
drivers/input/touchscreen/stmpe-ts.c
··· 366 366 }; 367 367 module_platform_driver(stmpe_ts_driver); 368 368 369 - static const struct of_device_id stmpe_ts_ids[] = { 370 - { .compatible = "st,stmpe-ts", }, 371 - { }, 372 - }; 373 - MODULE_DEVICE_TABLE(of, stmpe_ts_ids); 374 - 369 + MODULE_ALIAS("platform:stmpe-ts"); 375 370 MODULE_AUTHOR("Luotao Fu <l.fu@pengutronix.de>"); 376 371 MODULE_DESCRIPTION("STMPEXXX touchscreen driver"); 377 372 MODULE_LICENSE("GPL");