summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDmitry Torokhov <dmitry.torokhov@gmail.com>2021-07-21 07:48:35 +0300
committerDmitry Torokhov <dmitry.torokhov@gmail.com>2021-07-21 07:48:35 +0300
commit7d3370e506ec5cd781ef6b938cf29c046eb77585 (patch)
treef52d548b7b8896b750540a224424427ce54373cb
parent133b6558c75566bf692460fd1a09b3b795ef2c1a (diff)
downloadlinux-7d3370e506ec5cd781ef6b938cf29c046eb77585.tar.xz
Revert "Input: serio - make write method mandatory"
This reverts commit 81c7c0a350bfe9306ad9fb10356534ede8f4ab31. The idea to make write method mandatory was flawed as several client drivers (such as atkbd) check for presence of write() method to adjust behavior of the driver. Reported-by: Nathan Chancellor <nathan@kernel.org> Reported-by: Michael Kelley <mikelley@microsoft.com> Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
-rw-r--r--drivers/input/serio/ams_delta_serio.c6
-rw-r--r--drivers/input/serio/serio.c5
-rw-r--r--include/linux/serio.h5
3 files changed, 4 insertions, 12 deletions
diff --git a/drivers/input/serio/ams_delta_serio.c b/drivers/input/serio/ams_delta_serio.c
index a1c314897951..1c0be299f179 100644
--- a/drivers/input/serio/ams_delta_serio.c
+++ b/drivers/input/serio/ams_delta_serio.c
@@ -89,11 +89,6 @@ 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;
@@ -162,7 +157,6 @@ 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));
diff --git a/drivers/input/serio/serio.c b/drivers/input/serio/serio.c
index 8d229a11bb6b..29f491082926 100644
--- a/drivers/input/serio/serio.c
+++ b/drivers/input/serio/serio.c
@@ -694,11 +694,6 @@ 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);
}
diff --git a/include/linux/serio.h b/include/linux/serio.h
index 075f1b8d76fa..6c27d413da92 100644
--- a/include/linux/serio.h
+++ b/include/linux/serio.h
@@ -121,7 +121,10 @@ void serio_unregister_driver(struct serio_driver *drv);
static inline int serio_write(struct serio *serio, unsigned char data)
{
- return serio->write(serio, data);
+ if (serio->write)
+ return serio->write(serio, data);
+ else
+ return -1;
}
static inline void serio_drv_write_wakeup(struct serio *serio)