@@ -278,38 +278,41 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
278
278
279
279
/* initialized strobe lines as outputs, activated */
280
280
for (i = 0 ; i < pdata -> num_col_gpios ; i ++ ) {
281
- err = gpio_request (pdata -> col_gpios [i ], "matrix_kbd_col" );
281
+ err = devm_gpio_request (& pdev -> dev ,
282
+ pdata -> col_gpios [i ], "matrix_kbd_col" );
282
283
if (err ) {
283
284
dev_err (& pdev -> dev ,
284
285
"failed to request GPIO%d for COL%d\n" ,
285
286
pdata -> col_gpios [i ], i );
286
- goto err_free_cols ;
287
+ return err ;
287
288
}
288
289
289
290
gpio_direction_output (pdata -> col_gpios [i ], !pdata -> active_low );
290
291
}
291
292
292
293
for (i = 0 ; i < pdata -> num_row_gpios ; i ++ ) {
293
- err = gpio_request (pdata -> row_gpios [i ], "matrix_kbd_row" );
294
+ err = devm_gpio_request (& pdev -> dev ,
295
+ pdata -> row_gpios [i ], "matrix_kbd_row" );
294
296
if (err ) {
295
297
dev_err (& pdev -> dev ,
296
298
"failed to request GPIO%d for ROW%d\n" ,
297
299
pdata -> row_gpios [i ], i );
298
- goto err_free_rows ;
300
+ return err ;
299
301
}
300
302
301
303
gpio_direction_input (pdata -> row_gpios [i ]);
302
304
}
303
305
304
306
if (pdata -> clustered_irq > 0 ) {
305
- err = request_any_context_irq (pdata -> clustered_irq ,
307
+ err = devm_request_any_context_irq (& pdev -> dev ,
308
+ pdata -> clustered_irq ,
306
309
matrix_keypad_interrupt ,
307
310
pdata -> clustered_irq_flags ,
308
311
"matrix-keypad" , keypad );
309
312
if (err < 0 ) {
310
313
dev_err (& pdev -> dev ,
311
314
"Unable to acquire clustered interrupt\n" );
312
- goto err_free_rows ;
315
+ return err ;
313
316
}
314
317
315
318
keypad -> row_irqs [0 ] = pdata -> clustered_irq ;
@@ -322,10 +325,11 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
322
325
dev_err (& pdev -> dev ,
323
326
"Unable to convert GPIO line %i to irq: %d\n" ,
324
327
pdata -> row_gpios [i ], err );
325
- goto err_free_irqs ;
328
+ return err ;
326
329
}
327
330
328
- err = request_any_context_irq (irq ,
331
+ err = devm_request_any_context_irq (& pdev -> dev ,
332
+ irq ,
329
333
matrix_keypad_interrupt ,
330
334
IRQF_TRIGGER_RISING |
331
335
IRQF_TRIGGER_FALLING ,
@@ -334,7 +338,7 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
334
338
dev_err (& pdev -> dev ,
335
339
"Unable to acquire interrupt for GPIO line %i\n" ,
336
340
pdata -> row_gpios [i ]);
337
- goto err_free_irqs ;
341
+ return err ;
338
342
}
339
343
340
344
keypad -> row_irqs [i ] = irq ;
@@ -345,36 +349,8 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
345
349
346
350
/* initialized as disabled - enabled by input->open */
347
351
disable_row_irqs (keypad );
348
- return 0 ;
349
-
350
- err_free_irqs :
351
- while (-- i >= 0 )
352
- free_irq (keypad -> row_irqs [i ], keypad );
353
- i = pdata -> num_row_gpios ;
354
- err_free_rows :
355
- while (-- i >= 0 )
356
- gpio_free (pdata -> row_gpios [i ]);
357
- i = pdata -> num_col_gpios ;
358
- err_free_cols :
359
- while (-- i >= 0 )
360
- gpio_free (pdata -> col_gpios [i ]);
361
-
362
- return err ;
363
- }
364
-
365
- static void matrix_keypad_free_gpio (struct matrix_keypad * keypad )
366
- {
367
- const struct matrix_keypad_platform_data * pdata = keypad -> pdata ;
368
- int i ;
369
-
370
- for (i = 0 ; i < keypad -> num_row_irqs ; i ++ )
371
- free_irq (keypad -> row_irqs [i ], keypad );
372
-
373
- for (i = 0 ; i < pdata -> num_row_gpios ; i ++ )
374
- gpio_free (pdata -> row_gpios [i ]);
375
352
376
- for (i = 0 ; i < pdata -> num_col_gpios ; i ++ )
377
- gpio_free (pdata -> col_gpios [i ]);
353
+ return 0 ;
378
354
}
379
355
380
356
#ifdef CONFIG_OF
@@ -473,12 +449,13 @@ static int matrix_keypad_probe(struct platform_device *pdev)
473
449
return - EINVAL ;
474
450
}
475
451
476
- keypad = kzalloc (sizeof (struct matrix_keypad ), GFP_KERNEL );
477
- input_dev = input_allocate_device ();
478
- if (!keypad || !input_dev ) {
479
- err = - ENOMEM ;
480
- goto err_free_mem ;
481
- }
452
+ keypad = devm_kzalloc (& pdev -> dev , sizeof (* keypad ), GFP_KERNEL );
453
+ if (!keypad )
454
+ return - ENOMEM ;
455
+
456
+ input_dev = devm_input_allocate_device (& pdev -> dev );
457
+ if (!input_dev )
458
+ return - ENOMEM ;
482
459
483
460
keypad -> input_dev = input_dev ;
484
461
keypad -> pdata = pdata ;
@@ -489,7 +466,6 @@ static int matrix_keypad_probe(struct platform_device *pdev)
489
466
490
467
input_dev -> name = pdev -> name ;
491
468
input_dev -> id .bustype = BUS_HOST ;
492
- input_dev -> dev .parent = & pdev -> dev ;
493
469
input_dev -> open = matrix_keypad_start ;
494
470
input_dev -> close = matrix_keypad_stop ;
495
471
@@ -499,7 +475,7 @@ static int matrix_keypad_probe(struct platform_device *pdev)
499
475
NULL , input_dev );
500
476
if (err ) {
501
477
dev_err (& pdev -> dev , "failed to build keymap\n" );
502
- goto err_free_mem ;
478
+ return - ENOMEM ;
503
479
}
504
480
505
481
if (!pdata -> no_autorepeat )
@@ -509,32 +485,16 @@ static int matrix_keypad_probe(struct platform_device *pdev)
509
485
510
486
err = matrix_keypad_init_gpio (pdev , keypad );
511
487
if (err )
512
- goto err_free_mem ;
488
+ return err ;
513
489
514
490
err = input_register_device (keypad -> input_dev );
515
491
if (err )
516
- goto err_free_gpio ;
492
+ return err ;
517
493
518
494
device_init_wakeup (& pdev -> dev , pdata -> wakeup );
519
495
platform_set_drvdata (pdev , keypad );
520
496
521
497
return 0 ;
522
-
523
- err_free_gpio :
524
- matrix_keypad_free_gpio (keypad );
525
- err_free_mem :
526
- input_free_device (input_dev );
527
- kfree (keypad );
528
- return err ;
529
- }
530
-
531
- static void matrix_keypad_remove (struct platform_device * pdev )
532
- {
533
- struct matrix_keypad * keypad = platform_get_drvdata (pdev );
534
-
535
- matrix_keypad_free_gpio (keypad );
536
- input_unregister_device (keypad -> input_dev );
537
- kfree (keypad );
538
498
}
539
499
540
500
#ifdef CONFIG_OF
@@ -547,7 +507,6 @@ MODULE_DEVICE_TABLE(of, matrix_keypad_dt_match);
547
507
548
508
static struct platform_driver matrix_keypad_driver = {
549
509
.probe = matrix_keypad_probe ,
550
- .remove_new = matrix_keypad_remove ,
551
510
.driver = {
552
511
.name = "matrix-keypad" ,
553
512
.pm = pm_sleep_ptr (& matrix_keypad_pm_ops ),
0 commit comments