Skip to content

Commit 100e169

Browse files
committed
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 <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent d8bde56 commit 100e169

File tree

6 files changed

+44
-29
lines changed

6 files changed

+44
-29
lines changed

drivers/input/keyboard/atkbd.c

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -309,12 +309,19 @@ static ssize_t atkbd_show_function_row_physmap(struct atkbd *atkbd, char *buf)
309309
return vivaldi_function_row_physmap_show(&atkbd->vdata, buf);
310310
}
311311

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+
312319
static umode_t atkbd_attr_is_visible(struct kobject *kobj,
313320
struct attribute *attr, int i)
314321
{
315322
struct device *dev = kobj_to_dev(kobj);
316323
struct serio *serio = to_serio_port(dev);
317-
struct atkbd *atkbd = serio_get_drvdata(serio);
324+
struct atkbd *atkbd = atkbd_from_serio(serio);
318325

319326
if (attr == &atkbd_attr_function_row_physmap.attr &&
320327
!atkbd->vdata.num_function_row_keys)
@@ -399,7 +406,7 @@ static unsigned int atkbd_compat_scancode(struct atkbd *atkbd, unsigned int code
399406
static irqreturn_t atkbd_interrupt(struct serio *serio, unsigned char data,
400407
unsigned int flags)
401408
{
402-
struct atkbd *atkbd = serio_get_drvdata(serio);
409+
struct atkbd *atkbd = atkbd_from_serio(serio);
403410
struct input_dev *dev = atkbd->dev;
404411
unsigned int code = data;
405412
int scroll = 0, hscroll = 0, click = -1;
@@ -909,7 +916,7 @@ static int atkbd_reset_state(struct atkbd *atkbd)
909916

910917
static void atkbd_cleanup(struct serio *serio)
911918
{
912-
struct atkbd *atkbd = serio_get_drvdata(serio);
919+
struct atkbd *atkbd = atkbd_from_serio(serio);
913920

914921
atkbd_disable(atkbd);
915922
ps2_command(&atkbd->ps2dev, NULL, ATKBD_CMD_RESET_DEF);
@@ -922,7 +929,7 @@ static void atkbd_cleanup(struct serio *serio)
922929

923930
static void atkbd_disconnect(struct serio *serio)
924931
{
925-
struct atkbd *atkbd = serio_get_drvdata(serio);
932+
struct atkbd *atkbd = atkbd_from_serio(serio);
926933

927934
atkbd_disable(atkbd);
928935

@@ -1188,7 +1195,7 @@ static void atkbd_set_device_attrs(struct atkbd *atkbd)
11881195

11891196
static void atkbd_parse_fwnode_data(struct serio *serio)
11901197
{
1191-
struct atkbd *atkbd = serio_get_drvdata(serio);
1198+
struct atkbd *atkbd = atkbd_from_serio(serio);
11921199
struct device *dev = &serio->dev;
11931200
int n;
11941201

@@ -1295,7 +1302,7 @@ static int atkbd_connect(struct serio *serio, struct serio_driver *drv)
12951302

12961303
static int atkbd_reconnect(struct serio *serio)
12971304
{
1298-
struct atkbd *atkbd = serio_get_drvdata(serio);
1305+
struct atkbd *atkbd = atkbd_from_serio(serio);
12991306
struct serio_driver *drv = serio->drv;
13001307
int retval = -1;
13011308

@@ -1389,7 +1396,7 @@ static ssize_t atkbd_attr_show_helper(struct device *dev, char *buf,
13891396
ssize_t (*handler)(struct atkbd *, char *))
13901397
{
13911398
struct serio *serio = to_serio_port(dev);
1392-
struct atkbd *atkbd = serio_get_drvdata(serio);
1399+
struct atkbd *atkbd = atkbd_from_serio(serio);
13931400

13941401
return handler(atkbd, buf);
13951402
}
@@ -1398,7 +1405,7 @@ static ssize_t atkbd_attr_set_helper(struct device *dev, const char *buf, size_t
13981405
ssize_t (*handler)(struct atkbd *, const char *, size_t))
13991406
{
14001407
struct serio *serio = to_serio_port(dev);
1401-
struct atkbd *atkbd = serio_get_drvdata(serio);
1408+
struct atkbd *atkbd = atkbd_from_serio(serio);
14021409
int retval;
14031410

14041411
retval = mutex_lock_interruptible(&atkbd->mutex);

drivers/input/mouse/psmouse-base.c

Lines changed: 20 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -116,6 +116,13 @@ static DEFINE_MUTEX(psmouse_mutex);
116116

117117
static struct workqueue_struct *kpsmoused_wq;
118118

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+
119126
void psmouse_report_standard_buttons(struct input_dev *dev, u8 buttons)
120127
{
121128
input_report_key(dev, BTN_LEFT, buttons & BIT(0));
@@ -336,7 +343,7 @@ static void psmouse_handle_oob_data(struct psmouse *psmouse, u8 data)
336343
static irqreturn_t psmouse_interrupt(struct serio *serio,
337344
u8 data, unsigned int flags)
338345
{
339-
struct psmouse *psmouse = serio_get_drvdata(serio);
346+
struct psmouse *psmouse = psmouse_from_serio(serio);
340347

341348
if (psmouse->state == PSMOUSE_IGNORE)
342349
goto out;
@@ -1344,7 +1351,7 @@ static void psmouse_resync(struct work_struct *work)
13441351
goto out;
13451352

13461353
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1347-
parent = serio_get_drvdata(serio->parent);
1354+
parent = psmouse_from_serio(serio->parent);
13481355
psmouse_deactivate(parent);
13491356
}
13501357

@@ -1428,13 +1435,13 @@ static void psmouse_resync(struct work_struct *work)
14281435
*/
14291436
static void psmouse_cleanup(struct serio *serio)
14301437
{
1431-
struct psmouse *psmouse = serio_get_drvdata(serio);
1438+
struct psmouse *psmouse = psmouse_from_serio(serio);
14321439
struct psmouse *parent = NULL;
14331440

14341441
mutex_lock(&psmouse_mutex);
14351442

14361443
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1437-
parent = serio_get_drvdata(serio->parent);
1444+
parent = psmouse_from_serio(serio->parent);
14381445
psmouse_deactivate(parent);
14391446
}
14401447

@@ -1476,7 +1483,7 @@ static void psmouse_cleanup(struct serio *serio)
14761483
*/
14771484
static void psmouse_disconnect(struct serio *serio)
14781485
{
1479-
struct psmouse *psmouse = serio_get_drvdata(serio);
1486+
struct psmouse *psmouse = psmouse_from_serio(serio);
14801487
struct psmouse *parent = NULL;
14811488

14821489
mutex_lock(&psmouse_mutex);
@@ -1489,7 +1496,7 @@ static void psmouse_disconnect(struct serio *serio)
14891496
mutex_lock(&psmouse_mutex);
14901497

14911498
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1492-
parent = serio_get_drvdata(serio->parent);
1499+
parent = psmouse_from_serio(serio->parent);
14931500
psmouse_deactivate(parent);
14941501
}
14951502

@@ -1588,7 +1595,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
15881595
* connected to this port can be successfully identified
15891596
*/
15901597
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1591-
parent = serio_get_drvdata(serio->parent);
1598+
parent = psmouse_from_serio(serio->parent);
15921599
psmouse_deactivate(parent);
15931600
}
15941601

@@ -1604,8 +1611,6 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
16041611

16051612
psmouse_set_state(psmouse, PSMOUSE_INITIALIZING);
16061613

1607-
serio_set_drvdata(serio, psmouse);
1608-
16091614
error = serio_open(serio, drv);
16101615
if (error)
16111616
goto err_clear_drvdata;
@@ -1676,7 +1681,7 @@ static int psmouse_connect(struct serio *serio, struct serio_driver *drv)
16761681

16771682
static int __psmouse_reconnect(struct serio *serio, bool fast_reconnect)
16781683
{
1679-
struct psmouse *psmouse = serio_get_drvdata(serio);
1684+
struct psmouse *psmouse = psmouse_from_serio(serio);
16801685
struct psmouse *parent = NULL;
16811686
int (*reconnect_handler)(struct psmouse *);
16821687
enum psmouse_type type;
@@ -1695,7 +1700,7 @@ static int __psmouse_reconnect(struct serio *serio, bool fast_reconnect)
16951700
}
16961701

16971702
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1698-
parent = serio_get_drvdata(serio->parent);
1703+
parent = psmouse_from_serio(serio->parent);
16991704
psmouse_deactivate(parent);
17001705
}
17011706

@@ -1794,7 +1799,7 @@ ssize_t psmouse_attr_show_helper(struct device *dev, struct device_attribute *de
17941799
{
17951800
struct serio *serio = to_serio_port(dev);
17961801
struct psmouse_attribute *attr = to_psmouse_attr(devattr);
1797-
struct psmouse *psmouse = serio_get_drvdata(serio);
1802+
struct psmouse *psmouse = psmouse_from_serio(serio);
17981803

17991804
if (psmouse->protocol->smbus_companion &&
18001805
devattr != &psmouse_attr_protocol.dattr)
@@ -1815,7 +1820,7 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev
18151820
if (retval)
18161821
goto out;
18171822

1818-
psmouse = serio_get_drvdata(serio);
1823+
psmouse = psmouse_from_serio(serio);
18191824

18201825
if (psmouse->protocol->smbus_companion &&
18211826
devattr != &psmouse_attr_protocol.dattr) {
@@ -1830,7 +1835,7 @@ ssize_t psmouse_attr_set_helper(struct device *dev, struct device_attribute *dev
18301835
}
18311836

18321837
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1833-
parent = serio_get_drvdata(serio->parent);
1838+
parent = psmouse_from_serio(serio->parent);
18341839
psmouse_deactivate(parent);
18351840
}
18361841

@@ -1925,7 +1930,7 @@ static ssize_t psmouse_attr_set_protocol(struct psmouse *psmouse, void *data, co
19251930
}
19261931

19271932
if (serio->parent && serio->id.type == SERIO_PS_PSTHRU) {
1928-
parent = serio_get_drvdata(serio->parent);
1933+
parent = psmouse_from_serio(serio->parent);
19291934
if (parent->pt_deactivate)
19301935
parent->pt_deactivate(parent);
19311936
}

drivers/input/mouse/psmouse.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ struct psmouse {
130130
void (*pt_deactivate)(struct psmouse *psmouse);
131131
};
132132

133+
struct psmouse *psmouse_from_serio(struct serio *serio);
134+
133135
void psmouse_queue_work(struct psmouse *psmouse, struct delayed_work *work,
134136
unsigned long delay);
135137
int psmouse_reset(struct psmouse *psmouse);

drivers/input/mouse/synaptics.c

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -628,7 +628,7 @@ static void synaptics_set_rate(struct psmouse *psmouse, unsigned int rate)
628628
****************************************************************************/
629629
static int synaptics_pt_write(struct serio *serio, u8 c)
630630
{
631-
struct psmouse *parent = serio_get_drvdata(serio->parent);
631+
struct psmouse *parent = psmouse_from_serio(serio->parent);
632632
u8 rate_param = SYN_PS_CLIENT_CMD; /* indicates that we want pass-through port */
633633
int error;
634634

@@ -645,7 +645,7 @@ static int synaptics_pt_write(struct serio *serio, u8 c)
645645

646646
static int synaptics_pt_start(struct serio *serio)
647647
{
648-
struct psmouse *parent = serio_get_drvdata(serio->parent);
648+
struct psmouse *parent = psmouse_from_serio(serio->parent);
649649
struct synaptics_data *priv = parent->private;
650650

651651
serio_pause_rx(parent->ps2dev.serio);
@@ -657,7 +657,7 @@ static int synaptics_pt_start(struct serio *serio)
657657

658658
static void synaptics_pt_stop(struct serio *serio)
659659
{
660-
struct psmouse *parent = serio_get_drvdata(serio->parent);
660+
struct psmouse *parent = psmouse_from_serio(serio->parent);
661661
struct synaptics_data *priv = parent->private;
662662

663663
serio_pause_rx(parent->ps2dev.serio);
@@ -672,7 +672,7 @@ static int synaptics_is_pt_packet(u8 *buf)
672672

673673
static void synaptics_pass_pt_packet(struct serio *ptport, u8 *packet)
674674
{
675-
struct psmouse *child = serio_get_drvdata(ptport);
675+
struct psmouse *child = psmouse_from_serio(ptport);
676676

677677
if (child && child->state == PSMOUSE_ACTIVATED) {
678678
serio_interrupt(ptport, packet[1], 0);
@@ -688,7 +688,7 @@ static void synaptics_pass_pt_packet(struct serio *ptport, u8 *packet)
688688
static void synaptics_pt_activate(struct psmouse *psmouse)
689689
{
690690
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);
692692

693693
/* adjust the touchpad to child's choice of protocol */
694694
if (child) {

drivers/input/mouse/trackpoint.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -216,7 +216,7 @@ static umode_t trackpoint_is_attr_visible(struct kobject *kobj,
216216
{
217217
struct device *dev = kobj_to_dev(kobj);
218218
struct serio *serio = to_serio_port(dev);
219-
struct psmouse *psmouse = serio_get_drvdata(serio);
219+
struct psmouse *psmouse = psmouse_from_serio(serio);
220220

221221
return trackpoint_is_attr_available(psmouse, attr) ? attr->mode : 0;
222222
}

drivers/input/serio/libps2.c

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -382,6 +382,7 @@ void ps2_init(struct ps2dev *ps2dev, struct serio *serio)
382382
lockdep_set_subclass(&ps2dev->cmd_mutex, serio->depth);
383383
init_waitqueue_head(&ps2dev->wait);
384384
ps2dev->serio = serio;
385+
serio_set_drvdata(serio, ps2dev);
385386
}
386387
EXPORT_SYMBOL(ps2_init);
387388

0 commit comments

Comments
 (0)