@@ -894,6 +894,29 @@ static void rp1_gpio_irq_ack(struct irq_data *data)
894894 writel (RP1_GPIO_CTRL_IRQRESET , pin -> gpio + RP1_SET_OFFSET + RP1_GPIO_CTRL );
895895}
896896
897+ static int rp1_gpio_irq_set_affinity (struct irq_data * data , const struct cpumask * dest , bool force )
898+ {
899+ struct gpio_chip * chip = irq_data_get_irq_chip_data (data );
900+ struct rp1_pinctrl * pc = gpiochip_get_data (chip );
901+ const struct rp1_iobank_desc * bank ;
902+ struct irq_data * parent_data = NULL ;
903+ int i ;
904+
905+ for (i = 0 ; i < 3 ; i ++ ) {
906+ bank = & rp1_iobanks [i ];
907+ if (data -> hwirq >= bank -> min_gpio &&
908+ data -> hwirq < bank -> min_gpio + bank -> num_gpios ) {
909+ parent_data = irq_get_irq_data (pc -> irq [i ]);
910+ break ;
911+ }
912+ }
913+
914+ if (parent_data && parent_data -> chip -> irq_set_affinity )
915+ return parent_data -> chip -> irq_set_affinity (parent_data , dest , force );
916+
917+ return - EINVAL ;
918+ }
919+
897920static struct irq_chip rp1_gpio_irq_chip = {
898921 .name = MODULE_NAME ,
899922 .irq_enable = rp1_gpio_irq_enable ,
@@ -902,6 +925,7 @@ static struct irq_chip rp1_gpio_irq_chip = {
902925 .irq_ack = rp1_gpio_irq_ack ,
903926 .irq_mask = rp1_gpio_irq_disable ,
904927 .irq_unmask = rp1_gpio_irq_enable ,
928+ .irq_set_affinity = rp1_gpio_irq_set_affinity ,
905929 .flags = IRQCHIP_IMMUTABLE ,
906930};
907931
0 commit comments