This driver calls input_register_device() in probe, but misses
input_unregister_device() in probe failure and remove.
Add the missed function calls to fix it.

Signed-off-by: Chuhong Yuan <[email protected]>
---
 drivers/input/touchscreen/s6sy761.c | 11 +++++++++--
 1 file changed, 9 insertions(+), 2 deletions(-)

diff --git a/drivers/input/touchscreen/s6sy761.c 
b/drivers/input/touchscreen/s6sy761.c
index b63d7fdf0cd2..cd8a7bd9be1e 100644
--- a/drivers/input/touchscreen/s6sy761.c
+++ b/drivers/input/touchscreen/s6sy761.c
@@ -464,21 +464,28 @@ static int s6sy761_probe(struct i2c_client *client,
                                        IRQF_TRIGGER_LOW | IRQF_ONESHOT,
                                        "s6sy761_irq", sdata);
        if (err)
-               return err;
+               goto err_unregister;
 
        err = devm_device_add_group(&client->dev, &s6sy761_attribute_group);
        if (err)
-               return err;
+               goto err_unregister;
 
        pm_runtime_enable(&client->dev);
 
        return 0;
+
+err_unregister:
+       input_unregister_device(sdata->input);
+       return err;
 }
 
 static int s6sy761_remove(struct i2c_client *client)
 {
+       struct s6sy761_data *sdata = i2c_get_clientdata(client);
+
        pm_runtime_disable(&client->dev);
 
+       input_unregister_device(sdata->input);
        return 0;
 }
 
-- 
2.26.2

Reply via email to