]> git.baikalelectronics.ru Git - kernel.git/commitdiff
Revert "Input: serio - make write method mandatory"
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 21 Jul 2021 04:48:35 +0000 (21:48 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Wed, 21 Jul 2021 04:48:35 +0000 (21:48 -0700)
This reverts commit 978400b45fef7148d1633bbd47d5166b4dd46da9. 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>
drivers/input/serio/ams_delta_serio.c
drivers/input/serio/serio.c
include/linux/serio.h

index a1c3148979511a23865b5d817ed52d7dc9a2ff7b..1c0be299f17904b2cc23ebd18b7068b0854b2c9a 100644 (file)
@@ -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));
index 8d229a11bb6bfb8f25257e82c350fc140adb4f34..29f491082926a3e317e601f2fe2c3f966b8b0126 100644 (file)
@@ -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);
 }
index 075f1b8d76faf94aa9e7d69b0d31b2b6dd4416cd..6c27d413da921dadcdbad2c0d60f34a654f36c98 100644 (file)
@@ -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)