diff options
author | David Brownell <dbrownell@users.sourceforge.net> | 2006-12-06 20:14:10 -0500 |
---|---|---|
committer | Russell King <rmk+kernel@arm.linux.org.uk> | 2007-05-05 05:57:01 -0400 |
commit | 58781016c3637caf314ca7f579ce0acd1b0378dc (patch) | |
tree | 93e032cd5a3a75c316658488536eba78401da8de /arch | |
parent | 56a2564185db752d83bbc78be9b1e257bf103444 (diff) |
ARM: OMAP: speed up gpio irq handling
Speedup and shrink GPIO irq handling code, by using a pointer
that's available in the irq_chip structure instead of calling
the get_gpio_bank() function. On OMAP1 this saves 44 words,
most of which were in IRQ critical path methods. Hey, every
few instructions help.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
Signed-off-by: Tony Lindgren <tony@atomide.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/arm/plat-omap/gpio.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/arch/arm/plat-omap/gpio.c b/arch/arm/plat-omap/gpio.c index 1da7a5d1ddd9..14a3f7118c73 100644 --- a/arch/arm/plat-omap/gpio.c +++ b/arch/arm/plat-omap/gpio.c | |||
@@ -584,7 +584,7 @@ static int gpio_irq_type(unsigned irq, unsigned type) | |||
584 | && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) | 584 | && (type & (IRQ_TYPE_LEVEL_LOW|IRQ_TYPE_LEVEL_HIGH))) |
585 | return -EINVAL; | 585 | return -EINVAL; |
586 | 586 | ||
587 | bank = get_gpio_bank(gpio); | 587 | bank = get_irq_chip_data(irq); |
588 | spin_lock(&bank->lock); | 588 | spin_lock(&bank->lock); |
589 | retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type); | 589 | retval = _set_gpio_triggering(bank, get_gpio_index(gpio), type); |
590 | if (retval == 0) { | 590 | if (retval == 0) { |
@@ -823,7 +823,7 @@ static int gpio_wake_enable(unsigned int irq, unsigned int enable) | |||
823 | 823 | ||
824 | if (check_gpio(gpio) < 0) | 824 | if (check_gpio(gpio) < 0) |
825 | return -ENODEV; | 825 | return -ENODEV; |
826 | bank = get_gpio_bank(gpio); | 826 | bank = get_irq_chip_data(irq); |
827 | retval = _set_gpio_wakeup(bank, get_gpio_index(gpio), enable); | 827 | retval = _set_gpio_wakeup(bank, get_gpio_index(gpio), enable); |
828 | 828 | ||
829 | return retval; | 829 | return retval; |
@@ -1038,7 +1038,7 @@ static void gpio_irq_handler(unsigned int irq, struct irq_desc *desc) | |||
1038 | static void gpio_irq_shutdown(unsigned int irq) | 1038 | static void gpio_irq_shutdown(unsigned int irq) |
1039 | { | 1039 | { |
1040 | unsigned int gpio = irq - IH_GPIO_BASE; | 1040 | unsigned int gpio = irq - IH_GPIO_BASE; |
1041 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1041 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1042 | 1042 | ||
1043 | _reset_gpio(bank, gpio); | 1043 | _reset_gpio(bank, gpio); |
1044 | } | 1044 | } |
@@ -1046,7 +1046,7 @@ static void gpio_irq_shutdown(unsigned int irq) | |||
1046 | static void gpio_ack_irq(unsigned int irq) | 1046 | static void gpio_ack_irq(unsigned int irq) |
1047 | { | 1047 | { |
1048 | unsigned int gpio = irq - IH_GPIO_BASE; | 1048 | unsigned int gpio = irq - IH_GPIO_BASE; |
1049 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1049 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1050 | 1050 | ||
1051 | _clear_gpio_irqstatus(bank, gpio); | 1051 | _clear_gpio_irqstatus(bank, gpio); |
1052 | } | 1052 | } |
@@ -1054,7 +1054,7 @@ static void gpio_ack_irq(unsigned int irq) | |||
1054 | static void gpio_mask_irq(unsigned int irq) | 1054 | static void gpio_mask_irq(unsigned int irq) |
1055 | { | 1055 | { |
1056 | unsigned int gpio = irq - IH_GPIO_BASE; | 1056 | unsigned int gpio = irq - IH_GPIO_BASE; |
1057 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1057 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1058 | 1058 | ||
1059 | _set_gpio_irqenable(bank, gpio, 0); | 1059 | _set_gpio_irqenable(bank, gpio, 0); |
1060 | } | 1060 | } |
@@ -1063,7 +1063,7 @@ static void gpio_unmask_irq(unsigned int irq) | |||
1063 | { | 1063 | { |
1064 | unsigned int gpio = irq - IH_GPIO_BASE; | 1064 | unsigned int gpio = irq - IH_GPIO_BASE; |
1065 | unsigned int gpio_idx = get_gpio_index(gpio); | 1065 | unsigned int gpio_idx = get_gpio_index(gpio); |
1066 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1066 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1067 | 1067 | ||
1068 | _set_gpio_irqenable(bank, gpio_idx, 1); | 1068 | _set_gpio_irqenable(bank, gpio_idx, 1); |
1069 | } | 1069 | } |
@@ -1092,7 +1092,7 @@ static void mpuio_ack_irq(unsigned int irq) | |||
1092 | static void mpuio_mask_irq(unsigned int irq) | 1092 | static void mpuio_mask_irq(unsigned int irq) |
1093 | { | 1093 | { |
1094 | unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE); | 1094 | unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE); |
1095 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1095 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1096 | 1096 | ||
1097 | _set_gpio_irqenable(bank, gpio, 0); | 1097 | _set_gpio_irqenable(bank, gpio, 0); |
1098 | } | 1098 | } |
@@ -1100,7 +1100,7 @@ static void mpuio_mask_irq(unsigned int irq) | |||
1100 | static void mpuio_unmask_irq(unsigned int irq) | 1100 | static void mpuio_unmask_irq(unsigned int irq) |
1101 | { | 1101 | { |
1102 | unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE); | 1102 | unsigned int gpio = OMAP_MPUIO(irq - IH_MPUIO_BASE); |
1103 | struct gpio_bank *bank = get_gpio_bank(gpio); | 1103 | struct gpio_bank *bank = get_irq_chip_data(irq); |
1104 | 1104 | ||
1105 | _set_gpio_irqenable(bank, gpio, 1); | 1105 | _set_gpio_irqenable(bank, gpio, 1); |
1106 | } | 1106 | } |
@@ -1275,6 +1275,7 @@ static int __init _omap_gpio_init(void) | |||
1275 | #endif | 1275 | #endif |
1276 | for (j = bank->virtual_irq_start; | 1276 | for (j = bank->virtual_irq_start; |
1277 | j < bank->virtual_irq_start + gpio_count; j++) { | 1277 | j < bank->virtual_irq_start + gpio_count; j++) { |
1278 | set_irq_chip_data(j, bank); | ||
1278 | if (bank_is_mpuio(bank)) | 1279 | if (bank_is_mpuio(bank)) |
1279 | set_irq_chip(j, &mpuio_irq_chip); | 1280 | set_irq_chip(j, &mpuio_irq_chip); |
1280 | else | 1281 | else |