Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

gpio: rda: Convert to immutable irq_chip

Convert the driver to immutable irq-chip with a bit of
intuition.

Cc: Marc Zyngier <maz@kernel.org>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
Acked-by: Manivannan Sadhasivam <mani@kernel.org>
Reviewed-by: Marc Zyngier <maz@kernel.org>
Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>

authored by

Linus Walleij and committed by
Bartosz Golaszewski
957e64be 9bc167e2

+13 -9
+13 -9
drivers/gpio/gpio-rda.c
··· 38 38 struct gpio_chip chip; 39 39 void __iomem *base; 40 40 spinlock_t lock; 41 - struct irq_chip irq_chip; 42 41 int irq; 43 42 }; 44 43 ··· 73 74 value |= BIT(offset) << RDA_GPIO_IRQ_FALL_SHIFT; 74 75 75 76 writel_relaxed(value, base + RDA_GPIO_INT_CTRL_CLR); 77 + gpiochip_disable_irq(chip, offset); 76 78 } 77 79 78 80 static void rda_gpio_irq_ack(struct irq_data *data) ··· 154 154 u32 offset = irqd_to_hwirq(data); 155 155 u32 trigger = irqd_get_trigger_type(data); 156 156 157 + gpiochip_enable_irq(chip, offset); 157 158 rda_gpio_set_irq(chip, offset, trigger); 158 159 } 159 160 ··· 195 194 196 195 chained_irq_exit(ic, desc); 197 196 } 197 + 198 + static const struct irq_chip rda_gpio_irq_chip = { 199 + .name = "rda-gpio", 200 + .irq_ack = rda_gpio_irq_ack, 201 + .irq_mask = rda_gpio_irq_mask, 202 + .irq_unmask = rda_gpio_irq_unmask, 203 + .irq_set_type = rda_gpio_irq_set_type, 204 + .flags = IRQCHIP_SKIP_SET_WAKE | IRQCHIP_IMMUTABLE, 205 + GPIOCHIP_IRQ_RESOURCE_HELPERS, 206 + }; 198 207 199 208 static int rda_gpio_probe(struct platform_device *pdev) 200 209 { ··· 252 241 rda_gpio->chip.base = -1; 253 242 254 243 if (rda_gpio->irq >= 0) { 255 - rda_gpio->irq_chip.name = "rda-gpio", 256 - rda_gpio->irq_chip.irq_ack = rda_gpio_irq_ack, 257 - rda_gpio->irq_chip.irq_mask = rda_gpio_irq_mask, 258 - rda_gpio->irq_chip.irq_unmask = rda_gpio_irq_unmask, 259 - rda_gpio->irq_chip.irq_set_type = rda_gpio_irq_set_type, 260 - rda_gpio->irq_chip.flags = IRQCHIP_SKIP_SET_WAKE, 261 - 262 244 girq = &rda_gpio->chip.irq; 263 - girq->chip = &rda_gpio->irq_chip; 245 + gpio_irq_chip_set_chip(girq, &rda_gpio_irq_chip); 264 246 girq->handler = handle_bad_irq; 265 247 girq->default_type = IRQ_TYPE_NONE; 266 248 girq->parent_handler = rda_gpio_irq_handler;