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.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input

Pull input updates from Dmitry Torokhov:

- several new device IDs added to xpad game controller driver

- support for imagis IST3038H variant of chip added to imagis touch
controller driver

- a fix for GPIO allocation for ads7846 touch controller driver

- a fix for iqs7222 driver to properly support status register

- a fix for goodix-berlin touch controller driver to use the right name
for the regulator

- more i8042 quirks to better handle several old Clevo devices.

* tag 'input-for-v6.14-rc6' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input:
MAINTAINERS: Remove myself from the goodix touchscreen maintainers
Input: iqs7222 - preserve system status register
Input: i8042 - swap old quirk combination with new quirk for more devices
Input: i8042 - swap old quirk combination with new quirk for several devices
Input: i8042 - add required quirks for missing old boardnames
Input: i8042 - swap old quirk combination with new quirk for NHxxRZQ
Input: xpad - rename QH controller to Legion Go S
Input: xpad - add support for TECNO Pocket Go
Input: xpad - add support for ZOTAC Gaming Zone
Input: goodix-berlin - fix vddio regulator references
Input: goodix-berlin - fix comment referencing wrong regulator
Input: imagis - add support for imagis IST3038H
dt-bindings: input/touchscreen: imagis: add compatible for ist3038h
Input: xpad - add multiple supported devices
Input: xpad - add 8BitDo SN30 Pro, Hyperkin X91 and Gamesir G7 SE controllers
Input: ads7846 - fix gpiod allocation
Input: wdt87xx_i2c - fix compiler warning

