pinctrl: sunxi: create irq/pin mapping during init
The irq/pin mapping is used to lookup the pin to mux to the irq function when the irq is enabled. It is created when gpio_to_irq is called. Creating the mapping during init allows us to map the interrupts directly from the device tree. Originally the IRQ to pin mapping was created when gpio_to_irq was called with a GPIO handle. The mapping in turn is used to mux the pin into EINT mode. If the mapping is created during gpio_to_irq, we can't use the interrupts directly, i.e. through the DT with "interrupts = <&pio A 4>". Instead we'd have to use "gpios = <&pio A B>", then pass the gpio through to gpio_to_irq. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Signed-off-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
db388dfb90
commit
d54e9a28ca
|
@ -525,8 +525,6 @@ static int sunxi_pinctrl_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
|||
if (!desc)
|
||||
return -EINVAL;
|
||||
|
||||
pctl->irq_array[desc->irqnum] = offset;
|
||||
|
||||
dev_dbg(chip->dev, "%s: request IRQ for GPIO %d, return %d\n",
|
||||
chip->label, offset + chip->base, desc->irqnum);
|
||||
|
||||
|
@ -727,6 +725,9 @@ static int sunxi_pinctrl_build_state(struct platform_device *pdev)
|
|||
struct sunxi_desc_function *func = pin->functions;
|
||||
|
||||
while (func->name) {
|
||||
/* Create interrupt mapping while we're at it */
|
||||
if (!strcmp(func->name, "irq"))
|
||||
pctl->irq_array[func->irqnum] = pin->pin.number;
|
||||
sunxi_pinctrl_add_function(pctl, func->name);
|
||||
func++;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue