Commit | Line | Data |
---|---|---|
8a898f1c | 1 | /* |
a09e64fb | 2 | * arch/arm/mach-pxa/include/mach/gpio.h |
8a898f1c PZ |
3 | * |
4 | * PXA GPIO wrappers for arch-neutral GPIO calls | |
5 | * | |
6 | * Written by Philipp Zabel <philipp.zabel@gmail.com> | |
7 | * | |
8 | * This program is free software; you can redistribute it and/or modify | |
9 | * it under the terms of the GNU General Public License as published by | |
10 | * the Free Software Foundation; either version 2 of the License, or | |
11 | * (at your option) any later version. | |
12 | * | |
13 | * This program is distributed in the hope that it will be useful, | |
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | |
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
16 | * GNU General Public License for more details. | |
17 | * | |
18 | * You should have received a copy of the GNU General Public License | |
19 | * along with this program; if not, write to the Free Software | |
20 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | |
21 | * | |
22 | */ | |
23 | ||
24 | #ifndef __ASM_ARCH_PXA_GPIO_H | |
25 | #define __ASM_ARCH_PXA_GPIO_H | |
26 | ||
a09e64fb | 27 | #include <mach/pxa-regs.h> |
3deac046 | 28 | #include <asm/irq.h> |
a09e64fb | 29 | #include <mach/hardware.h> |
8a898f1c | 30 | |
1c44f5f1 | 31 | #include <asm-generic/gpio.h> |
8a898f1c | 32 | |
8a898f1c | 33 | |
1c44f5f1 PZ |
34 | /* NOTE: some PXAs have fewer on-chip GPIOs (like PXA255, with 85). |
35 | * Those cases currently cause holes in the GPIO number space. | |
36 | */ | |
37 | #define NR_BUILTIN_GPIO 128 | |
8a898f1c | 38 | |
1c44f5f1 | 39 | static inline int gpio_get_value(unsigned gpio) |
3deac046 | 40 | { |
1c44f5f1 PZ |
41 | if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) |
42 | return GPLR(gpio) & GPIO_bit(gpio); | |
43 | else | |
44 | return __gpio_get_value(gpio); | |
3deac046 PZ |
45 | } |
46 | ||
1c44f5f1 | 47 | static inline void gpio_set_value(unsigned gpio, int value) |
3deac046 | 48 | { |
1c44f5f1 PZ |
49 | if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) { |
50 | if (value) | |
51 | GPSR(gpio) = GPIO_bit(gpio); | |
52 | else | |
53 | GPCR(gpio) = GPIO_bit(gpio); | |
54 | } else { | |
55 | __gpio_set_value(gpio, value); | |
56 | } | |
3deac046 | 57 | } |
8a898f1c | 58 | |
1c44f5f1 | 59 | #define gpio_cansleep __gpio_cansleep |
8a898f1c PZ |
60 | |
61 | #define gpio_to_irq(gpio) IRQ_GPIO(gpio) | |
62 | #define irq_to_gpio(irq) IRQ_TO_GPIO(irq) | |
63 | ||
64 | ||
65 | #endif |