@@ -32,6 +32,7 @@ static void eqbr_gpio_disable_irq(struct irq_data *d)
3232 raw_spin_lock_irqsave (& gctrl -> lock , flags );
3333 writel (BIT (offset ), gctrl -> membase + GPIO_IRNENCLR );
3434 raw_spin_unlock_irqrestore (& gctrl -> lock , flags );
35+ gpiochip_disable_irq (gc , offset );
3536}
3637
3738static void eqbr_gpio_enable_irq (struct irq_data * d )
@@ -42,6 +43,7 @@ static void eqbr_gpio_enable_irq(struct irq_data *d)
4243 unsigned long flags ;
4344
4445 gc -> direction_input (gc , offset );
46+ gpiochip_enable_irq (gc , offset );
4547 raw_spin_lock_irqsave (& gctrl -> lock , flags );
4648 writel (BIT (offset ), gctrl -> membase + GPIO_IRNRNSET );
4749 raw_spin_unlock_irqrestore (& gctrl -> lock , flags );
@@ -161,6 +163,17 @@ static void eqbr_irq_handler(struct irq_desc *desc)
161163 chained_irq_exit (ic , desc );
162164}
163165
166+ static const struct irq_chip eqbr_irq_chip = {
167+ .name = "gpio_irq" ,
168+ .irq_mask = eqbr_gpio_disable_irq ,
169+ .irq_unmask = eqbr_gpio_enable_irq ,
170+ .irq_ack = eqbr_gpio_ack_irq ,
171+ .irq_mask_ack = eqbr_gpio_mask_ack_irq ,
172+ .irq_set_type = eqbr_gpio_set_irq_type ,
173+ .flags = IRQCHIP_IMMUTABLE ,
174+ GPIOCHIP_IRQ_RESOURCE_HELPERS ,
175+ };
176+
164177static int gpiochip_setup (struct device * dev , struct eqbr_gpio_ctrl * gctrl )
165178{
166179 struct gpio_irq_chip * girq ;
@@ -176,15 +189,8 @@ static int gpiochip_setup(struct device *dev, struct eqbr_gpio_ctrl *gctrl)
176189 return 0 ;
177190 }
178191
179- gctrl -> ic .name = "gpio_irq" ;
180- gctrl -> ic .irq_mask = eqbr_gpio_disable_irq ;
181- gctrl -> ic .irq_unmask = eqbr_gpio_enable_irq ;
182- gctrl -> ic .irq_ack = eqbr_gpio_ack_irq ;
183- gctrl -> ic .irq_mask_ack = eqbr_gpio_mask_ack_irq ;
184- gctrl -> ic .irq_set_type = eqbr_gpio_set_irq_type ;
185-
186192 girq = & gctrl -> chip .irq ;
187- girq -> chip = & gctrl -> ic ;
193+ gpio_irq_chip_set_chip ( girq , & eqbr_irq_chip ) ;
188194 girq -> parent_handler = eqbr_irq_handler ;
189195 girq -> num_parents = 1 ;
190196 girq -> parents = devm_kcalloc (dev , 1 , sizeof (* girq -> parents ), GFP_KERNEL );
0 commit comments