mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-11-25 00:30:52 +07:00
pinctrl: sunxi: Fix multi bank interrupt support in gpio_to_irq
When mapping the interrupts, the gpio_to_irq function did not consider the bank number of the gpio pin in question, only the offset or the interrupt number in the bank. As a result, requests for interrupts in the later banks get mapped to the first bank. This issue was discovered while enabling mmc on the new sun8i platform. The tablet I have uses a pin/interrupt from the second bank to do mmc card detection. Tested on this very device with register inspection and actual mmc card insertion/removal. Signed-off-by: Chen-Yu Tsai <wens@csie.org> Acked-by: Maxime Ripard <maxime.ripard@free-electrons.com> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
This commit is contained in:
parent
d61e23e525
commit
0d3bafac65
@ -520,6 +520,7 @@ static int sunxi_pinctrl_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
{
|
||||
struct sunxi_pinctrl *pctl = dev_get_drvdata(chip->dev);
|
||||
struct sunxi_desc_function *desc;
|
||||
unsigned irqnum;
|
||||
|
||||
if (offset >= chip->ngpio)
|
||||
return -ENXIO;
|
||||
@ -528,10 +529,12 @@ static int sunxi_pinctrl_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
|
||||
if (!desc)
|
||||
return -EINVAL;
|
||||
|
||||
dev_dbg(chip->dev, "%s: request IRQ for GPIO %d, return %d\n",
|
||||
chip->label, offset + chip->base, desc->irqnum);
|
||||
irqnum = desc->irqbank * IRQ_PER_BANK + desc->irqnum;
|
||||
|
||||
return irq_find_mapping(pctl->domain, desc->irqnum);
|
||||
dev_dbg(chip->dev, "%s: request IRQ for GPIO %d, return %d\n",
|
||||
chip->label, offset + chip->base, irqnum);
|
||||
|
||||
return irq_find_mapping(pctl->domain, irqnum);
|
||||
}
|
||||
|
||||
static int sunxi_pinctrl_irq_request_resources(struct irq_data *d)
|
||||
|
Loading…
Reference in New Issue
Block a user