Skip to content

Commit f1efdf7

Browse files
bbkzzdtor
authored andcommitted
Input: lpc32xx_ts - 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-10-frank.li@vivo.com Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
1 parent c0551ab commit f1efdf7

1 file changed

Lines changed: 22 additions & 76 deletions

File tree

drivers/input/touchscreen/lpc32xx_ts.c

Lines changed: 22 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -198,54 +198,36 @@ static void lpc32xx_ts_close(struct input_dev *dev)
198198

199199
static int lpc32xx_ts_probe(struct platform_device *pdev)
200200
{
201+
struct device *dev = &pdev->dev;
201202
struct lpc32xx_tsc *tsc;
202203
struct input_dev *input;
203-
struct resource *res;
204-
resource_size_t size;
205204
int irq;
206205
int error;
207206

208-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
209-
if (!res) {
210-
dev_err(&pdev->dev, "Can't get memory resource\n");
211-
return -ENOENT;
212-
}
213-
214207
irq = platform_get_irq(pdev, 0);
215208
if (irq < 0)
216209
return irq;
217210

218-
tsc = kzalloc(sizeof(*tsc), GFP_KERNEL);
219-
input = input_allocate_device();
220-
if (!tsc || !input) {
221-
dev_err(&pdev->dev, "failed allocating memory\n");
222-
error = -ENOMEM;
223-
goto err_free_mem;
224-
}
211+
tsc = devm_kzalloc(dev, sizeof(*tsc), GFP_KERNEL);
212+
if (!tsc)
213+
return -ENOMEM;
225214

226-
tsc->dev = input;
227215
tsc->irq = irq;
228216

229-
size = resource_size(res);
230-
231-
if (!request_mem_region(res->start, size, pdev->name)) {
232-
dev_err(&pdev->dev, "TSC registers are not free\n");
233-
error = -EBUSY;
234-
goto err_free_mem;
235-
}
217+
tsc->tsc_base = devm_platform_ioremap_resource(pdev, 0);
218+
if (IS_ERR(tsc->tsc_base))
219+
return PTR_ERR(tsc->tsc_base);
236220

237-
tsc->tsc_base = ioremap(res->start, size);
238-
if (!tsc->tsc_base) {
239-
dev_err(&pdev->dev, "Can't map memory\n");
240-
error = -ENOMEM;
241-
goto err_release_mem;
242-
}
243-
244-
tsc->clk = clk_get(&pdev->dev, NULL);
221+
tsc->clk = devm_clk_get(dev, NULL);
245222
if (IS_ERR(tsc->clk)) {
246223
dev_err(&pdev->dev, "failed getting clock\n");
247-
error = PTR_ERR(tsc->clk);
248-
goto err_unmap;
224+
return PTR_ERR(tsc->clk);
225+
}
226+
227+
input = devm_input_allocate_device(dev);
228+
if (!input) {
229+
dev_err(&pdev->dev, "failed allocating input device\n");
230+
return -ENOMEM;
249231
}
250232

251233
input->name = MOD_NAME;
@@ -254,68 +236,33 @@ static int lpc32xx_ts_probe(struct platform_device *pdev)
254236
input->id.vendor = 0x0001;
255237
input->id.product = 0x0002;
256238
input->id.version = 0x0100;
257-
input->dev.parent = &pdev->dev;
258239
input->open = lpc32xx_ts_open;
259240
input->close = lpc32xx_ts_close;
260241

261-
input->evbit[0] = BIT_MASK(EV_KEY) | BIT_MASK(EV_ABS);
262-
input->keybit[BIT_WORD(BTN_TOUCH)] = BIT_MASK(BTN_TOUCH);
242+
input_set_capability(input, EV_KEY, BTN_TOUCH);
263243
input_set_abs_params(input, ABS_X, LPC32XX_TSC_MIN_XY_VAL,
264244
LPC32XX_TSC_MAX_XY_VAL, 0, 0);
265245
input_set_abs_params(input, ABS_Y, LPC32XX_TSC_MIN_XY_VAL,
266246
LPC32XX_TSC_MAX_XY_VAL, 0, 0);
267247

268248
input_set_drvdata(input, tsc);
249+
tsc->dev = input;
269250

270-
error = request_irq(tsc->irq, lpc32xx_ts_interrupt,
271-
0, pdev->name, tsc);
251+
error = devm_request_irq(dev, tsc->irq, lpc32xx_ts_interrupt,
252+
0, pdev->name, tsc);
272253
if (error) {
273254
dev_err(&pdev->dev, "failed requesting interrupt\n");
274-
goto err_put_clock;
255+
return error;
275256
}
276257

277258
error = input_register_device(input);
278259
if (error) {
279260
dev_err(&pdev->dev, "failed registering input device\n");
280-
goto err_free_irq;
261+
return error;
281262
}
282263

283264
platform_set_drvdata(pdev, tsc);
284-
device_init_wakeup(&pdev->dev, 1);
285-
286-
return 0;
287-
288-
err_free_irq:
289-
free_irq(tsc->irq, tsc);
290-
err_put_clock:
291-
clk_put(tsc->clk);
292-
err_unmap:
293-
iounmap(tsc->tsc_base);
294-
err_release_mem:
295-
release_mem_region(res->start, size);
296-
err_free_mem:
297-
input_free_device(input);
298-
kfree(tsc);
299-
300-
return error;
301-
}
302-
303-
static int lpc32xx_ts_remove(struct platform_device *pdev)
304-
{
305-
struct lpc32xx_tsc *tsc = platform_get_drvdata(pdev);
306-
struct resource *res;
307-
308-
free_irq(tsc->irq, tsc);
309-
310-
input_unregister_device(tsc->dev);
311-
312-
clk_put(tsc->clk);
313-
314-
iounmap(tsc->tsc_base);
315-
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
316-
release_mem_region(res->start, resource_size(res));
317-
318-
kfree(tsc);
265+
device_init_wakeup(&pdev->dev, true);
319266

320267
return 0;
321268
}
@@ -384,7 +331,6 @@ MODULE_DEVICE_TABLE(of, lpc32xx_tsc_of_match);
384331

385332
static struct platform_driver lpc32xx_ts_driver = {
386333
.probe = lpc32xx_ts_probe,
387-
.remove = lpc32xx_ts_remove,
388334
.driver = {
389335
.name = MOD_NAME,
390336
.pm = LPC32XX_TS_PM_OPS,

0 commit comments

Comments
 (0)