aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/pinctrl/pinctrl-sirf.c
diff options
context:
space:
mode:
authorArnd Bergmann <arnd@arndb.de>2013-03-19 05:45:37 -0400
committerArnd Bergmann <arnd@arndb.de>2013-03-25 07:25:23 -0400
commitb426476a5c55a3fa2747810f616e395b31ff029e (patch)
treee19383d06cc469fcdb81587cc44535f0f3eb9bc3 /drivers/pinctrl/pinctrl-sirf.c
parentf8016f1eac1ff7162130f253a41099386558ebc1 (diff)
pinctrl: sirf: convert to linear irq domain
The sirf platforms use no hardcoded IRQ numbers, so there is no reason to use the legacy domain, and by converting to the linear domain, we get a more efficient representation of sparse IRQs and remove the dependency on the mach/irqs.h header file. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Cc: Linus Walleij <linus.walleij@linaro.org>
Diffstat (limited to 'drivers/pinctrl/pinctrl-sirf.c')
-rw-r--r--drivers/pinctrl/pinctrl-sirf.c12
1 files changed, 4 insertions, 8 deletions
diff --git a/drivers/pinctrl/pinctrl-sirf.c b/drivers/pinctrl/pinctrl-sirf.c
index d02498b30c6e..eaea149aa9c5 100644
--- a/drivers/pinctrl/pinctrl-sirf.c
+++ b/drivers/pinctrl/pinctrl-sirf.c
@@ -1347,7 +1347,7 @@ static inline int sirfsoc_gpio_to_irq(struct gpio_chip *chip, unsigned offset)
1347 struct sirfsoc_gpio_bank *bank = container_of(to_of_mm_gpio_chip(chip), 1347 struct sirfsoc_gpio_bank *bank = container_of(to_of_mm_gpio_chip(chip),
1348 struct sirfsoc_gpio_bank, chip); 1348 struct sirfsoc_gpio_bank, chip);
1349 1349
1350 return irq_find_mapping(bank->domain, offset); 1350 return irq_create_mapping(bank->domain, offset);
1351} 1351}
1352 1352
1353static inline int sirfsoc_gpio_to_offset(unsigned int gpio) 1353static inline int sirfsoc_gpio_to_offset(unsigned int gpio)
@@ -1485,7 +1485,6 @@ static void sirfsoc_gpio_handle_irq(unsigned int irq, struct irq_desc *desc)
1485 struct sirfsoc_gpio_bank *bank = irq_get_handler_data(irq); 1485 struct sirfsoc_gpio_bank *bank = irq_get_handler_data(irq);
1486 u32 status, ctrl; 1486 u32 status, ctrl;
1487 int idx = 0; 1487 int idx = 0;
1488 unsigned int first_irq;
1489 struct irq_chip *chip = irq_get_chip(irq); 1488 struct irq_chip *chip = irq_get_chip(irq);
1490 1489
1491 chained_irq_enter(chip, desc); 1490 chained_irq_enter(chip, desc);
@@ -1499,8 +1498,6 @@ static void sirfsoc_gpio_handle_irq(unsigned int irq, struct irq_desc *desc)
1499 return; 1498 return;
1500 } 1499 }
1501 1500
1502 first_irq = bank->domain->revmap_data.legacy.first_irq;
1503
1504 while (status) { 1501 while (status) {
1505 ctrl = readl(bank->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, idx)); 1502 ctrl = readl(bank->chip.regs + SIRFSOC_GPIO_CTRL(bank->id, idx));
1506 1503
@@ -1511,7 +1508,7 @@ static void sirfsoc_gpio_handle_irq(unsigned int irq, struct irq_desc *desc)
1511 if ((status & 0x1) && (ctrl & SIRFSOC_GPIO_CTL_INTR_EN_MASK)) { 1508 if ((status & 0x1) && (ctrl & SIRFSOC_GPIO_CTL_INTR_EN_MASK)) {
1512 pr_debug("%s: gpio id %d idx %d happens\n", 1509 pr_debug("%s: gpio id %d idx %d happens\n",
1513 __func__, bank->id, idx); 1510 __func__, bank->id, idx);
1514 generic_handle_irq(first_irq + idx); 1511 generic_handle_irq(irq_find_mapping(bank->domain, idx));
1515 } 1512 }
1516 1513
1517 idx++; 1514 idx++;
@@ -1770,9 +1767,8 @@ static int sirfsoc_gpio_probe(struct device_node *np)
1770 goto out; 1767 goto out;
1771 } 1768 }
1772 1769
1773 bank->domain = irq_domain_add_legacy(np, SIRFSOC_GPIO_BANK_SIZE, 1770 bank->domain = irq_domain_add_linear(np, SIRFSOC_GPIO_BANK_SIZE,
1774 SIRFSOC_GPIO_IRQ_START + i * SIRFSOC_GPIO_BANK_SIZE, 0, 1771 &sirfsoc_gpio_irq_simple_ops, bank);
1775 &sirfsoc_gpio_irq_simple_ops, bank);
1776 1772
1777 if (!bank->domain) { 1773 if (!bank->domain) {
1778 pr_err("%s: Failed to create irqdomain\n", np->full_name); 1774 pr_err("%s: Failed to create irqdomain\n", np->full_name);