@@ -278,38 +278,41 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
278278
279279 /* initialized strobe lines as outputs, activated */
280280 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" );
282283 if (err ) {
283284 dev_err (& pdev -> dev ,
284285 "failed to request GPIO%d for COL%d\n" ,
285286 pdata -> col_gpios [i ], i );
286- goto err_free_cols ;
287+ return err ;
287288 }
288289
289290 gpio_direction_output (pdata -> col_gpios [i ], !pdata -> active_low );
290291 }
291292
292293 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" );
294296 if (err ) {
295297 dev_err (& pdev -> dev ,
296298 "failed to request GPIO%d for ROW%d\n" ,
297299 pdata -> row_gpios [i ], i );
298- goto err_free_rows ;
300+ return err ;
299301 }
300302
301303 gpio_direction_input (pdata -> row_gpios [i ]);
302304 }
303305
304306 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 ,
306309 matrix_keypad_interrupt ,
307310 pdata -> clustered_irq_flags ,
308311 "matrix-keypad" , keypad );
309312 if (err < 0 ) {
310313 dev_err (& pdev -> dev ,
311314 "Unable to acquire clustered interrupt\n" );
312- goto err_free_rows ;
315+ return err ;
313316 }
314317
315318 keypad -> row_irqs [0 ] = pdata -> clustered_irq ;
@@ -322,10 +325,11 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
322325 dev_err (& pdev -> dev ,
323326 "Unable to convert GPIO line %i to irq: %d\n" ,
324327 pdata -> row_gpios [i ], err );
325- goto err_free_irqs ;
328+ return err ;
326329 }
327330
328- err = request_any_context_irq (irq ,
331+ err = devm_request_any_context_irq (& pdev -> dev ,
332+ irq ,
329333 matrix_keypad_interrupt ,
330334 IRQF_TRIGGER_RISING |
331335 IRQF_TRIGGER_FALLING ,
@@ -334,7 +338,7 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
334338 dev_err (& pdev -> dev ,
335339 "Unable to acquire interrupt for GPIO line %i\n" ,
336340 pdata -> row_gpios [i ]);
337- goto err_free_irqs ;
341+ return err ;
338342 }
339343
340344 keypad -> row_irqs [i ] = irq ;
@@ -345,36 +349,8 @@ static int matrix_keypad_init_gpio(struct platform_device *pdev,
345349
346350 /* initialized as disabled - enabled by input->open */
347351 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 ]);
375352
376- for (i = 0 ; i < pdata -> num_col_gpios ; i ++ )
377- gpio_free (pdata -> col_gpios [i ]);
353+ return 0 ;
378354}
379355
380356#ifdef CONFIG_OF
@@ -473,12 +449,13 @@ static int matrix_keypad_probe(struct platform_device *pdev)
473449 return - EINVAL ;
474450 }
475451
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 ;
482459
483460 keypad -> input_dev = input_dev ;
484461 keypad -> pdata = pdata ;
@@ -489,7 +466,6 @@ static int matrix_keypad_probe(struct platform_device *pdev)
489466
490467 input_dev -> name = pdev -> name ;
491468 input_dev -> id .bustype = BUS_HOST ;
492- input_dev -> dev .parent = & pdev -> dev ;
493469 input_dev -> open = matrix_keypad_start ;
494470 input_dev -> close = matrix_keypad_stop ;
495471
@@ -499,7 +475,7 @@ static int matrix_keypad_probe(struct platform_device *pdev)
499475 NULL , input_dev );
500476 if (err ) {
501477 dev_err (& pdev -> dev , "failed to build keymap\n" );
502- goto err_free_mem ;
478+ return - ENOMEM ;
503479 }
504480
505481 if (!pdata -> no_autorepeat )
@@ -509,32 +485,16 @@ static int matrix_keypad_probe(struct platform_device *pdev)
509485
510486 err = matrix_keypad_init_gpio (pdev , keypad );
511487 if (err )
512- goto err_free_mem ;
488+ return err ;
513489
514490 err = input_register_device (keypad -> input_dev );
515491 if (err )
516- goto err_free_gpio ;
492+ return err ;
517493
518494 device_init_wakeup (& pdev -> dev , pdata -> wakeup );
519495 platform_set_drvdata (pdev , keypad );
520496
521497 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 );
538498}
539499
540500#ifdef CONFIG_OF
@@ -547,7 +507,6 @@ MODULE_DEVICE_TABLE(of, matrix_keypad_dt_match);
547507
548508static struct platform_driver matrix_keypad_driver = {
549509 .probe = matrix_keypad_probe ,
550- .remove_new = matrix_keypad_remove ,
551510 .driver = {
552511 .name = "matrix-keypad" ,
553512 .pm = pm_sleep_ptr (& matrix_keypad_pm_ops ),
0 commit comments