@@ -894,6 +894,29 @@ static void rp1_gpio_irq_ack(struct irq_data *data)
894
894
writel (RP1_GPIO_CTRL_IRQRESET , pin -> gpio + RP1_SET_OFFSET + RP1_GPIO_CTRL );
895
895
}
896
896
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
+
897
920
static struct irq_chip rp1_gpio_irq_chip = {
898
921
.name = MODULE_NAME ,
899
922
.irq_enable = rp1_gpio_irq_enable ,
@@ -902,6 +925,7 @@ static struct irq_chip rp1_gpio_irq_chip = {
902
925
.irq_ack = rp1_gpio_irq_ack ,
903
926
.irq_mask = rp1_gpio_irq_disable ,
904
927
.irq_unmask = rp1_gpio_irq_enable ,
928
+ .irq_set_affinity = rp1_gpio_irq_set_affinity ,
905
929
.flags = IRQCHIP_IMMUTABLE ,
906
930
};
907
931
0 commit comments