+135 -106
+1
Documentation/devicetree/bindings/input/touchscreen/imagis,ist3038c.yaml
··· 19 19 - imagis,ist3038 20 20 - imagis,ist3038b 21 21 - imagis,ist3038c 22 + - imagis,ist3038h 22 23 23 24 reg: 24 25 maxItems: 1
-1
MAINTAINERS
··· 9829 9829 F: drivers/media/usb/go7007/ 9830 9830 9831 9831 GOODIX TOUCHSCREEN 9832 - M: Bastien Nocera <hadess@hadess.net> 9833 9832 M: Hans de Goede <hdegoede@redhat.com> 9834 9833 L: linux-input@vger.kernel.org 9835 9834 S: Maintained
+32 -7
drivers/input/joystick/xpad.c
··· 140 140 { 0x044f, 0x0f00, "Thrustmaster Wheel", 0, XTYPE_XBOX }, 141 141 { 0x044f, 0x0f03, "Thrustmaster Wheel", 0, XTYPE_XBOX }, 142 142 { 0x044f, 0x0f07, "Thrustmaster, Inc. Controller", 0, XTYPE_XBOX }, 143 + { 0x044f, 0xd01e, "ThrustMaster, Inc. ESWAP X 2 ELDEN RING EDITION", 0, XTYPE_XBOXONE }, 143 144 { 0x044f, 0x0f10, "Thrustmaster Modena GT Wheel", 0, XTYPE_XBOX }, 144 145 { 0x044f, 0xb326, "Thrustmaster Gamepad GP XID", 0, XTYPE_XBOX360 }, 145 146 { 0x045e, 0x0202, "Microsoft X-Box pad v1 (US)", 0, XTYPE_XBOX }, ··· 178 177 { 0x06a3, 0x0200, "Saitek Racing Wheel", 0, XTYPE_XBOX }, 179 178 { 0x06a3, 0x0201, "Saitek Adrenalin", 0, XTYPE_XBOX }, 180 179 { 0x06a3, 0xf51a, "Saitek P3600", 0, XTYPE_XBOX360 }, 180 + { 0x0738, 0x4503, "Mad Catz Racing Wheel", 0, XTYPE_XBOXONE }, 181 181 { 0x0738, 0x4506, "Mad Catz 4506 Wireless Controller", 0, XTYPE_XBOX }, 182 182 { 0x0738, 0x4516, "Mad Catz Control Pad", 0, XTYPE_XBOX }, 183 183 { 0x0738, 0x4520, "Mad Catz Control Pad Pro", 0, XTYPE_XBOX }, ··· 240 238 { 0x0e6f, 0x0146, "Rock Candy Wired Controller for Xbox One", 0, XTYPE_XBOXONE }, 241 239 { 0x0e6f, 0x0147, "PDP Marvel Xbox One Controller", 0, XTYPE_XBOXONE }, 242 240 { 0x0e6f, 0x015c, "PDP Xbox One Arcade Stick", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, 241 + { 0x0e6f, 0x015d, "PDP Mirror's Edge Official Wired Controller for Xbox One", XTYPE_XBOXONE }, 243 242 { 0x0e6f, 0x0161, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, 244 243 { 0x0e6f, 0x0162, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, 245 244 { 0x0e6f, 0x0163, "PDP Xbox One Controller", 0, XTYPE_XBOXONE }, ··· 279 276 { 0x0f0d, 0x0078, "Hori Real Arcade Pro V Kai Xbox One", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, 280 277 { 0x0f0d, 0x00c5, "Hori Fighting Commander ONE", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOXONE }, 281 278 { 0x0f0d, 0x00dc, "HORIPAD FPS for Nintendo Switch", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 279 + { 0x0f0d, 0x0151, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE }, 280 + { 0x0f0d, 0x0152, "Hori Racing Wheel Overdrive for Xbox Series X", 0, XTYPE_XBOXONE }, 282 281 { 0x0f30, 0x010b, "Philips Recoil", 0, XTYPE_XBOX }, 283 282 { 0x0f30, 0x0202, "Joytech Advanced Controller", 0, XTYPE_XBOX }, 284 283 { 0x0f30, 0x8888, "BigBen XBMiniPad Controller", 0, XTYPE_XBOX }, 285 284 { 0x102c, 0xff0c, "Joytech Wireless Advanced Controller", 0, XTYPE_XBOX }, 286 285 { 0x1038, 0x1430, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 }, 287 286 { 0x1038, 0x1431, "SteelSeries Stratus Duo", 0, XTYPE_XBOX360 }, 287 + { 0x10f5, 0x7005, "Turtle Beach Recon Controller", 0, XTYPE_XBOXONE }, 288 288 { 0x11c9, 0x55f0, "Nacon GC-100XF", 0, XTYPE_XBOX360 }, 289 289 { 0x11ff, 0x0511, "PXN V900", 0, XTYPE_XBOX360 }, 290 290 { 0x1209, 0x2882, "Ardwiino Controller", 0, XTYPE_XBOX360 }, ··· 312 306 { 0x1689, 0xfe00, "Razer Sabertooth", 0, XTYPE_XBOX360 }, 313 307 { 0x17ef, 0x6182, "Lenovo Legion Controller for Windows", 0, XTYPE_XBOX360 }, 314 308 { 0x1949, 0x041a, "Amazon Game Controller", 0, XTYPE_XBOX360 }, 315 - { 0x1a86, 0xe310, "QH Electronics Controller", 0, XTYPE_XBOX360 }, 309 + { 0x1a86, 0xe310, "Legion Go S", 0, XTYPE_XBOX360 }, 316 310 { 0x1bad, 0x0002, "Harmonix Rock Band Guitar", 0, XTYPE_XBOX360 }, 317 311 { 0x1bad, 0x0003, "Harmonix Rock Band Drumkit", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, 318 312 { 0x1bad, 0x0130, "Ion Drum Rocker", MAP_DPAD_TO_BUTTONS, XTYPE_XBOX360 }, ··· 349 343 { 0x1bad, 0xfa01, "MadCatz GamePad", 0, XTYPE_XBOX360 }, 350 344 { 0x1bad, 0xfd00, "Razer Onza TE", 0, XTYPE_XBOX360 }, 351 345 { 0x1bad, 0xfd01, "Razer Onza", 0, XTYPE_XBOX360 }, 346 + { 0x1ee9, 0x1590, "ZOTAC Gaming Zone", 0, XTYPE_XBOX360 }, 352 347 { 0x20d6, 0x2001, "BDA Xbox Series X Wired Controller", 0, XTYPE_XBOXONE }, 353 348 { 0x20d6, 0x2009, "PowerA Enhanced Wired Controller for Xbox Series X|S", 0, XTYPE_XBOXONE }, 354 349 { 0x20d6, 0x281f, "PowerA Wired Controller For Xbox 360", 0, XTYPE_XBOX360 }, ··· 373 366 { 0x24c6, 0x5510, "Hori Fighting Commander ONE (Xbox 360/PC Mode)", MAP_TRIGGERS_TO_BUTTONS, XTYPE_XBOX360 }, 374 367 { 0x24c6, 0x551a, "PowerA FUSION Pro Controller", 0, XTYPE_XBOXONE }, 375 368 { 0x24c6, 0x561a, "PowerA FUSION Controller", 0, XTYPE_XBOXONE }, 369 + { 0x24c6, 0x581a, "ThrustMaster XB1 Classic Controller", 0, XTYPE_XBOXONE }, 376 370 { 0x24c6, 0x5b00, "ThrustMaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 }, 377 371 { 0x24c6, 0x5b02, "Thrustmaster, Inc. GPX Controller", 0, XTYPE_XBOX360 }, 378 372 { 0x24c6, 0x5b03, "Thrustmaster Ferrari 458 Racing Wheel", 0, XTYPE_XBOX360 }, ··· 382 374 { 0x2563, 0x058d, "OneXPlayer Gamepad", 0, XTYPE_XBOX360 }, 383 375 { 0x294b, 0x3303, "Snakebyte GAMEPAD BASE X", 0, XTYPE_XBOXONE }, 384 376 { 0x294b, 0x3404, "Snakebyte GAMEPAD RGB X", 0, XTYPE_XBOXONE }, 377 + { 0x2993, 0x2001, "TECNO Pocket Go", 0, XTYPE_XBOX360 }, 385 378 { 0x2dc8, 0x2000, "8BitDo Pro 2 Wired Controller fox Xbox", 0, XTYPE_XBOXONE }, 386 379 { 0x2dc8, 0x3106, "8BitDo Ultimate Wireless / Pro 2 Wired Controller", 0, XTYPE_XBOX360 }, 380 + { 0x2dc8, 0x3109, "8BitDo Ultimate Wireless Bluetooth", 0, XTYPE_XBOX360 }, 387 381 { 0x2dc8, 0x310a, "8BitDo Ultimate 2C Wireless Controller", 0, XTYPE_XBOX360 }, 382 + { 0x2dc8, 0x6001, "8BitDo SN30 Pro", 0, XTYPE_XBOX360 }, 388 383 { 0x2e24, 0x0652, "Hyperkin Duke X-Box One pad", 0, XTYPE_XBOXONE }, 384 + { 0x2e24, 0x1688, "Hyperkin X91 X-Box One pad", 0, XTYPE_XBOXONE }, 385 + { 0x2e95, 0x0504, "SCUF Gaming Controller", MAP_SELECT_BUTTON, XTYPE_XBOXONE }, 389 386 { 0x31e3, 0x1100, "Wooting One", 0, XTYPE_XBOX360 }, 390 387 { 0x31e3, 0x1200, "Wooting Two", 0, XTYPE_XBOX360 }, 391 388 { 0x31e3, 0x1210, "Wooting Lekker", 0, XTYPE_XBOX360 }, ··· 398 385 { 0x31e3, 0x1230, "Wooting Two HE (ARM)", 0, XTYPE_XBOX360 }, 399 386 { 0x31e3, 0x1300, "Wooting 60HE (AVR)", 0, XTYPE_XBOX360 }, 400 387 { 0x31e3, 0x1310, "Wooting 60HE (ARM)", 0, XTYPE_XBOX360 }, 388 + { 0x3285, 0x0603, "Nacon Pro Compact controller for Xbox", 0, XTYPE_XBOXONE }, 401 389 { 0x3285, 0x0607, "Nacon GC-100", 0, XTYPE_XBOX360 }, 390 + { 0x3285, 0x0614, "Nacon Pro Compact", 0, XTYPE_XBOXONE }, 402 391 { 0x3285, 0x0646, "Nacon Pro Compact", 0, XTYPE_XBOXONE }, 392 + { 0x3285, 0x0662, "Nacon Revolution5 Pro", 0, XTYPE_XBOX360 }, 403 393 { 0x3285, 0x0663, "Nacon Evol-X", 0, XTYPE_XBOXONE }, 404 394 { 0x3537, 0x1004, "GameSir T4 Kaleid", 0, XTYPE_XBOX360 }, 395 + { 0x3537, 0x1010, "GameSir G7 SE", 0, XTYPE_XBOXONE }, 405 396 { 0x3767, 0x0101, "Fanatec Speedster 3 Forceshock Wheel", 0, XTYPE_XBOX }, 397 + { 0x413d, 0x2104, "Black Shark Green Ghost Gamepad", 0, XTYPE_XBOX360 }, 406 398 { 0xffff, 0xffff, "Chinese-made Xbox Controller", 0, XTYPE_XBOX }, 407 399 { 0x0000, 0x0000, "Generic X-Box pad", 0, XTYPE_UNKNOWN } 408 400 }; ··· 506 488 XPAD_XBOX360_VENDOR(0x03f0), /* HP HyperX Xbox 360 controllers */ 507 489 XPAD_XBOXONE_VENDOR(0x03f0), /* HP HyperX Xbox One controllers */ 508 490 XPAD_XBOX360_VENDOR(0x044f), /* Thrustmaster Xbox 360 controllers */ 491 + XPAD_XBOXONE_VENDOR(0x044f), /* Thrustmaster Xbox One controllers */ 509 492 XPAD_XBOX360_VENDOR(0x045e), /* Microsoft Xbox 360 controllers */ 510 493 XPAD_XBOXONE_VENDOR(0x045e), /* Microsoft Xbox One controllers */ 511 494 XPAD_XBOX360_VENDOR(0x046d), /* Logitech Xbox 360-style controllers */ ··· 538 519 XPAD_XBOX360_VENDOR(0x1689), /* Razer Onza */ 539 520 XPAD_XBOX360_VENDOR(0x17ef), /* Lenovo */ 540 521 XPAD_XBOX360_VENDOR(0x1949), /* Amazon controllers */ 541 - XPAD_XBOX360_VENDOR(0x1a86), /* QH Electronics */ 522 + XPAD_XBOX360_VENDOR(0x1a86), /* Nanjing Qinheng Microelectronics (WCH) */ 542 523 XPAD_XBOX360_VENDOR(0x1bad), /* Harmonix Rock Band guitar and drums */ 524 + XPAD_XBOX360_VENDOR(0x1ee9), /* ZOTAC Technology Limited */ 543 525 XPAD_XBOX360_VENDOR(0x20d6), /* PowerA controllers */ 544 526 XPAD_XBOXONE_VENDOR(0x20d6), /* PowerA controllers */ 545 527 XPAD_XBOX360_VENDOR(0x2345), /* Machenike Controllers */ ··· 548 528 XPAD_XBOXONE_VENDOR(0x24c6), /* PowerA controllers */ 549 529 XPAD_XBOX360_VENDOR(0x2563), /* OneXPlayer Gamepad */ 550 530 XPAD_XBOX360_VENDOR(0x260d), /* Dareu H101 */ 551 - XPAD_XBOXONE_VENDOR(0x294b), /* Snakebyte */ 531 + XPAD_XBOXONE_VENDOR(0x294b), /* Snakebyte */ 532 + XPAD_XBOX360_VENDOR(0x2993), /* TECNO Mobile */ 552 533 XPAD_XBOX360_VENDOR(0x2c22), /* Qanba Controllers */ 553 - XPAD_XBOX360_VENDOR(0x2dc8), /* 8BitDo Pro 2 Wired Controller */ 554 - XPAD_XBOXONE_VENDOR(0x2dc8), /* 8BitDo Pro 2 Wired Controller for Xbox */ 555 - XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Duke Xbox One pad */ 556 - XPAD_XBOX360_VENDOR(0x2f24), /* GameSir controllers */ 534 + XPAD_XBOX360_VENDOR(0x2dc8), /* 8BitDo Controllers */ 535 + XPAD_XBOXONE_VENDOR(0x2dc8), /* 8BitDo Controllers */ 536 + XPAD_XBOXONE_VENDOR(0x2e24), /* Hyperkin Controllers */ 537 + XPAD_XBOX360_VENDOR(0x2f24), /* GameSir Controllers */ 538 + XPAD_XBOXONE_VENDOR(0x2e95), /* SCUF Gaming Controller */ 557 539 XPAD_XBOX360_VENDOR(0x31e3), /* Wooting Keyboards */ 558 540 XPAD_XBOX360_VENDOR(0x3285), /* Nacon GC-100 */ 559 541 XPAD_XBOXONE_VENDOR(0x3285), /* Nacon Evol-X */ 560 542 XPAD_XBOX360_VENDOR(0x3537), /* GameSir Controllers */ 561 543 XPAD_XBOXONE_VENDOR(0x3537), /* GameSir Controllers */ 544 + XPAD_XBOX360_VENDOR(0x413d), /* Black Shark Green Ghost Controller */ 562 545 { } 563 546 }; 564 547 ··· 714 691 XBOXONE_INIT_PKT(0x045e, 0x0b00, xboxone_s_init), 715 692 XBOXONE_INIT_PKT(0x045e, 0x0b00, extra_input_packet_init), 716 693 XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_led_on), 694 + XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_led_on), 717 695 XBOXONE_INIT_PKT(0x0e6f, 0x0000, xboxone_pdp_auth), 696 + XBOXONE_INIT_PKT(0x20d6, 0xa01a, xboxone_pdp_auth), 718 697 XBOXONE_INIT_PKT(0x24c6, 0x541a, xboxone_rumblebegin_init), 719 698 XBOXONE_INIT_PKT(0x24c6, 0x542a, xboxone_rumblebegin_init), 720 699 XBOXONE_INIT_PKT(0x24c6, 0x543a, xboxone_rumblebegin_init),
+22 -28
drivers/input/misc/iqs7222.c
··· 100 100 101 101 enum iqs7222_reg_grp_id { 102 102 IQS7222_REG_GRP_STAT, 103 - IQS7222_REG_GRP_FILT, 104 103 IQS7222_REG_GRP_CYCLE, 105 104 IQS7222_REG_GRP_GLBL, 106 105 IQS7222_REG_GRP_BTN, 107 106 IQS7222_REG_GRP_CHAN, 107 + IQS7222_REG_GRP_FILT, 108 108 IQS7222_REG_GRP_SLDR, 109 109 IQS7222_REG_GRP_TPAD, 110 110 IQS7222_REG_GRP_GPIO, ··· 286 286 287 287 struct iqs7222_reg_grp_desc { 288 288 u16 base; 289 + u16 val_len; 289 290 int num_row; 290 291 int num_col; 291 292 }; ··· 343 342 }, 344 343 [IQS7222_REG_GRP_FILT] = { 345 344 .base = 0xAC00, 345 + .val_len = 3, 346 346 .num_row = 1, 347 347 .num_col = 2, 348 348 }, ··· 402 400 }, 403 401 [IQS7222_REG_GRP_FILT] = { 404 402 .base = 0xAC00, 403 + .val_len = 3, 405 404 .num_row = 1, 406 405 .num_col = 2, 407 406 }, ··· 457 454 }, 458 455 [IQS7222_REG_GRP_FILT] = { 459 456 .base = 0xC400, 457 + .val_len = 3, 460 458 .num_row = 1, 461 459 .num_col = 2, 462 460 }, ··· 500 496 }, 501 497 [IQS7222_REG_GRP_FILT] = { 502 498 .base = 0xC400, 499 + .val_len = 3, 503 500 .num_row = 1, 504 501 .num_col = 2, 505 502 }, ··· 548 543 }, 549 544 [IQS7222_REG_GRP_FILT] = { 550 545 .base = 0xAA00, 546 + .val_len = 3, 551 547 .num_row = 1, 552 548 .num_col = 2, 553 549 }, ··· 606 600 }, 607 601 [IQS7222_REG_GRP_FILT] = { 608 602 .base = 0xAA00, 603 + .val_len = 3, 609 604 .num_row = 1, 610 605 .num_col = 2, 611 606 }, ··· 663 656 }, 664 657 [IQS7222_REG_GRP_FILT] = { 665 658 .base = 0xAE00, 659 + .val_len = 3, 666 660 .num_row = 1, 667 661 .num_col = 2, 668 662 }, ··· 720 712 }, 721 713 [IQS7222_REG_GRP_FILT] = { 722 714 .base = 0xAE00, 715 + .val_len = 3, 723 716 .num_row = 1, 724 717 .num_col = 2, 725 718 }, ··· 777 768 }, 778 769 [IQS7222_REG_GRP_FILT] = { 779 770 .base = 0xAE00, 771 + .val_len = 3, 780 772 .num_row = 1, 781 773 .num_col = 2, 782 774 }, ··· 1614 1604 } 1615 1605 1616 1606 static int iqs7222_read_burst(struct iqs7222_private *iqs7222, 1617 - u16 reg, void *val, u16 num_val) 1607 + u16 reg, void *val, u16 val_len) 1618 1608 { 1619 1609 u8 reg_buf[sizeof(__be16)]; 1620 1610 int ret, i; ··· 1629 1619 { 1630 1620 .addr = client->addr, 1631 1621 .flags = I2C_M_RD, 1632 - .len = num_val * sizeof(__le16), 1622 + .len = val_len, 1633 1623 .buf = (u8 *)val, 1634 1624 }, 1635 1625 }; ··· 1685 1675 __le16 val_buf; 1686 1676 int error; 1687 1677 1688 - error = iqs7222_read_burst(iqs7222, reg, &val_buf, 1); 1678 + error = iqs7222_read_burst(iqs7222, reg, &val_buf, sizeof(val_buf)); 1689 1679 if (error) 1690 1680 return error; 1691 1681 ··· 1695 1685 } 1696 1686 1697 1687 static int iqs7222_write_burst(struct iqs7222_private *iqs7222, 1698 - u16 reg, const void *val, u16 num_val) 1688 + u16 reg, const void *val, u16 val_len) 1699 1689 { 1700 1690 int reg_len = reg > U8_MAX ? sizeof(reg) : sizeof(u8); 1701 - int val_len = num_val * sizeof(__le16); 1702 1691 int msg_len = reg_len + val_len; 1703 1692 int ret, i; 1704 1693 struct i2c_client *client = iqs7222->client; ··· 1756 1747 { 1757 1748 __le16 val_buf = cpu_to_le16(val); 1758 1749 1759 - return iqs7222_write_burst(iqs7222, reg, &val_buf, 1); 1750 + return iqs7222_write_burst(iqs7222, reg, &val_buf, sizeof(val_buf)); 1760 1751 } 1761 1752 1762 1753 static int iqs7222_ati_trigger(struct iqs7222_private *iqs7222) ··· 1840 1831 1841 1832 /* 1842 1833 * Acknowledge reset before writing any registers in case the device 1843 - * suffers a spurious reset during initialization. Because this step 1844 - * may change the reserved fields of the second filter beta register, 1845 - * its cache must be updated. 1846 - * 1847 - * Writing the second filter beta register, in turn, may clobber the 1848 - * system status register. As such, the filter beta register pair is 1849 - * written first to protect against this hazard. 1834 + * suffers a spurious reset during initialization. 1850 1835 */ 1851 1836 if (dir == WRITE) { 1852 - u16 reg = dev_desc->reg_grps[IQS7222_REG_GRP_FILT].base + 1; 1853 - u16 filt_setup; 1854 - 1855 1837 error = iqs7222_write_word(iqs7222, IQS7222_SYS_SETUP, 1856 1838 iqs7222->sys_setup[0] | 1857 1839 IQS7222_SYS_SETUP_ACK_RESET); 1858 1840 if (error) 1859 1841 return error; 1860 - 1861 - error = iqs7222_read_word(iqs7222, reg, &filt_setup); 1862 - if (error) 1863 - return error; 1864 - 1865 - iqs7222->filt_setup[1] &= GENMASK(7, 0); 1866 - iqs7222->filt_setup[1] |= (filt_setup & ~GENMASK(7, 0)); 1867 1842 } 1868 1843 1869 1844 /* ··· 1876 1883 int num_col = dev_desc->reg_grps[i].num_col; 1877 1884 u16 reg = dev_desc->reg_grps[i].base; 1878 1885 __le16 *val_buf; 1886 + u16 val_len = dev_desc->reg_grps[i].val_len ? : num_col * sizeof(*val_buf); 1879 1887 u16 *val; 1880 1888 1881 1889 if (!num_col) ··· 1894 1900 switch (dir) { 1895 1901 case READ: 1896 1902 error = iqs7222_read_burst(iqs7222, reg, 1897 - val_buf, num_col); 1903 + val_buf, val_len); 1898 1904 for (k = 0; k < num_col; k++) 1899 1905 val[k] = le16_to_cpu(val_buf[k]); 1900 1906 break; ··· 1903 1909 for (k = 0; k < num_col; k++) 1904 1910 val_buf[k] = cpu_to_le16(val[k]); 1905 1911 error = iqs7222_write_burst(iqs7222, reg, 1906 - val_buf, num_col); 1912 + val_buf, val_len); 1907 1913 break; 1908 1914 1909 1915 default: ··· 1956 1962 int error, i; 1957 1963 1958 1964 error = iqs7222_read_burst(iqs7222, IQS7222_PROD_NUM, dev_id, 1959 - ARRAY_SIZE(dev_id)); 1965 + sizeof(dev_id)); 1960 1966 if (error) 1961 1967 return error; 1962 1968 ··· 2909 2915 __le16 status[IQS7222_MAX_COLS_STAT]; 2910 2916 2911 2917 error = iqs7222_read_burst(iqs7222, IQS7222_SYS_STATUS, status, 2912 - num_stat); 2918 + num_stat * sizeof(*status)); 2913 2919 if (error) 2914 2920 return error; 2915 2921
+55 -56
drivers/input/serio/i8042-acpipnpio.h
··· 1080 1080 DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"), 1081 1081 DMI_MATCH(DMI_BOARD_NAME, "AURA1501"), 1082 1082 }, 1083 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1084 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1083 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1085 1084 }, 1086 1085 { 1087 1086 .matches = { 1088 1087 DMI_MATCH(DMI_BOARD_VENDOR, "TUXEDO"), 1089 1088 DMI_MATCH(DMI_BOARD_NAME, "EDUBOOK1502"), 1090 1089 }, 1091 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1092 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1090 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1093 1091 }, 1094 1092 { 1095 1093 /* Mivvy M310 */ ··· 1157 1159 }, 1158 1160 /* 1159 1161 * A lot of modern Clevo barebones have touchpad and/or keyboard issues 1160 - * after suspend fixable with nomux + reset + noloop + nopnp. Luckily, 1161 - * none of them have an external PS/2 port so this can safely be set for 1162 - * all of them. 1162 + * after suspend fixable with the forcenorestore quirk. 1163 1163 * Clevo barebones come with board_vendor and/or system_vendor set to 1164 1164 * either the very generic string "Notebook" and/or a different value 1165 1165 * for each individual reseller. The only somewhat universal way to ··· 1167 1171 .matches = { 1168 1172 DMI_MATCH(DMI_BOARD_NAME, "LAPQC71A"), 1169 1173 }, 1170 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1171 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1174 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1172 1175 }, 1173 1176 { 1174 1177 .matches = { 1175 1178 DMI_MATCH(DMI_BOARD_NAME, "LAPQC71B"), 1176 1179 }, 1177 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1178 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1180 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1179 1181 }, 1180 1182 { 1181 1183 .matches = { 1182 1184 DMI_MATCH(DMI_BOARD_NAME, "N140CU"), 1183 1185 }, 1184 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1185 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1186 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1186 1187 }, 1187 1188 { 1188 1189 .matches = { 1189 1190 DMI_MATCH(DMI_BOARD_NAME, "N141CU"), 1190 1191 }, 1191 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1192 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1192 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1193 1193 }, 1194 1194 { 1195 1195 .matches = { ··· 1197 1205 .matches = { 1198 1206 DMI_MATCH(DMI_BOARD_NAME, "NH5xAx"), 1199 1207 }, 1200 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1201 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1208 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1202 1209 }, 1203 1210 { 1204 - /* 1205 - * Setting SERIO_QUIRK_NOMUX or SERIO_QUIRK_RESET_ALWAYS makes 1206 - * the keyboard very laggy for ~5 seconds after boot and 1207 - * sometimes also after resume. 1208 - * However both are required for the keyboard to not fail 1209 - * completely sometimes after boot or resume. 1210 - */ 1211 1211 .matches = { 1212 1212 DMI_MATCH(DMI_BOARD_NAME, "NHxxRZQ"), 1213 1213 }, 1214 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1215 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1214 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1216 1215 }, 1217 1216 { 1218 1217 .matches = { 1219 1218 DMI_MATCH(DMI_BOARD_NAME, "NL5xRU"), 1220 1219 }, 1221 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1222 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1220 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1223 1221 }, 1224 1222 /* 1225 1223 * At least one modern Clevo barebone has the touchpad connected both ··· 1225 1243 .matches = { 1226 1244 DMI_MATCH(DMI_BOARD_NAME, "NS50MU"), 1227 1245 }, 1228 - .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX | 1229 - SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | 1230 - SERIO_QUIRK_NOPNP) 1246 + .driver_data = (void *)(SERIO_QUIRK_NOAUX | 1247 + SERIO_QUIRK_FORCENORESTORE) 1231 1248 }, 1232 1249 { 1233 1250 .matches = { 1234 1251 DMI_MATCH(DMI_BOARD_NAME, "NS50_70MU"), 1235 1252 }, 1236 - .driver_data = (void *)(SERIO_QUIRK_NOAUX | SERIO_QUIRK_NOMUX | 1237 - SERIO_QUIRK_RESET_ALWAYS | SERIO_QUIRK_NOLOOP | 1238 - SERIO_QUIRK_NOPNP) 1253 + .driver_data = (void *)(SERIO_QUIRK_NOAUX | 1254 + SERIO_QUIRK_FORCENORESTORE) 1239 1255 }, 1240 1256 { 1241 1257 .matches = { ··· 1245 1265 .matches = { 1246 1266 DMI_MATCH(DMI_BOARD_NAME, "NJ50_70CU"), 1247 1267 }, 1248 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1249 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1268 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1269 + }, 1270 + { 1271 + .matches = { 1272 + DMI_MATCH(DMI_BOARD_NAME, "P640RE"), 1273 + }, 1274 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1250 1275 }, 1251 1276 { 1252 1277 /* ··· 1262 1277 .matches = { 1263 1278 DMI_MATCH(DMI_PRODUCT_NAME, "P65xH"), 1264 1279 }, 1265 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1266 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1280 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1267 1281 }, 1268 1282 { 1269 1283 /* Clevo P650RS, 650RP6, Sager NP8152-S, and others */ 1270 1284 .matches = { 1271 1285 DMI_MATCH(DMI_PRODUCT_NAME, "P65xRP"), 1272 1286 }, 1273 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1274 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1287 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1275 1288 }, 1276 1289 { 1277 1290 /* ··· 1280 1297 .matches = { 1281 1298 DMI_MATCH(DMI_PRODUCT_NAME, "P65_P67H"), 1282 1299 }, 1283 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1284 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1300 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1285 1301 }, 1286 1302 { 1287 1303 /* ··· 1291 1309 .matches = { 1292 1310 DMI_MATCH(DMI_PRODUCT_NAME, "P65_67RP"), 1293 1311 }, 1294 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1295 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1312 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1296 1313 }, 1297 1314 { 1298 1315 /* ··· 1302 1321 .matches = { 1303 1322 DMI_MATCH(DMI_PRODUCT_NAME, "P65_67RS"), 1304 1323 }, 1305 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1306 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1324 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1307 1325 }, 1308 1326 { 1309 1327 /* ··· 1313 1333 .matches = { 1314 1334 DMI_MATCH(DMI_PRODUCT_NAME, "P67xRP"), 1315 1335 }, 1316 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1317 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1336 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1318 1337 }, 1319 1338 { 1320 1339 .matches = { 1321 1340 DMI_MATCH(DMI_BOARD_NAME, "PB50_70DFx,DDx"), 1322 1341 }, 1323 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1324 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1342 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1343 + }, 1344 + { 1345 + .matches = { 1346 + DMI_MATCH(DMI_BOARD_NAME, "PB51RF"), 1347 + }, 1348 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1349 + }, 1350 + { 1351 + .matches = { 1352 + DMI_MATCH(DMI_BOARD_NAME, "PB71RD"), 1353 + }, 1354 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1355 + }, 1356 + { 1357 + .matches = { 1358 + DMI_MATCH(DMI_BOARD_NAME, "PC70DR"), 1359 + }, 1360 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1325 1361 }, 1326 1362 { 1327 1363 .matches = { 1328 1364 DMI_MATCH(DMI_BOARD_NAME, "PCX0DX"), 1329 1365 }, 1330 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1331 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1366 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1367 + }, 1368 + { 1369 + .matches = { 1370 + DMI_MATCH(DMI_BOARD_NAME, "PCX0DX_GN20"), 1371 + }, 1372 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1332 1373 }, 1333 1374 /* See comment on TUXEDO InfinityBook S17 Gen6 / Clevo NS70MU above */ 1334 1375 { ··· 1362 1361 .matches = { 1363 1362 DMI_MATCH(DMI_BOARD_NAME, "X170SM"), 1364 1363 }, 1365 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1366 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1364 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1367 1365 }, 1368 1366 { 1369 1367 .matches = { 1370 1368 DMI_MATCH(DMI_BOARD_NAME, "X170KM-G"), 1371 1369 }, 1372 - .driver_data = (void *)(SERIO_QUIRK_NOMUX | SERIO_QUIRK_RESET_ALWAYS | 1373 - SERIO_QUIRK_NOLOOP | SERIO_QUIRK_NOPNP) 1370 + .driver_data = (void *)(SERIO_QUIRK_FORCENORESTORE) 1374 1371 }, 1375 1372 { 1376 1373 /*
+1 -1
drivers/input/touchscreen/ads7846.c
··· 1021 1021 if (pdata->get_pendown_state) { 1022 1022 ts->get_pendown_state = pdata->get_pendown_state; 1023 1023 } else { 1024 - ts->gpio_pendown = gpiod_get(&spi->dev, "pendown", GPIOD_IN); 1024 + ts->gpio_pendown = devm_gpiod_get(&spi->dev, "pendown", GPIOD_IN); 1025 1025 if (IS_ERR(ts->gpio_pendown)) { 1026 1026 dev_err(&spi->dev, "failed to request pendown GPIO\n"); 1027 1027 return PTR_ERR(ts->gpio_pendown);
+13 -13
drivers/input/touchscreen/goodix_berlin_core.c
··· 165 165 struct device *dev; 166 166 struct regmap *regmap; 167 167 struct regulator *avdd; 168 - struct regulator *iovdd; 168 + struct regulator *vddio; 169 169 struct gpio_desc *reset_gpio; 170 170 struct touchscreen_properties props; 171 171 struct goodix_berlin_fw_version fw_version; ··· 248 248 { 249 249 int error; 250 250 251 - error = regulator_enable(cd->iovdd); 251 + error = regulator_enable(cd->vddio); 252 252 if (error) { 253 - dev_err(cd->dev, "Failed to enable iovdd: %d\n", error); 253 + dev_err(cd->dev, "Failed to enable vddio: %d\n", error); 254 254 return error; 255 255 } 256 256 257 - /* Vendor waits 3ms for IOVDD to settle */ 257 + /* Vendor waits 3ms for VDDIO to settle */ 258 258 usleep_range(3000, 3100); 259 259 260 260 error = regulator_enable(cd->avdd); 261 261 if (error) { 262 262 dev_err(cd->dev, "Failed to enable avdd: %d\n", error); 263 - goto err_iovdd_disable; 263 + goto err_vddio_disable; 264 264 } 265 265 266 - /* Vendor waits 15ms for IOVDD to settle */ 266 + /* Vendor waits 15ms for AVDD to settle */ 267 267 usleep_range(15000, 15100); 268 268 269 269 gpiod_set_value_cansleep(cd->reset_gpio, 0); ··· 283 283 err_dev_reset: 284 284 gpiod_set_value_cansleep(cd->reset_gpio, 1); 285 285 regulator_disable(cd->avdd); 286 - err_iovdd_disable: 287 - regulator_disable(cd->iovdd); 286 + err_vddio_disable: 287 + regulator_disable(cd->vddio); 288 288 return error; 289 289 } 290 290 ··· 292 292 { 293 293 gpiod_set_value_cansleep(cd->reset_gpio, 1); 294 294 regulator_disable(cd->avdd); 295 - regulator_disable(cd->iovdd); 295 + regulator_disable(cd->vddio); 296 296 } 297 297 298 298 static int goodix_berlin_read_version(struct goodix_berlin_core *cd) ··· 744 744 return dev_err_probe(dev, PTR_ERR(cd->avdd), 745 745 "Failed to request avdd regulator\n"); 746 746 747 - cd->iovdd = devm_regulator_get(dev, "iovdd"); 748 - if (IS_ERR(cd->iovdd)) 749 - return dev_err_probe(dev, PTR_ERR(cd->iovdd), 750 - "Failed to request iovdd regulator\n"); 747 + cd->vddio = devm_regulator_get(dev, "vddio"); 748 + if (IS_ERR(cd->vddio)) 749 + return dev_err_probe(dev, PTR_ERR(cd->vddio), 750 + "Failed to request vddio regulator\n"); 751 751 752 752 error = goodix_berlin_power_on(cd); 753 753 if (error) {
+9
drivers/input/touchscreen/imagis.c
··· 22 22 23 23 #define IST3032C_WHOAMI 0x32c 24 24 #define IST3038C_WHOAMI 0x38c 25 + #define IST3038H_WHOAMI 0x38d 25 26 26 27 #define IST3038B_REG_CHIPID 0x30 27 28 #define IST3038B_WHOAMI 0x30380b ··· 429 428 .protocol_b = true, 430 429 }; 431 430 431 + static const struct imagis_properties imagis_3038h_data = { 432 + .interrupt_msg_cmd = IST3038C_REG_INTR_MESSAGE, 433 + .touch_coord_cmd = IST3038C_REG_TOUCH_COORD, 434 + .whoami_cmd = IST3038C_REG_CHIPID, 435 + .whoami_val = IST3038H_WHOAMI, 436 + }; 437 + 432 438 static const struct of_device_id imagis_of_match[] = { 433 439 { .compatible = "imagis,ist3032c", .data = &imagis_3032c_data }, 434 440 { .compatible = "imagis,ist3038", .data = &imagis_3038_data }, 435 441 { .compatible = "imagis,ist3038b", .data = &imagis_3038b_data }, 436 442 { .compatible = "imagis,ist3038c", .data = &imagis_3038c_data }, 443 + { .compatible = "imagis,ist3038h", .data = &imagis_3038h_data }, 437 444 { }, 438 445 }; 439 446 MODULE_DEVICE_TABLE(of, imagis_of_match);
+2
drivers/input/touchscreen/wdt87xx_i2c.c
··· 1153 1153 }; 1154 1154 MODULE_DEVICE_TABLE(i2c, wdt87xx_dev_id); 1155 1155 1156 + #ifdef CONFIG_ACPI 1156 1157 static const struct acpi_device_id wdt87xx_acpi_id[] = { 1157 1158 { "WDHT0001", 0 }, 1158 1159 { } 1159 1160 }; 1160 1161 MODULE_DEVICE_TABLE(acpi, wdt87xx_acpi_id); 1162 + #endif 1161 1163 1162 1164 static struct i2c_driver wdt87xx_driver = { 1163 1165 .probe = wdt87xx_ts_probe,