@@ -219,6 +219,13 @@ static int __maybe_unused ep93xx_keypad_resume(struct device *dev)
219
219
static SIMPLE_DEV_PM_OPS (ep93xx_keypad_pm_ops ,
220
220
ep93xx_keypad_suspend , ep93xx_keypad_resume ) ;
221
221
222
+ static void ep93xx_keypad_release_gpio_action (void * _pdev )
223
+ {
224
+ struct platform_device * pdev = _pdev ;
225
+
226
+ ep93xx_keypad_release_gpio (pdev );
227
+ }
228
+
222
229
static int ep93xx_keypad_probe (struct platform_device * pdev )
223
230
{
224
231
struct ep93xx_keypad * keypad ;
@@ -227,88 +234,73 @@ static int ep93xx_keypad_probe(struct platform_device *pdev)
227
234
struct resource * res ;
228
235
int err ;
229
236
230
- keypad = kzalloc ( sizeof (struct ep93xx_keypad ), GFP_KERNEL );
237
+ keypad = devm_kzalloc ( & pdev -> dev , sizeof (* keypad ), GFP_KERNEL );
231
238
if (!keypad )
232
239
return - ENOMEM ;
233
240
234
241
keypad -> pdata = dev_get_platdata (& pdev -> dev );
235
- if (!keypad -> pdata ) {
236
- err = - EINVAL ;
237
- goto failed_free ;
238
- }
242
+ if (!keypad -> pdata )
243
+ return - EINVAL ;
239
244
240
245
keymap_data = keypad -> pdata -> keymap_data ;
241
- if (!keymap_data ) {
242
- err = - EINVAL ;
243
- goto failed_free ;
244
- }
246
+ if (!keymap_data )
247
+ return - EINVAL ;
245
248
246
249
keypad -> irq = platform_get_irq (pdev , 0 );
247
- if (keypad -> irq < 0 ) {
248
- err = keypad -> irq ;
249
- goto failed_free ;
250
- }
250
+ if (keypad -> irq < 0 )
251
+ return keypad -> irq ;
251
252
252
253
res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
253
- if (!res ) {
254
- err = - ENXIO ;
255
- goto failed_free ;
256
- }
257
-
258
- res = request_mem_region (res -> start , resource_size (res ), pdev -> name );
259
- if (!res ) {
260
- err = - EBUSY ;
261
- goto failed_free ;
262
- }
254
+ if (!res )
255
+ return - ENXIO ;
263
256
264
- keypad -> mmio_base = ioremap (res -> start , resource_size (res ));
265
- if (keypad -> mmio_base == NULL ) {
266
- err = - ENXIO ;
267
- goto failed_free_mem ;
268
- }
257
+ keypad -> mmio_base = devm_ioremap_resource (& pdev -> dev , res );
258
+ if (IS_ERR (keypad -> mmio_base ))
259
+ return PTR_ERR (keypad -> mmio_base );
269
260
270
261
err = ep93xx_keypad_acquire_gpio (pdev );
271
262
if (err )
272
- goto failed_free_io ;
263
+ return err ;
273
264
274
- keypad -> clk = clk_get (& pdev -> dev , NULL );
275
- if (IS_ERR (keypad -> clk )) {
276
- err = PTR_ERR (keypad -> clk );
277
- goto failed_free_gpio ;
278
- }
265
+ err = devm_add_action_or_reset (& pdev -> dev ,
266
+ ep93xx_keypad_release_gpio_action , pdev );
267
+ if (err )
268
+ return err ;
279
269
280
- input_dev = input_allocate_device ();
281
- if (!input_dev ) {
282
- err = - ENOMEM ;
283
- goto failed_put_clk ;
284
- }
270
+ keypad -> clk = devm_clk_get (& pdev -> dev , NULL );
271
+ if (IS_ERR (keypad -> clk ))
272
+ return PTR_ERR (keypad -> clk );
273
+
274
+ input_dev = devm_input_allocate_device (& pdev -> dev );
275
+ if (!input_dev )
276
+ return - ENOMEM ;
285
277
286
278
keypad -> input_dev = input_dev ;
287
279
288
280
input_dev -> name = pdev -> name ;
289
281
input_dev -> id .bustype = BUS_HOST ;
290
282
input_dev -> open = ep93xx_keypad_open ;
291
283
input_dev -> close = ep93xx_keypad_close ;
292
- input_dev -> dev .parent = & pdev -> dev ;
293
284
294
285
err = matrix_keypad_build_keymap (keymap_data , NULL ,
295
286
EP93XX_MATRIX_ROWS , EP93XX_MATRIX_COLS ,
296
287
keypad -> keycodes , input_dev );
297
288
if (err )
298
- goto failed_free_dev ;
289
+ return err ;
299
290
300
291
if (keypad -> pdata -> flags & EP93XX_KEYPAD_AUTOREPEAT )
301
292
__set_bit (EV_REP , input_dev -> evbit );
302
293
input_set_drvdata (input_dev , keypad );
303
294
304
- err = request_irq (keypad -> irq , ep93xx_keypad_irq_handler ,
305
- 0 , pdev -> name , keypad );
295
+ err = devm_request_irq (& pdev -> dev , keypad -> irq ,
296
+ ep93xx_keypad_irq_handler ,
297
+ 0 , pdev -> name , keypad );
306
298
if (err )
307
- goto failed_free_dev ;
299
+ return err ;
308
300
309
301
err = input_register_device (input_dev );
310
302
if (err )
311
- goto failed_free_irq ;
303
+ return err ;
312
304
313
305
platform_set_drvdata (pdev , keypad );
314
306
@@ -318,48 +310,12 @@ static int ep93xx_keypad_probe(struct platform_device *pdev)
318
310
dev_warn (& pdev -> dev , "failed to set up wakeup irq: %d\n" , err );
319
311
320
312
return 0 ;
321
-
322
- failed_free_irq :
323
- free_irq (keypad -> irq , keypad );
324
- failed_free_dev :
325
- input_free_device (input_dev );
326
- failed_put_clk :
327
- clk_put (keypad -> clk );
328
- failed_free_gpio :
329
- ep93xx_keypad_release_gpio (pdev );
330
- failed_free_io :
331
- iounmap (keypad -> mmio_base );
332
- failed_free_mem :
333
- release_mem_region (res -> start , resource_size (res ));
334
- failed_free :
335
- kfree (keypad );
336
- return err ;
337
313
}
338
314
339
315
static int ep93xx_keypad_remove (struct platform_device * pdev )
340
316
{
341
- struct ep93xx_keypad * keypad = platform_get_drvdata (pdev );
342
- struct resource * res ;
343
-
344
317
dev_pm_clear_wake_irq (& pdev -> dev );
345
318
346
- free_irq (keypad -> irq , keypad );
347
-
348
- if (keypad -> enabled )
349
- clk_disable (keypad -> clk );
350
- clk_put (keypad -> clk );
351
-
352
- input_unregister_device (keypad -> input_dev );
353
-
354
- ep93xx_keypad_release_gpio (pdev );
355
-
356
- iounmap (keypad -> mmio_base );
357
-
358
- res = platform_get_resource (pdev , IORESOURCE_MEM , 0 );
359
- release_mem_region (res -> start , resource_size (res ));
360
-
361
- kfree (keypad );
362
-
363
319
return 0 ;
364
320
}
365
321
0 commit comments