Skip to content

Commit c0551ab

Browse files
bbkzzdtor
authored andcommitted
Input: nomadik-ske-keypad - convert to use devm_* api
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/20230705052346.39337-8-frank.li@vivo.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent b1c5590 commit c0551ab

1 file changed

Lines changed: 35 additions & 92 deletions

File tree

drivers/input/keyboard/nomadik-ske-keypad.c

Lines changed: 35 additions & 92 deletions
Original file line numberDiff line numberDiff line change
@@ -221,13 +221,20 @@ static irqreturn_t ske_keypad_irq(int irq, void *dev_id)
221221
return IRQ_HANDLED;
222222
}
223223

224+
static void ske_keypad_board_exit(void *data)
225+
{
226+
struct ske_keypad *keypad = data;
227+
228+
keypad->board->exit();
229+
}
230+
224231
static int __init ske_keypad_probe(struct platform_device *pdev)
225232
{
226233
const struct ske_keypad_platform_data *plat =
227234
dev_get_platdata(&pdev->dev);
235+
struct device *dev = &pdev->dev;
228236
struct ske_keypad *keypad;
229237
struct input_dev *input;
230-
struct resource *res;
231238
int irq;
232239
int error;
233240

@@ -238,52 +245,35 @@ static int __init ske_keypad_probe(struct platform_device *pdev)
238245

239246
irq = platform_get_irq(pdev, 0);
240247
if (irq < 0)
241-
return -EINVAL;
242-
243-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
244-
if (!res) {
245-
dev_err(&pdev->dev, "missing platform resources\n");
246-
return -EINVAL;
247-
}
248+
return irq;
248249

249-
keypad = kzalloc(sizeof(struct ske_keypad), GFP_KERNEL);
250-
input = input_allocate_device();
250+
keypad = devm_kzalloc(dev, sizeof(struct ske_keypad),
251+
GFP_KERNEL);
252+
input = devm_input_allocate_device(dev);
251253
if (!keypad || !input) {
252254
dev_err(&pdev->dev, "failed to allocate keypad memory\n");
253-
error = -ENOMEM;
254-
goto err_free_mem;
255+
return -ENOMEM;
255256
}
256257

257258
keypad->irq = irq;
258259
keypad->board = plat;
259260
keypad->input = input;
260261
spin_lock_init(&keypad->ske_keypad_lock);
261262

262-
if (!request_mem_region(res->start, resource_size(res), pdev->name)) {
263-
dev_err(&pdev->dev, "failed to request I/O memory\n");
264-
error = -EBUSY;
265-
goto err_free_mem;
266-
}
267-
268-
keypad->reg_base = ioremap(res->start, resource_size(res));
269-
if (!keypad->reg_base) {
270-
dev_err(&pdev->dev, "failed to remap I/O memory\n");
271-
error = -ENXIO;
272-
goto err_free_mem_region;
273-
}
263+
keypad->reg_base = devm_platform_ioremap_resource(pdev, 0);
264+
if (IS_ERR(keypad->reg_base))
265+
return PTR_ERR(keypad->reg_base);
274266

275-
keypad->pclk = clk_get(&pdev->dev, "apb_pclk");
267+
keypad->pclk = devm_clk_get_enabled(dev, "apb_pclk");
276268
if (IS_ERR(keypad->pclk)) {
277269
dev_err(&pdev->dev, "failed to get pclk\n");
278-
error = PTR_ERR(keypad->pclk);
279-
goto err_iounmap;
270+
return PTR_ERR(keypad->pclk);
280271
}
281272

282-
keypad->clk = clk_get(&pdev->dev, NULL);
273+
keypad->clk = devm_clk_get_enabled(dev, NULL);
283274
if (IS_ERR(keypad->clk)) {
284275
dev_err(&pdev->dev, "failed to get clk\n");
285-
error = PTR_ERR(keypad->clk);
286-
goto err_pclk;
276+
return PTR_ERR(keypad->clk);
287277
}
288278

289279
input->id.bustype = BUS_HOST;
@@ -295,96 +285,50 @@ static int __init ske_keypad_probe(struct platform_device *pdev)
295285
keypad->keymap, input);
296286
if (error) {
297287
dev_err(&pdev->dev, "Failed to build keymap\n");
298-
goto err_clk;
288+
return error;
299289
}
300290

