Input: qt2160 - convert to use devm_* api
authorYangtao Li <frank.li@vivo.com>
Mon, 24 Jul 2023 05:13:42 +0000 (22:13 -0700)
committerDmitry Torokhov <dmitry.torokhov@gmail.com>
Sat, 29 Jul 2023 01:03:11 +0000 (18:03 -0700)
Use devm_* api to simplify code, this makes it unnecessary to explicitly
release resources.

Signed-off-by: Yangtao Li <frank.li@vivo.com>
Link: https://lore.kernel.org/r/20230714080611.81302-7-frank.li@vivo.com
Link: https://lore.kernel.org/r/20230724051345.335219-4-dmitry.torokhov@gmail.com
Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
drivers/input/keyboard/qt2160.c

index 6cfaabd1048227067d7b4e0c2656c6d72ba71732..7e3b09642ab754db16952076bfd3dd1971b07e67 100644 (file)
@@ -239,7 +239,7 @@ static int qt2160_write(struct i2c_client *client, u8 reg, u8 data)
 static int qt2160_register_leds(struct qt2160_data *qt2160)
 {
        struct i2c_client *client = qt2160->client;
-       int ret;
+       int error;
        int i;
 
        for (i = 0; i < QT2160_NUM_LEDS_X; i++) {
@@ -252,9 +252,9 @@ static int qt2160_register_leds(struct qt2160_data *qt2160)
                led->id = i;
                led->qt2160 = qt2160;
 
-               ret = led_classdev_register(&client->dev, &led->cdev);
-               if (ret < 0)
-                       return ret;
+               error = devm_led_classdev_register(&client->dev, &led->cdev);
+               if (error)
+                       return error;
        }
 
        /* Tur off LEDs */
@@ -265,14 +265,6 @@ static int qt2160_register_leds(struct qt2160_data *qt2160)
        return 0;
 }
 
-static void qt2160_unregister_leds(struct qt2160_data *qt2160)
-{
-       int i;
-
-       for (i = 0; i < QT2160_NUM_LEDS_X; i++)
-               led_classdev_unregister(&qt2160->leds[i].cdev);
-}
-
 #else
 
 static inline int qt2160_register_leds(struct qt2160_data *qt2160)
@@ -280,10 +272,6 @@ static inline int qt2160_register_leds(struct qt2160_data *qt2160)
        return 0;
 }
 
-static inline void qt2160_unregister_leds(struct qt2160_data *qt2160)
-{
-}
-
 #endif
 
 static bool qt2160_identify(struct i2c_client *client)
@@ -334,13 +322,13 @@ static int qt2160_probe(struct i2c_client *client)
                return -ENODEV;
 
        /* Chip is valid and active. Allocate structure */
-       qt2160 = kzalloc(sizeof(struct qt2160_data), GFP_KERNEL);
-       input = input_allocate_device();
-       if (!qt2160 || !input) {
-               dev_err(&client->dev, "insufficient memory\n");
-               error = -ENOMEM;
-               goto err_free_mem;
-       }
+       qt2160 = devm_kzalloc(&client->dev, sizeof(*qt2160), GFP_KERNEL);
+       if (!qt2160)
+               return -ENOMEM;
+
+       input = devm_input_allocate_device(&client->dev);
+       if (!input)
+               return -ENOMEM;
 
        qt2160->client = client;
        qt2160->input = input;
@@ -366,22 +354,24 @@ static int qt2160_probe(struct i2c_client *client)
        error = qt2160_write(client, QT2160_CMD_CALIBRATE, 1);
        if (error) {
                dev_err(&client->dev, "failed to calibrate device\n");
-               goto err_free_mem;
+               return error;
        }
 
        if (client->irq) {
-               error = request_threaded_irq(client->irq, NULL, qt2160_irq,
-                                            IRQF_ONESHOT, "qt2160", input);
+               error = devm_request_threaded_irq(&client->dev, client->irq,
+                                                 NULL, qt2160_irq,
+                                                 IRQF_ONESHOT,
+                                                 "qt2160", input);
                if (error) {
                        dev_err(&client->dev,
                                "failed to allocate irq %d\n", client->irq);
-                       goto err_free_mem;
+                       return error;
                }
        } else {
                error = input_setup_polling(input, qt2160_get_key_matrix);
                if (error) {
                        dev_err(&client->dev, "Failed to setup polling\n");
-                       goto err_free_mem;
+                       return error;
                }
                input_set_poll_interval(input, QT2160_CYCLE_INTERVAL);
        }
@@ -389,43 +379,17 @@ static int qt2160_probe(struct i2c_client *client)
        error = qt2160_register_leds(qt2160);
        if (error) {
                dev_err(&client->dev, "Failed to register leds\n");
-               goto err_free_irq;
+               return error;
        }
 
        error = input_register_device(qt2160->input);
        if (error) {
                dev_err(&client->dev,
                        "Failed to register input device\n");
-               goto err_unregister_leds;
+               return error;
        }
 
-       i2c_set_clientdata(client, qt2160);
-
        return 0;
-
-err_unregister_leds:
-       qt2160_unregister_leds(qt2160);
-err_free_irq:
-       if (client->irq)
-               free_irq(client->irq, qt2160);
-err_free_mem:
-       input_free_device(input);
-       kfree(qt2160);
-       return error;
-}
-
-static void qt2160_remove(struct i2c_client *client)
-{
-       struct qt2160_data *qt2160 = i2c_get_clientdata(client);
-
-       qt2160_unregister_leds(qt2160);
-
-       /* Release IRQ so no queue will be scheduled */
-       if (client->irq)
-               free_irq(client->irq, qt2160);
-
-       input_unregister_device(qt2160->input);
-       kfree(qt2160);
 }
 
 static const struct i2c_device_id qt2160_idtable[] = {
@@ -442,7 +406,6 @@ static struct i2c_driver qt2160_driver = {
 
        .id_table       = qt2160_idtable,
        .probe          = qt2160_probe,
-       .remove         = qt2160_remove,
 };
 
 module_i2c_driver(qt2160_driver);