@@ -143,7 +143,6 @@ struct pmic_mpp_state {
143143 struct regmap * map ;
144144 struct pinctrl_dev * ctrl ;
145145 struct gpio_chip chip ;
146- struct irq_chip irq ;
147146};
148147
149148static const struct pinconf_generic_params pmic_mpp_bindings [] = {
@@ -823,6 +822,33 @@ static int pmic_mpp_child_to_parent_hwirq(struct gpio_chip *chip,
823822 return 0 ;
824823}
825824
825+ static void pmic_mpp_irq_mask (struct irq_data * d )
826+ {
827+ struct gpio_chip * gc = irq_data_get_irq_chip_data (d );
828+
829+ irq_chip_mask_parent (d );
830+ gpiochip_disable_irq (gc , irqd_to_hwirq (d ));
831+ }
832+
833+ static void pmic_mpp_irq_unmask (struct irq_data * d )
834+ {
835+ struct gpio_chip * gc = irq_data_get_irq_chip_data (d );
836+
837+ gpiochip_enable_irq (gc , irqd_to_hwirq (d ));
838+ irq_chip_unmask_parent (d );
839+ }
840+
841+ static const struct irq_chip pmic_mpp_irq_chip = {
842+ .name = "spmi-mpp" ,
843+ .irq_ack = irq_chip_ack_parent ,
844+ .irq_mask = pmic_mpp_irq_mask ,
845+ .irq_unmask = pmic_mpp_irq_unmask ,
846+ .irq_set_type = irq_chip_set_type_parent ,
847+ .irq_set_wake = irq_chip_set_wake_parent ,
848+ .flags = IRQCHIP_MASK_ON_SUSPEND | IRQCHIP_IMMUTABLE ,
849+ GPIOCHIP_IRQ_RESOURCE_HELPERS ,
850+ };
851+
826852static int pmic_mpp_probe (struct platform_device * pdev )
827853{
828854 struct irq_domain * parent_domain ;
@@ -915,16 +941,8 @@ static int pmic_mpp_probe(struct platform_device *pdev)
915941 if (!parent_domain )
916942 return - ENXIO ;
917943
918- state -> irq .name = "spmi-mpp" ,
919- state -> irq .irq_ack = irq_chip_ack_parent ,
920- state -> irq .irq_mask = irq_chip_mask_parent ,
921- state -> irq .irq_unmask = irq_chip_unmask_parent ,
922- state -> irq .irq_set_type = irq_chip_set_type_parent ,
923- state -> irq .irq_set_wake = irq_chip_set_wake_parent ,
924- state -> irq .flags = IRQCHIP_MASK_ON_SUSPEND ,
925-
926944 girq = & state -> chip .irq ;
927- girq -> chip = & state -> irq ;
945+ gpio_irq_chip_set_chip ( girq , & pmic_mpp_irq_chip ) ;
928946 girq -> default_type = IRQ_TYPE_NONE ;
929947 girq -> handler = handle_level_irq ;
930948 girq -> fwnode = dev_fwnode (state -> dev );
0 commit comments