301291
input_set_capability(input, EV_MSC, MSC_SCAN);
302292
if (!plat->no_autorepeat)
303293
__set_bit(EV_REP, input->evbit);
304294

305-
error = clk_prepare_enable(keypad->pclk);
306-
if (error) {
307-
dev_err(&pdev->dev, "Failed to prepare/enable pclk\n");
308-
goto err_clk;
309-
}
310-
311-
error = clk_prepare_enable(keypad->clk);
312-
if (error) {
313-
dev_err(&pdev->dev, "Failed to prepare/enable clk\n");
314-
goto err_pclk_disable;
315-
}
316-
317-
318295
/* go through board initialization helpers */
319296
if (keypad->board->init)
320297
keypad->board->init();
321298

299+
if (keypad->board->exit) {
300+
error = devm_add_action_or_reset(dev, ske_keypad_board_exit,
301+
keypad);
302+
if (error)
303+
return error;
304+
}
305+
322306
error = ske_keypad_chip_init(keypad);
323307
if (error) {
324308
dev_err(&pdev->dev, "unable to init keypad hardware\n");
325-
goto err_clk_disable;
309+
return error;
326310
}
327311

328-
error = request_threaded_irq(keypad->irq, NULL, ske_keypad_irq,
329-
IRQF_ONESHOT, "ske-keypad", keypad);
312+
error = devm_request_threaded_irq(dev, keypad->irq,
313+
NULL, ske_keypad_irq,
314+
IRQF_ONESHOT, "ske-keypad", keypad);
330315
if (error) {
331316
dev_err(&pdev->dev, "allocate irq %d failed\n", keypad->irq);
332-
goto err_clk_disable;
317+
return error;
333318
}
334319

335320
error = input_register_device(input);
336321
if (error) {
337322
dev_err(&pdev->dev,
338-
"unable to register input device: %d\n", error);
339-
goto err_free_irq;
323+
"unable to register input device: %d\n", error);
324+
return error;
340325
}
341326

342327
if (plat->wakeup_enable)
343328
device_init_wakeup(&pdev->dev, true);
344329

345330
platform_set_drvdata(pdev, keypad);
346331

347-
return 0;
348-
349-
err_free_irq:
350-
free_irq(keypad->irq, keypad);
351-
err_clk_disable:
352-
clk_disable_unprepare(keypad->clk);
353-
err_pclk_disable:
354-
clk_disable_unprepare(keypad->pclk);
355-
err_clk:
356-
clk_put(keypad->clk);
357-
err_pclk:
358-
clk_put(keypad->pclk);
359-
err_iounmap:
360-
iounmap(keypad->reg_base);
361-
err_free_mem_region:
362-
release_mem_region(res->start, resource_size(res));
363-
err_free_mem:
364-
input_free_device(input);
365-
kfree(keypad);
366-
return error;
367-
}
368-
369-
static int ske_keypad_remove(struct platform_device *pdev)
370-
{
371-
struct ske_keypad *keypad = platform_get_drvdata(pdev);
372-
struct resource *res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
373-
374-
free_irq(keypad->irq, keypad);
375-
376-
input_unregister_device(keypad->input);
377-
378-
clk_disable_unprepare(keypad->clk);
379-
clk_put(keypad->clk);
380-
381-
if (keypad->board->exit)
382-
keypad->board->exit();
383-
384-
iounmap(keypad->reg_base);
385-
release_mem_region(res->start, resource_size(res));
386-
kfree(keypad);
387-
388332
return 0;
389333
}
390334

@@ -424,7 +368,6 @@ static struct platform_driver ske_keypad_driver = {
424368
.name = "nmk-ske-keypad",
425369
.pm = pm_sleep_ptr(&ske_keypad_dev_pm_ops),
426370
},
427-
.remove = ske_keypad_remove,
428371
};
429372

430373
module_platform_driver_probe(ske_keypad_driver, ske_keypad_probe);

0 commit comments

Comments
 (0)