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

gpio: ftgpio: Register per-instance irqchip

This augments the FTGPIO010 to register one irqchip
per instance instead of using a static definition.

Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

+10 -10
+10 -10
drivers/gpio/gpio-ftgpio010.c
··· 41 41 * struct ftgpio_gpio - Gemini GPIO state container 42 42 * @dev: containing device for this instance 43 43 * @gc: gpiochip for this instance 44 + * @irq: irqchip for this instance 44 45 * @base: remapped I/O-memory base 45 46 * @clk: silicon clock 46 47 */ 47 48 struct ftgpio_gpio { 48 49 struct device *dev; 49 50 struct gpio_chip gc; 51 + struct irq_chip irq; 50 52 void __iomem *base; 51 53 struct clk *clk; 52 54 }; ··· 135 133 136 134 return 0; 137 135 } 138 - 139 - static struct irq_chip ftgpio_gpio_irqchip = { 140 - .name = "FTGPIO010", 141 - .irq_ack = ftgpio_gpio_ack_irq, 142 - .irq_mask = ftgpio_gpio_mask_irq, 143 - .irq_unmask = ftgpio_gpio_unmask_irq, 144 - .irq_set_type = ftgpio_gpio_set_irq_type, 145 - }; 146 136 147 137 static void ftgpio_gpio_irq_handler(struct irq_desc *desc) 148 138 { ··· 291 297 /* Clear any use of debounce */ 292 298 writel(0x0, g->base + GPIO_DEBOUNCE_EN); 293 299 294 - ret = gpiochip_irqchip_add(&g->gc, &ftgpio_gpio_irqchip, 300 + g->irq.name = "FTGPIO010"; 301 + g->irq.irq_ack = ftgpio_gpio_ack_irq; 302 + g->irq.irq_mask = ftgpio_gpio_mask_irq; 303 + g->irq.irq_unmask = ftgpio_gpio_unmask_irq; 304 + g->irq.irq_set_type = ftgpio_gpio_set_irq_type; 305 + 306 + ret = gpiochip_irqchip_add(&g->gc, &g->irq, 295 307 0, handle_bad_irq, 296 308 IRQ_TYPE_NONE); 297 309 if (ret) { 298 310 dev_info(dev, "could not add irqchip\n"); 299 311 goto dis_clk; 300 312 } 301 - gpiochip_set_chained_irqchip(&g->gc, &ftgpio_gpio_irqchip, 313 + gpiochip_set_chained_irqchip(&g->gc, &g->irq, 302 314 irq, ftgpio_gpio_irq_handler); 303 315 304 316 platform_set_drvdata(pdev, g);