@@ -522,29 +522,6 @@ static int mcp23s08_irq_setup(struct mcp23s08 *mcp)
522
522
return 0 ;
523
523
}
524
524
525
- static int mcp23s08_irqchip_setup (struct mcp23s08 * mcp )
526
- {
527
- struct gpio_chip * chip = & mcp -> chip ;
528
- int err ;
529
-
530
- err = gpiochip_irqchip_add_nested (chip ,
531
- & mcp -> irq_chip ,
532
- 0 ,
533
- handle_simple_irq ,
534
- IRQ_TYPE_NONE );
535
- if (err ) {
536
- dev_err (chip -> parent ,
537
- "could not connect irqchip to gpiochip: %d\n" , err );
538
- return err ;
539
- }
540
-
541
- gpiochip_set_nested_irqchip (chip ,
542
- & mcp -> irq_chip ,
543
- mcp -> irq );
544
-
545
- return 0 ;
546
- }
547
-
548
525
/*----------------------------------------------------------------------*/
549
526
550
527
int mcp23s08_probe_one (struct mcp23s08 * mcp , struct device * dev ,
@@ -589,10 +566,6 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
589
566
if (ret < 0 )
590
567
goto fail ;
591
568
592
- ret = devm_gpiochip_add_data (dev , & mcp -> chip , mcp );
593
- if (ret < 0 )
594
- goto fail ;
595
-
596
569
mcp -> irq_controller =
597
570
device_property_read_bool (dev , "interrupt-controller" );
598
571
if (mcp -> irq && mcp -> irq_controller ) {
@@ -629,11 +602,22 @@ int mcp23s08_probe_one(struct mcp23s08 *mcp, struct device *dev,
629
602
}
630
603
631
604
if (mcp -> irq && mcp -> irq_controller ) {
632
- ret = mcp23s08_irqchip_setup (mcp );
633
- if (ret )
634
- goto fail ;
605
+ struct gpio_irq_chip * girq = & mcp -> chip .irq ;
606
+
607
+ girq -> chip = & mcp -> irq_chip ;
608
+ /* This will let us handle the parent IRQ in the driver */
609
+ girq -> parent_handler = NULL ;
610
+ girq -> num_parents = 0 ;
611
+ girq -> parents = NULL ;
612
+ girq -> default_type = IRQ_TYPE_NONE ;
613
+ girq -> handler = handle_simple_irq ;
614
+ girq -> threaded = true;
635
615
}
636
616
617
+ ret = devm_gpiochip_add_data (dev , & mcp -> chip , mcp );
618
+ if (ret < 0 )
619
+ goto fail ;
620
+
637
621
mcp -> pinctrl_desc .pctlops = & mcp_pinctrl_ops ;
638
622
mcp -> pinctrl_desc .confops = & mcp_pinconf_ops ;
639
623
mcp -> pinctrl_desc .npins = mcp -> chip .ngpio ;
0 commit comments