Skip to content

Commit

Permalink
Input: serio - make write method mandatory
Browse files Browse the repository at this point in the history
Given that all serio drivers except one implement write() method
let's make it mandatory to avoid testing for its presence whenever
we attempt to use it.

Link: https://lore.kernel.org/r/YFgUxG/TljMuVeQ3@google.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
  • Loading branch information
Dmitry Torokhov committed Jul 19, 2021
1 parent 9aa7591 commit 81c7c0a
Show file tree
Hide file tree
Showing 3 changed files with 12 additions and 4 deletions.
6 changes: 6 additions & 0 deletions drivers/input/serio/ams_delta_serio.c
Original file line number Diff line number Diff line change
Expand Up @@ -89,6 +89,11 @@ static irqreturn_t ams_delta_serio_interrupt(int irq, void *dev_id)
return IRQ_HANDLED;
}

static int ams_delta_serio_write(struct serio *serio, u8 data)
{
return -EINVAL;
}

static int ams_delta_serio_open(struct serio *serio)
{
struct ams_delta_serio *priv = serio->port_data;
Expand Down Expand Up @@ -157,6 +162,7 @@ static int ams_delta_serio_init(struct platform_device *pdev)
priv->serio = serio;

serio->id.type = SERIO_8042;
serio->write = ams_delta_serio_write;
serio->open = ams_delta_serio_open;
serio->close = ams_delta_serio_close;
strlcpy(serio->name, "AMS DELTA keyboard adapter", sizeof(serio->name));
Expand Down
5 changes: 5 additions & 0 deletions drivers/input/serio/serio.c
Original file line number Diff line number Diff line change
Expand Up @@ -694,6 +694,11 @@ EXPORT_SYMBOL(serio_reconnect);
*/
void __serio_register_port(struct serio *serio, struct module *owner)
{
if (!serio->write) {
pr_err("%s: refusing to register %s without write method\n",
__func__, serio->name);
return;
}
serio_init_port(serio);
serio_queue_event(serio, owner, SERIO_REGISTER_PORT);
}
Expand Down
5 changes: 1 addition & 4 deletions include/linux/serio.h
Original file line number Diff line number Diff line change
Expand Up @@ -121,10 +121,7 @@ void serio_unregister_driver(struct serio_driver *drv);

static inline int serio_write(struct serio *serio, unsigned char data)
{
if (serio->write)
return serio->write(serio, data);
else
return -1;
return serio->write(serio, data);
}

static inline void serio_drv_write_wakeup(struct serio *serio)
Expand Down

0 comments on commit 81c7c0a

Please sign in to comment.