Skip to content

Commit e175eae

Browse files
bbkzzdtor
authored andcommitted
Input: mcs-touchkey - convert to use devm_* api
Use devm_* api to simplify code, this makes it unnecessary to explicitly release resources. Signed-off-by: Yangtao Li <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent caddca3 commit e175eae

File tree

1 file changed

+29
-34
lines changed

1 file changed

+29
-34
lines changed

drivers/input/keyboard/mcs_touchkey.c

Lines changed: 29 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,13 @@ static irqreturn_t mcs_touchkey_interrupt(int irq, void *dev_id)
9292
return IRQ_HANDLED;
9393
}
9494

95+
static void mcs_touchkey_poweroff(void *data)
96+
{
97+
struct mcs_touchkey_data *touchkey = data;
98+
99+
touchkey->poweron(false);
100+
}
101+
95102
static int mcs_touchkey_probe(struct i2c_client *client)
96103
{
97104
const struct i2c_device_id *id = i2c_client_get_device_id(client);
@@ -109,13 +116,16 @@ static int mcs_touchkey_probe(struct i2c_client *client)
109116
return -EINVAL;
110117
}
111118

112-
data = kzalloc(struct_size(data, keycodes, pdata->key_maxval + 1),
113-
GFP_KERNEL);
114-
input_dev = input_allocate_device();
115-
if (!data || !input_dev) {
116-
dev_err(&client->dev, "Failed to allocate memory\n");
117-
error = -ENOMEM;
118-
goto err_free_mem;
119+
data = devm_kzalloc(&client->dev,
120+
struct_size(data, keycodes, pdata->key_maxval + 1),
121+
GFP_KERNEL);
122+
if (!data)
123+
return -ENOMEM;
124+
125+
input_dev = devm_input_allocate_device(&client->dev);
126+
if (!input_dev) {
127+
dev_err(&client->dev, "Failed to allocate input device\n");
128+
return -ENOMEM;
119129
}
120130

121131
data->client = client;
@@ -136,15 +146,13 @@ static int mcs_touchkey_probe(struct i2c_client *client)
136146

137147
fw_ver = i2c_smbus_read_byte_data(client, fw_reg);
138148
if (fw_ver < 0) {
139-
error = fw_ver;
140149
dev_err(&client->dev, "i2c read error[%d]\n", error);
141-
goto err_free_mem;
150+
return fw_ver;
142151
}
143152
dev_info(&client->dev, "Firmware version: %d\n", fw_ver);
144153

145154
input_dev->name = "MELFAS MCS Touchkey";
146155
input_dev->id.bustype = BUS_I2C;
147-
input_dev->dev.parent = &client->dev;
148156
input_dev->evbit[0] = BIT_MASK(EV_KEY);
149157
if (!pdata->no_autorepeat)
150158
input_dev->evbit[0] |= BIT_MASK(EV_REP);
@@ -169,40 +177,28 @@ static int mcs_touchkey_probe(struct i2c_client *client)
169177
if (pdata->poweron) {
170178
data->poweron = pdata->poweron;
171179
data->poweron(true);
180+
181+
error = devm_add_action_or_reset(&client->dev,
182+
mcs_touchkey_poweroff, data);
183+
if (error)
184+
return error;
172185
}
173186

174-
error = request_threaded_irq(client->irq, NULL, mcs_touchkey_interrupt,
175-
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
176-
client->dev.driver->name, data);
187+
error = devm_request_threaded_irq(&client->dev, client->irq,
188+
NULL, mcs_touchkey_interrupt,
189+
IRQF_TRIGGER_FALLING | IRQF_ONESHOT,
190+
client->dev.driver->name, data);
177191
if (error) {
178192
dev_err(&client->dev, "Failed to register interrupt\n");
179-
goto err_free_mem;
193+
return error;
180194
}
181195

182196
error = input_register_device(input_dev);
183197
if (error)
184-
goto err_free_irq;
198+
return error;
185199

186200
i2c_set_clientdata(client, data);
187201
return 0;
188-
189-
err_free_irq:
190-
free_irq(client->irq, data);
191-
err_free_mem:
192-
input_free_device(input_dev);
193-
kfree(data);
194-
return error;
195-
}
196-
197-
static void mcs_touchkey_remove(struct i2c_client *client)
198-
{
199-
struct mcs_touchkey_data *data = i2c_get_clientdata(client);
200-
201-
free_irq(client->irq, data);
202-
if (data->poweron)
203-
data->poweron(false);
204-
input_unregister_device(data->input_dev);
205-
kfree(data);
206202
}
207203

208204
static void mcs_touchkey_shutdown(struct i2c_client *client)
@@ -259,7 +255,6 @@ static struct i2c_driver mcs_touchkey_driver = {
259255
.pm = pm_sleep_ptr(&mcs_touchkey_pm_ops),
260256
},
261257
.probe = mcs_touchkey_probe,
262-
.remove = mcs_touchkey_remove,
263258
.shutdown = mcs_touchkey_shutdown,
264259
.id_table = mcs_touchkey_id,
265260
};

0 commit comments

Comments
 (0)