summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/input/keyboard/mcs_touchkey.c27
1 files changed, 11 insertions, 16 deletions
diff --git a/drivers/input/keyboard/mcs_touchkey.c b/drivers/input/keyboard/mcs_touchkey.c
index 9668d3e1be8..86f55b67749 100644
--- a/drivers/input/keyboard/mcs_touchkey.c
+++ b/drivers/input/keyboard/mcs_touchkey.c
@@ -174,14 +174,14 @@ static int mcs_touchkey_probe(struct i2c_client *client,
return PTR_ERR(pdata);
}
- data = kzalloc(sizeof(struct mcs_touchkey_data) +
+ data = devm_kzalloc(&client->dev, sizeof(struct mcs_touchkey_data) +
sizeof(data->keycodes[0]) * (pdata->key_maxval + 1),
GFP_KERNEL);
- input_dev = input_allocate_device();
+ input_dev = devm_input_allocate_device(&client->dev);
if (!data || !input_dev) {
dev_err(&client->dev, "Failed to allocate memory\n");
error = -ENOMEM;
- goto err_free_mem;
+ return error;
}
data->client = client;
@@ -204,7 +204,7 @@ static int mcs_touchkey_probe(struct i2c_client *client,
if (fw_ver < 0) {
error = fw_ver;
dev_err(&client->dev, "i2c read error[%d]\n", error);
- goto err_free_mem;
+ return error;
}
dev_info(&client->dev, "Firmware version: %d\n", fw_ver);
@@ -237,27 +237,22 @@ static int mcs_touchkey_probe(struct i2c_client *client,
data->poweron(true);
}
- error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt,
- IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
- client->dev.driver->name, data);
+ error = devm_request_threaded_irq(&client->dev, client->irq, NULL,
+ mcs_touchkey_interrupt,
+ IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
+ client->dev.driver->name, data);
if (error) {
dev_err(&client->dev, "Failed to register interrupt\n");
- goto err_free_mem;
+ return error;
}
error = input_register_device(input_dev);
if (error)
- goto err_free_irq;
+ return error;
i2c_set_clientdata(client, data);
- return 0;
-err_free_irq:
- free_irq(client->irq, data);
-err_free_mem:
- input_free_device(input_dev);
- kfree(data);
- return error;
+ return 0;
}
static int mcs_touchkey_remove(struct i2c_client *client)