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

Input: libps2 - attach ps2dev instances as serio port's drvdata

In preparation of having unified interrupt handler for PS/2 devices,
instead of attaching instances of psmouse and atkbd structures as serio's
driver data, switch to attaching ps2dev instances.

Reviewed-by: Raul Rangel <rrangel@chromium.org>
Link: https://lore.kernel.org/r/20230511185252.386941-2-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

+44 -29
+15 -8
drivers/input/keyboard/atkbd.c
··· 309 309 return vivaldi_function_row_physmap_show(&atkbd->vdata, buf); 310 310 } 311 311 312 + static struct atkbd *atkbd_from_serio(struct serio *serio) 313 + { 314 + struct ps2dev *ps2dev = serio_get_drvdata(serio); 315 + 316 + return container_of(ps2dev, struct atkbd, ps2dev); 317 + } 318 + 312 319 static umode_t atkbd_attr_is_visible(struct kobject *kobj, 313 320 struct attribute *attr, int i) 314 321 { 315 322 struct device *dev = kobj_to_dev(kobj); 316 323 struct serio *serio = to_serio_port(dev); 317 - struct atkbd *atkbd = serio_get_drvdata(serio); 324 + struct atkbd *atkbd = atkbd_from_serio(serio); 318 325 319 326 if (attr == &atkbd_attr_function_row_physmap.attr && 320 327 !atkbd->vdata.num_function_row_keys) ··· 406 399 static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data, 407 400 unsigned int flags) 408 401 { 409 - struct atkbd *atkbd = serio_get_drvdata(serio); 402 + struct atkbd *atkbd = atkbd_from_serio(serio); 410 403 struct input_dev *dev = atkbd->dev; 411 404 unsigned int code = data; 412 405 int scroll = 0, hscroll = 0, click = -1; ··· 916 909 917 910 static void atkbd_cleanup(struct serio *serio) 918 911 { 919 - struct atkbd *atkbd = serio_get_drvdata(serio); 912 + struct atkbd *atkbd = atkbd_from_serio(serio); 920 913 921 914 atkbd_disable(atkbd); 922 915 ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF); ··· 929 922 930 923 static void atkbd_disconnect(struct serio *serio) 931 924 { 932 - struct atkbd *atkbd = serio_get_drvdata(serio); 925 + struct atkbd *atkbd = atkbd_from_serio(serio); 933 926 934 927 atkbd_disable(atkbd); 935 928 ··· 1195 1188 1196 1189 static void atkbd_parse_fwnode_data(struct serio *serio) 1197 1190 { 1198 - struct atkbd *atkbd = serio_get_drvdata(serio); 1191 + struct atkbd *atkbd = atkbd_from_serio(serio); 1199 1192 struct device *dev = &serio->dev; 1200 1193 int n; 1201 1194 ··· 1302 1295 1303 1296 static int atkbd_reconnect(struct serio *serio) 1304 1297 { 1305 - struct atkbd *atkbd = serio_get_drvdata(serio); 1298 + struct atkbd *atkbd = atkbd_from_serio(serio); 1306 1299 struct serio_driver *drv = serio->drv; 1307 1300 int retval = -1; 1308 1301 ··· 1396 1389 ssize_t (*handler)(struct atkbd *, char *)) 1397 1390 { 1398 1391 struct serio *serio = to_serio_port(dev); 1399 - struct atkbd *atkbd = serio_get_drvdata(serio); 1392 + struct atkbd *atkbd = atkbd_from_serio(serio); 1400 1393 1401 1394 return handler(atkbd, buf); 1402 1395 } ··· 1405 1398 ssize_t (*handler)(struct atkbd *, const char *, size_t)) 1406 1399 { 1407 1400 struct serio *serio = to_serio_port(dev); 1408 - struct atkbd *atkbd = serio_get_drvdata(serio); 1401 + struct atkbd *atkbd = atkbd_from_serio(serio); 1409 1402 int retval; 1410 1403 1411 1404 retval = mutex_lock_interruptible(&atkbd->mutex);
+20 -15
drivers/input/mouse/psmouse-base.c
··· 116 116 117 117 static struct workqueue_struct *kpsmoused_wq; 118 118 119 + struct psmouse *psmouse_from_serio(struct serio *serio) 120 + { 121 + struct ps2dev *ps2dev = serio_get_drvdata(serio); 122 + 123 + return container_of(ps2dev, struct psmouse, ps2dev); 124 + } 125 + 119 126 void psmouse_report_standard_buttons(struct input_dev *dev, u8 buttons) 120 127 { 121 128 input_report_key(dev, BTN_LEFT, buttons & BIT(0)); ··· 343 336 static irqreturn_t psmouse_interrupt(struct serio *serio, 344 337 u8 data, unsigned int flags) 345 338 { 346 - struct psmouse *psmouse = serio_get_drvdata(serio); 339 + struct psmouse *psmouse = psmouse_from_serio(serio); 347 340 348 341 if (psmouse->state == PSMOUSE_IGNORE) 349 342 goto out; ··· 1351 1344 goto out; 1352 1345 1353 1346 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1354 - parent = serio_get_drvdata(serio->parent); 1347 + parent = psmouse_from_serio(serio->parent); 1355 1348 psmouse_deactivate(parent); 1356 1349 } 1357 1350 ··· 1435 1428 */ 1436 1429 static void psmouse_cleanup(struct serio *serio) 1437 1430 { 1438 - struct psmouse *psmouse = serio_get_drvdata(serio); 1431 + struct psmouse *psmouse = psmouse_from_serio(serio); 1439 1432 struct psmouse *parent = NULL; 1440 1433 1441 1434 mutex_lock(&psmouse_mutex); 1442 1435 1443 1436 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1444 - parent = serio_get_drvdata(serio->parent); 1437 + parent = psmouse_from_serio(serio->parent); 1445 1438 psmouse_deactivate(parent); 1446 1439 } 1447 1440 ··· 1483 1476 */ 1484 1477 static void psmouse_disconnect(struct serio *serio) 1485 1478 { 1486 - struct psmouse *psmouse = serio_get_drvdata(serio); 1479 + struct psmouse *psmouse = psmouse_from_serio(serio); 1487 1480 struct psmouse *parent = NULL; 1488 1481 1489 1482 mutex_lock(&psmouse_mutex); ··· 1496 1489 mutex_lock(&psmouse_mutex); 1497 1490 1498 1491 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1499 - parent = serio_get_drvdata(serio->parent); 1492 + parent = psmouse_from_serio(serio->parent); 1500 1493 psmouse_deactivate(parent); 1501 1494 } 1502 1495 ··· 1595 1588 * connected to this port can be successfully identified 1596 1589 */ 1597 1590 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1598 - parent = serio_get_drvdata(serio->parent); 1591 + parent = psmouse_from_serio(serio->parent); 1599 1592 psmouse_deactivate(parent); 1600 1593 } 1601 1594 ··· 1610 1603 snprintf(psmouse->phys, sizeof(psmouse->phys), "%s/input0", serio->phys); 1611 1604 1612 1605 psmouse_set_state(psmouse, PSMOUSE_INITIALIZING); 1613 - 1614 - serio_set_drvdata(serio, psmouse); 1615 1606 1616 1607 error = serio_open(serio, drv); 1617 1608 if (error) ··· 1681 1676 1682 1677 static int __psmouse_reconnect(struct serio *serio, bool fast_reconnect) 1683 1678 { 1684 - struct psmouse *psmouse = serio_get_drvdata(serio); 1679 + struct psmouse *psmouse = psmouse_from_serio(serio); 1685 1680 struct psmouse *parent = NULL; 1686 1681 int (*reconnect_handler)(struct psmouse *); 1687 1682 enum psmouse_type type; ··· 1700 1695 } 1701 1696 1702 1697 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1703 - parent = serio_get_drvdata(serio->parent); 1698 + parent = psmouse_from_serio(serio->parent); 1704 1699 psmouse_deactivate(parent); 1705 1700 } 1706 1701 ··· 1799 1794 { 1800 1795 struct serio *serio = to_serio_port(dev); 1801 1796 struct psmouse_attribute *attr = to_psmouse_attr(devattr); 1802 - struct psmouse *psmouse = serio_get_drvdata(serio); 1797 + struct psmouse *psmouse = psmouse_from_serio(serio); 1803 1798 1804 1799 if (psmouse->protocol->smbus_companion && 1805 1800 devattr != &psmouse_attr_protocol.dattr) ··· 1820 1815 if (retval) 1821 1816 goto out; 1822 1817 1823 - psmouse = serio_get_drvdata(serio); 1818 + psmouse = psmouse_from_serio(serio); 1824 1819 1825 1820 if (psmouse->protocol->smbus_companion && 1826 1821 devattr != &psmouse_attr_protocol.dattr) { ··· 1835 1830 } 1836 1831 1837 1832 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1838 - parent = serio_get_drvdata(serio->parent); 1833 + parent = psmouse_from_serio(serio->parent); 1839 1834 psmouse_deactivate(parent); 1840 1835 } 1841 1836 ··· 1930 1925 } 1931 1926 1932 1927 if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) { 1933 - parent = serio_get_drvdata(serio->parent); 1928 + parent = psmouse_from_serio(serio->parent); 1934 1929 if (parent->pt_deactivate) 1935 1930 parent->pt_deactivate(parent); 1936 1931 }
+2
drivers/input/mouse/psmouse.h
··· 130 130 void (*pt_deactivate)(struct psmouse *psmouse); 131 131 }; 132 132 133 + struct psmouse *psmouse_from_serio(struct serio *serio); 134 + 133 135 void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work, 134 136 unsigned long delay); 135 137 int psmouse_reset(struct psmouse *psmouse);
+5 -5
drivers/input/mouse/synaptics.c
··· 628 628 ****************************************************************************/ 629 629 static int synaptics_pt_write(struct serio *serio, u8 c) 630 630 { 631 - struct psmouse *parent = serio_get_drvdata(serio->parent); 631 + struct psmouse *parent = psmouse_from_serio(serio->parent); 632 632 u8 rate_param = SYN_PS_CLIENT_CMD; /* indicates that we want pass-through port */ 633 633 int error; 634 634 ··· 645 645 646 646 static int synaptics_pt_start(struct serio *serio) 647 647 { 648 - struct psmouse *parent = serio_get_drvdata(serio->parent); 648 + struct psmouse *parent = psmouse_from_serio(serio->parent); 649 649 struct synaptics_data *priv = parent->private; 650 650 651 651 serio_pause_rx(parent->ps2dev.serio); ··· 657 657 658 658 static void synaptics_pt_stop(struct serio *serio) 659 659 { 660 - struct psmouse *parent = serio_get_drvdata(serio->parent); 660 + struct psmouse *parent = psmouse_from_serio(serio->parent); 661 661 struct synaptics_data *priv = parent->private; 662 662 663 663 serio_pause_rx(parent->ps2dev.serio); ··· 672 672 673 673 static void synaptics_pass_pt_packet(struct serio *ptport, u8 *packet) 674 674 { 675 - struct psmouse *child = serio_get_drvdata(ptport); 675 + struct psmouse *child = psmouse_from_serio(ptport); 676 676 677 677 if (child && child->state == PSMOUSE_ACTIVATED) { 678 678 serio_interrupt(ptport, packet[1], 0); ··· 688 688 static void synaptics_pt_activate(struct psmouse *psmouse) 689 689 { 690 690 struct synaptics_data *priv = psmouse->private; 691 - struct psmouse *child = serio_get_drvdata(priv->pt_port); 691 + struct psmouse *child = psmouse_from_serio(priv->pt_port); 692 692 693 693 /* adjust the touchpad to child's choice of protocol */ 694 694 if (child) {
+1 -1
drivers/input/mouse/trackpoint.c
··· 216 216 { 217 217 struct device *dev = kobj_to_dev(kobj); 218 218 struct serio *serio = to_serio_port(dev); 219 - struct psmouse *psmouse = serio_get_drvdata(serio); 219 + struct psmouse *psmouse = psmouse_from_serio(serio); 220 220 221 221 return trackpoint_is_attr_available(psmouse, attr) ? attr->mode : 0; 222 222 }
+1
drivers/input/serio/libps2.c
··· 382 382 lockdep_set_subclass(&ps2dev->cmd_mutex, serio->depth); 383 383 init_waitqueue_head(&ps2dev->wait); 384 384 ps2dev->serio = serio; 385 + serio_set_drvdata(serio, ps2dev); 385 386 } 386 387 EXPORT_SYMBOL(ps2_init); 387 388