Commit e9d4718d authored by Roger Quadros's avatar Roger Quadros Committed by Dmitry Torokhov

Input: pixcir_i2c_ts - use devres managed resource allocations

Use devm_() and friends for allocating memory, input device
and IRQ.
Signed-off-by: default avatarRoger Quadros <rogerq@ti.com>
Acked-by: default avatarMugunthan V N <mugunthanvnm@ti.com>
Signed-off-by: default avatarDmitry Torokhov <dmitry.torokhov@gmail.com>
parent 19318de1
...@@ -130,6 +130,7 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, ...@@ -130,6 +130,7 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
{ {
const struct pixcir_ts_platform_data *pdata = const struct pixcir_ts_platform_data *pdata =
dev_get_platdata(&client->dev); dev_get_platdata(&client->dev);
struct device *dev = &client->dev;
struct pixcir_i2c_ts_data *tsdata; struct pixcir_i2c_ts_data *tsdata;
struct input_dev *input; struct input_dev *input;
int error; int error;
...@@ -139,12 +140,14 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, ...@@ -139,12 +140,14 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
return -EINVAL; return -EINVAL;
} }
tsdata = kzalloc(sizeof(*tsdata), GFP_KERNEL); tsdata = devm_kzalloc(dev, sizeof(*tsdata), GFP_KERNEL);
input = input_allocate_device(); if (!tsdata)
if (!tsdata || !input) { return -ENOMEM;
dev_err(&client->dev, "Failed to allocate driver data!\n");
error = -ENOMEM; input = devm_input_allocate_device(dev);
goto err_free_mem; if (!input) {
dev_err(dev, "Failed to allocate input device\n");
return -ENOMEM;
} }
tsdata->client = client; tsdata->client = client;
...@@ -165,29 +168,22 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client, ...@@ -165,29 +168,22 @@ static int pixcir_i2c_ts_probe(struct i2c_client *client,
input_set_drvdata(input, tsdata); input_set_drvdata(input, tsdata);
error = request_threaded_irq(client->irq, NULL, pixcir_ts_isr, error = devm_request_threaded_irq(dev, client->irq, NULL, pixcir_ts_isr,
IRQF_TRIGGER_FALLING | IRQF_ONESHOT, IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
client->name, tsdata); client->name, tsdata);
if (error) { if (error) {
dev_err(&client->dev, "Unable to request touchscreen IRQ.\n"); dev_err(dev, "failed to request irq %d\n", client->irq);
goto err_free_mem; return error;
} }
error = input_register_device(input); error = input_register_device(input);
if (error) if (error)
goto err_free_irq; return error;
i2c_set_clientdata(client, tsdata); i2c_set_clientdata(client, tsdata);
device_init_wakeup(&client->dev, 1); device_init_wakeup(&client->dev, 1);
return 0; return 0;
err_free_irq:
free_irq(client->irq, tsdata);
err_free_mem:
input_free_device(input);
kfree(tsdata);
return error;
} }
static int pixcir_i2c_ts_remove(struct i2c_client *client) static int pixcir_i2c_ts_remove(struct i2c_client *client)
...@@ -198,10 +194,6 @@ static int pixcir_i2c_ts_remove(struct i2c_client *client) ...@@ -198,10 +194,6 @@ static int pixcir_i2c_ts_remove(struct i2c_client *client)
tsdata->exiting = true; tsdata->exiting = true;
mb(); mb();
free_irq(client->irq, tsdata);
input_unregister_device(tsdata->input);
kfree(tsdata);
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment