]> git.karo-electronics.de Git - karo-tx-linux.git/blobdiff - drivers/input/touchscreen/egalax_ts.c
Merge branch 'for-next' of git://github.com/rydberg/linux into next
[karo-tx-linux.git] / drivers / input / touchscreen / egalax_ts.c
index 39f3df8670c311ec2373ec4ddad585ce4217743b..ef5fcb0945e910b11918b26159a2860cec2cba2a 100644 (file)
@@ -166,24 +166,22 @@ static int egalax_firmware_version(struct i2c_client *client)
 }
 
 static int egalax_ts_probe(struct i2c_client *client,
-                                      const struct i2c_device_id *id)
+                          const struct i2c_device_id *id)
 {
        struct egalax_ts *ts;
        struct input_dev *input_dev;
-       int ret;
        int error;
 
-       ts = kzalloc(sizeof(struct egalax_ts), GFP_KERNEL);
+       ts = devm_kzalloc(&client->dev, sizeof(struct egalax_ts), GFP_KERNEL);
        if (!ts) {
                dev_err(&client->dev, "Failed to allocate memory\n");
                return -ENOMEM;
        }
 
-       input_dev = input_allocate_device();
+       input_dev = devm_input_allocate_device(&client->dev);
        if (!input_dev) {
                dev_err(&client->dev, "Failed to allocate memory\n");
-               error = -ENOMEM;
-               goto err_free_ts;
+               return -ENOMEM;
        }
 
        ts->client = client;
@@ -193,19 +191,17 @@ static int egalax_ts_probe(struct i2c_client *client,
        error = egalax_wake_up_device(client);
        if (error) {
                dev_err(&client->dev, "Failed to wake up the controller\n");
-               goto err_free_dev;
+               return error;
        }
 
-       ret = egalax_firmware_version(client);
-       if (ret < 0) {
+       error = egalax_firmware_version(client);
+       if (error < 0) {
                dev_err(&client->dev, "Failed to read firmware version\n");
-               error = -EIO;
-               goto err_free_dev;
+               return error;
        }
 
        input_dev->name = "EETI eGalax Touch Screen";
        input_dev->id.bustype = BUS_I2C;
-       input_dev->dev.parent = &client->dev;
 
        __set_bit(EV_ABS, input_dev->evbit);
        __set_bit(EV_KEY, input_dev->evbit);
@@ -221,41 +217,21 @@ static int egalax_ts_probe(struct i2c_client *client,
 
        input_set_drvdata(input_dev, ts);
 
-       error = request_threaded_irq(client->irq, NULL, egalax_ts_interrupt,
-                                    IRQF_TRIGGER_LOW | IRQF_ONESHOT,
-                                    "egalax_ts", ts);
+       error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+                                         egalax_ts_interrupt,
+                                         IRQF_TRIGGER_LOW | IRQF_ONESHOT,
+                                         "egalax_ts", ts);
        if (error < 0) {
                dev_err(&client->dev, "Failed to register interrupt\n");
-               goto err_free_dev;
+               return error;
        }
 
        error = input_register_device(ts->input_dev);
        if (error)
-               goto err_free_irq;
+               return error;
 
        i2c_set_clientdata(client, ts);
        return 0;
-
-err_free_irq:
-       free_irq(client->irq, ts);
-err_free_dev:
-       input_free_device(input_dev);
-err_free_ts:
-       kfree(ts);
-
-       return error;
-}
-
-static int egalax_ts_remove(struct i2c_client *client)
-{
-       struct egalax_ts *ts = i2c_get_clientdata(client);
-
-       free_irq(client->irq, ts);
-
-       input_unregister_device(ts->input_dev);
-       kfree(ts);
-
-       return 0;
 }
 
 static const struct i2c_device_id egalax_ts_id[] = {
@@ -301,7 +277,6 @@ static struct i2c_driver egalax_ts_driver = {
        },
        .id_table       = egalax_ts_id,
        .probe          = egalax_ts_probe,
-       .remove         = egalax_ts_remove,
 };
 
 module_i2c_driver(egalax_ts_driver);