@@ -318,6 +318,13 @@ static void grgpio_irq_unmap(struct irq_domain *d, unsigned int irq)
318
318
raw_spin_unlock_irqrestore (& priv -> gc .bgpio_lock , flags );
319
319
}
320
320
321
+ static void grgpio_irq_domain_remove (void * data )
322
+ {
323
+ struct irq_domain * domain = data ;
324
+
325
+ irq_domain_remove (domain );
326
+ }
327
+
321
328
static const struct irq_domain_ops grgpio_irq_domain_ops = {
322
329
.map = grgpio_irq_map ,
323
330
.unmap = grgpio_irq_unmap ,
@@ -394,6 +401,11 @@ static int grgpio_probe(struct platform_device *ofdev)
394
401
return - EINVAL ;
395
402
}
396
403
404
+ err = devm_add_action_or_reset (dev , grgpio_irq_domain_remove ,
405
+ priv -> domain );
406
+ if (err )
407
+ return err ;
408
+
397
409
for (i = 0 ; i < gc -> ngpio ; i ++ ) {
398
410
struct grgpio_lirq * lirq ;
399
411
int ret ;
@@ -416,13 +428,9 @@ static int grgpio_probe(struct platform_device *ofdev)
416
428
}
417
429
}
418
430
419
- platform_set_drvdata (ofdev , priv );
420
-
421
- err = gpiochip_add_data (gc , priv );
431
+ err = devm_gpiochip_add_data (dev , gc , priv );
422
432
if (err ) {
423
433
dev_err (dev , "Could not add gpiochip\n" );
424
- if (priv -> domain )
425
- irq_domain_remove (priv -> domain );
426
434
return err ;
427
435
}
428
436
@@ -432,16 +440,6 @@ static int grgpio_probe(struct platform_device *ofdev)
432
440
return 0 ;
433
441
}
434
442
435
- static void grgpio_remove (struct platform_device * ofdev )
436
- {
437
- struct grgpio_priv * priv = platform_get_drvdata (ofdev );
438
-
439
- gpiochip_remove (& priv -> gc );
440
-
441
- if (priv -> domain )
442
- irq_domain_remove (priv -> domain );
443
- }
444
-
445
443
static const struct of_device_id grgpio_match [] = {
446
444
{.name = "GAISLER_GPIO" },
447
445
{.name = "01_01a" },
@@ -456,7 +454,6 @@ static struct platform_driver grgpio_driver = {
456
454
.of_match_table = grgpio_match ,
457
455
},
458
456
.probe = grgpio_probe ,
459
- .remove = grgpio_remove ,
460
457
};
461
458
module_platform_driver (grgpio_driver );
462
459
0 commit comments