gpio: msc313: Convert to immutable irq_chip
Convert the driver to immutable irq-chip with a bit of intuition. This conversion follows the pattern of the gpio-ixp4xx hierarchical GPIO interrupt driver. Cc: Marc Zyngier <maz@kernel.org> Acked-by: Marc Zyngier <maz@kernel.org> Signed-off-by: Linus Walleij <linus.walleij@linaro.org> Reviewed-by: Romain Perier <romain.perier@gmail.com> Signed-off-by: Bartosz Golaszewski <bartosz.golaszewski@linaro.org>
This commit is contained in:
parent
9cd9e23ae3
commit
db45f0e105
|
@ -532,17 +532,35 @@ static int msc313_gpio_direction_output(struct gpio_chip *chip, unsigned int off
|
|||
return 0;
|
||||
}
|
||||
|
||||
static void msc313_gpio_irq_mask(struct irq_data *d)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
|
||||
irq_chip_mask_parent(d);
|
||||
gpiochip_disable_irq(gc, d->hwirq);
|
||||
}
|
||||
|
||||
static void msc313_gpio_irq_unmask(struct irq_data *d)
|
||||
{
|
||||
struct gpio_chip *gc = irq_data_get_irq_chip_data(d);
|
||||
|
||||
gpiochip_enable_irq(gc, d->hwirq);
|
||||
irq_chip_unmask_parent(d);
|
||||
}
|
||||
|
||||
/*
|
||||
* The interrupt handling happens in the parent interrupt controller,
|
||||
* we don't do anything here.
|
||||
*/
|
||||
static struct irq_chip msc313_gpio_irqchip = {
|
||||
static const struct irq_chip msc313_gpio_irqchip = {
|
||||
.name = "GPIO",
|
||||
.irq_eoi = irq_chip_eoi_parent,
|
||||
.irq_mask = irq_chip_mask_parent,
|
||||
.irq_unmask = irq_chip_unmask_parent,
|
||||
.irq_mask = msc313_gpio_irq_mask,
|
||||
.irq_unmask = msc313_gpio_irq_unmask,
|
||||
.irq_set_type = irq_chip_set_type_parent,
|
||||
.irq_set_affinity = irq_chip_set_affinity_parent,
|
||||
.flags = IRQCHIP_IMMUTABLE,
|
||||
GPIOCHIP_IRQ_RESOURCE_HELPERS,
|
||||
};
|
||||
|
||||
/*
|
||||
|
@ -644,7 +662,7 @@ static int msc313_gpio_probe(struct platform_device *pdev)
|
|||
gpiochip->names = gpio->gpio_data->names;
|
||||
|
||||
gpioirqchip = &gpiochip->irq;
|
||||
gpioirqchip->chip = &msc313_gpio_irqchip;
|
||||
gpio_irq_chip_set_chip(gpioirqchip, &msc313_gpio_irqchip);
|
||||
gpioirqchip->fwnode = of_node_to_fwnode(dev->of_node);
|
||||
gpioirqchip->parent_domain = parent_domain;
|
||||
gpioirqchip->child_to_parent_hwirq = msc313e_gpio_child_to_parent_hwirq;
|
||||
|
|
Loading…
Reference in New Issue