Skip to content

Commit d9202af

Browse files
fableddtor
authored andcommitted
Input: rotary_encoder - convert to devm-* api
Use managed resource API for simplifying error paths. Signed-off-by: Timo Teräs <[email protected]> Signed-off-by: Dmitry Torokhov <[email protected]>
1 parent afd2ff9 commit d9202af

File tree

1 file changed

+25
-61
lines changed

1 file changed

+25
-61
lines changed

drivers/input/misc/rotary_encoder.c

Lines changed: 25 additions & 61 deletions
Original file line numberDiff line numberDiff line change
@@ -211,8 +211,8 @@ static struct rotary_encoder_platform_data *rotary_encoder_parse_dt(struct devic
211211
if (!of_id || !np)
212212
return NULL;
213213

214-
pdata = kzalloc(sizeof(struct rotary_encoder_platform_data),
215-
GFP_KERNEL);
214+
pdata = devm_kzalloc(dev, sizeof(struct rotary_encoder_platform_data),
215+
GFP_KERNEL);
216216
if (!pdata)
217217
return ERR_PTR(-ENOMEM);
218218

@@ -277,12 +277,13 @@ static int rotary_encoder_probe(struct platform_device *pdev)
277277
}
278278
}
279279

280-
encoder = kzalloc(sizeof(struct rotary_encoder), GFP_KERNEL);
281-
input = input_allocate_device();
282-
if (!encoder || !input) {
283-
err = -ENOMEM;
284-
goto exit_free_mem;
285-
}
280+
encoder = devm_kzalloc(dev, sizeof(struct rotary_encoder), GFP_KERNEL);
281+
if (!encoder)
282+
return -ENOMEM;
283+
284+
input = devm_input_allocate_device(dev);
285+
if (!input)
286+
return -ENOMEM;
286287

287288
encoder->input = input;
288289
encoder->pdata = pdata;
@@ -301,16 +302,18 @@ static int rotary_encoder_probe(struct platform_device *pdev)
301302
}
302303

303304
/* request the GPIOs */
304-
err = gpio_request_one(pdata->gpio_a, GPIOF_IN, dev_name(dev));
305+
err = devm_gpio_request_one(dev, pdata->gpio_a, GPIOF_IN,
306+
dev_name(dev));
305307
if (err) {
306308
dev_err(dev, "unable to request GPIO %d\n", pdata->gpio_a);
307-
goto exit_free_mem;
309+
return err;
308310
}
309311

310-
err = gpio_request_one(pdata->gpio_b, GPIOF_IN, dev_name(dev));
312+
err = devm_gpio_request_one(dev, pdata->gpio_b, GPIOF_IN,
313+
dev_name(dev));
311314
if (err) {
312315
dev_err(dev, "unable to request GPIO %d\n", pdata->gpio_b);
313-
goto exit_free_gpio_a;
316+
return err;
314317
}
315318

316319
encoder->irq_a = gpio_to_irq(pdata->gpio_a);
@@ -331,74 +334,36 @@ static int rotary_encoder_probe(struct platform_device *pdev)
331334
default:
332335
dev_err(dev, "'%d' is not a valid steps-per-period value\n",
333336
pdata->steps_per_period);
334-
err = -EINVAL;
335-
goto exit_free_gpio_b;
337+
return -EINVAL;
336338
}
337339

338-
err = request_irq(encoder->irq_a, handler,
339-
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
340-
DRV_NAME, encoder);
340+
err = devm_request_irq(dev, encoder->irq_a, handler,
341+
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
342+
DRV_NAME, encoder);
341343
if (err) {
342344
dev_err(dev, "unable to request IRQ %d\n", encoder->irq_a);
343-
goto exit_free_gpio_b;
345+
return err;
344346
}
345347

346-
err = request_irq(encoder->irq_b, handler,
347-
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
348-
DRV_NAME, encoder);
348+
err = devm_request_irq(dev, encoder->irq_b, handler,
349+
IRQF_TRIGGER_RISING | IRQF_TRIGGER_FALLING,
350+
DRV_NAME, encoder);
349351
if (err) {
350352
dev_err(dev, "unable to request IRQ %d\n", encoder->irq_b);
351-
goto exit_free_irq_a;
353+
return err;
352354
}
353355

354356
err = input_register_device(input);
355357
if (err) {
356358
dev_err(dev, "failed to register input device\n");
357-
goto exit_free_irq_b;
359+
return err;
358360
}
359361

360362
device_init_wakeup(&pdev->dev, pdata->wakeup_source);
361363

362364
platform_set_drvdata(pdev, encoder);
363365

364366
return 0;
365-
366-
exit_free_irq_b:
367-
free_irq(encoder->irq_b, encoder);
368-
exit_free_irq_a:
369-
free_irq(encoder->irq_a, encoder);
370-
exit_free_gpio_b:
371-
gpio_free(pdata->gpio_b);
372-
exit_free_gpio_a:
373-
gpio_free(pdata->gpio_a);
374-
exit_free_mem:
375-
input_free_device(input);
376-
kfree(encoder);
377-
if (!dev_get_platdata(&pdev->dev))
378-
kfree(pdata);
379-
380-
return err;
381-
}
382-
383-
static int rotary_encoder_remove(struct platform_device *pdev)
384-
{
385-
struct rotary_encoder *encoder = platform_get_drvdata(pdev);
386-
const struct rotary_encoder_platform_data *pdata = encoder->pdata;
387-
388-
device_init_wakeup(&pdev->dev, false);
389-
390-
free_irq(encoder->irq_a, encoder);
391-
free_irq(encoder->irq_b, encoder);
392-
gpio_free(pdata->gpio_a);
393-
gpio_free(pdata->gpio_b);
394-
395-
input_unregister_device(encoder->input);
396-
kfree(encoder);
397-
398-
if (!dev_get_platdata(&pdev->dev))
399-
kfree(pdata);
400-
401-
return 0;
402367
}
403368

404369
#ifdef CONFIG_PM_SLEEP
@@ -432,7 +397,6 @@ static SIMPLE_DEV_PM_OPS(rotary_encoder_pm_ops,
432397

433398
static struct platform_driver rotary_encoder_driver = {
434399
.probe = rotary_encoder_probe,
435-
.remove = rotary_encoder_remove,
436400
.driver = {
437401
.name = DRV_NAME,
438402
.pm = &rotary_encoder_pm_ops,

0 commit comments

Comments
 (0)