@@ -85,7 +85,6 @@ struct stmfx_pinctrl {
8585 struct pinctrl_dev * pctl_dev ;
8686 struct pinctrl_desc pctl_desc ;
8787 struct gpio_chip gpio_chip ;
88- struct irq_chip irq_chip ;
8988 struct mutex lock ; /* IRQ bus lock */
9089 unsigned long gpio_valid_mask ;
9190 /* Cache of IRQ_GPI_* registers for bus_lock */
@@ -427,6 +426,7 @@ static void stmfx_pinctrl_irq_mask(struct irq_data *data)
427426 u32 mask = get_mask (data -> hwirq );
428427
429428 pctl -> irq_gpi_src [reg ] &= ~mask ;
429+ gpiochip_disable_irq (gpio_chip , irqd_to_hwirq (data ));
430430}
431431
432432static void stmfx_pinctrl_irq_unmask (struct irq_data * data )
@@ -436,6 +436,7 @@ static void stmfx_pinctrl_irq_unmask(struct irq_data *data)
436436 u32 reg = get_reg (data -> hwirq );
437437 u32 mask = get_mask (data -> hwirq );
438438
439+ gpiochip_enable_irq (gpio_chip , irqd_to_hwirq (data ));
439440 pctl -> irq_gpi_src [reg ] |= mask ;
440441}
441442
@@ -592,6 +593,26 @@ static irqreturn_t stmfx_pinctrl_irq_thread_fn(int irq, void *dev_id)
592593 return IRQ_HANDLED ;
593594}
594595
596+ static void stmfx_pinctrl_irq_print_chip (struct irq_data * d , struct seq_file * p )
597+ {
598+ struct gpio_chip * gpio_chip = irq_data_get_irq_chip_data (d );
599+ struct stmfx_pinctrl * pctl = gpiochip_get_data (gpio_chip );
600+
601+ seq_printf (p , dev_name (pctl -> dev ));
602+ }
603+
604+ static const struct irq_chip stmfx_pinctrl_irq_chip = {
605+ .irq_mask = stmfx_pinctrl_irq_mask ,
606+ .irq_unmask = stmfx_pinctrl_irq_unmask ,
607+ .irq_set_type = stmfx_pinctrl_irq_set_type ,
608+ .irq_bus_lock = stmfx_pinctrl_irq_bus_lock ,
609+ .irq_bus_sync_unlock = stmfx_pinctrl_irq_bus_sync_unlock ,
610+ .irq_request_resources = stmfx_gpio_irq_request_resources ,
611+ .irq_release_resources = stmfx_gpio_irq_release_resources ,
612+ .irq_print_chip = stmfx_pinctrl_irq_print_chip ,
613+ .flags = IRQCHIP_IMMUTABLE ,
614+ };
615+
595616static int stmfx_pinctrl_gpio_function_enable (struct stmfx_pinctrl * pctl )
596617{
597618 struct pinctrl_gpio_range * gpio_range ;
@@ -678,17 +699,8 @@ static int stmfx_pinctrl_probe(struct platform_device *pdev)
678699 pctl -> gpio_chip .ngpio = pctl -> pctl_desc .npins ;
679700 pctl -> gpio_chip .can_sleep = true;
680701
681- pctl -> irq_chip .name = dev_name (pctl -> dev );
682- pctl -> irq_chip .irq_mask = stmfx_pinctrl_irq_mask ;
683- pctl -> irq_chip .irq_unmask = stmfx_pinctrl_irq_unmask ;
684- pctl -> irq_chip .irq_set_type = stmfx_pinctrl_irq_set_type ;
685- pctl -> irq_chip .irq_bus_lock = stmfx_pinctrl_irq_bus_lock ;
686- pctl -> irq_chip .irq_bus_sync_unlock = stmfx_pinctrl_irq_bus_sync_unlock ;
687- pctl -> irq_chip .irq_request_resources = stmfx_gpio_irq_request_resources ;
688- pctl -> irq_chip .irq_release_resources = stmfx_gpio_irq_release_resources ;
689-
690702 girq = & pctl -> gpio_chip .irq ;
691- girq -> chip = & pctl -> irq_chip ;
703+ gpio_irq_chip_set_chip ( girq , & stmfx_pinctrl_irq_chip ) ;
692704 /* This will let us handle the parent IRQ in the driver */
693705 girq -> parent_handler = NULL ;
694706 girq -> num_parents = 0 ;
@@ -710,7 +722,7 @@ static int stmfx_pinctrl_probe(struct platform_device *pdev)
710722 ret = devm_request_threaded_irq (pctl -> dev , irq , NULL ,
711723 stmfx_pinctrl_irq_thread_fn ,
712724 IRQF_ONESHOT ,
713- pctl -> irq_chip . name , pctl );
725+ dev_name ( pctl -> dev ) , pctl );
714726 if (ret ) {
715727 dev_err (pctl -> dev , "cannot request irq%d\n" , irq );
716728 return ret ;
0 commit comments