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 <hslester96@xxxxxxxxx> --- 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