-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[ARM] pxa: move common GPIO handling code into plat-pxa
1. add common GPIO handling code into [arch/arm/plat-pxa] 2. common code in <mach/gpio.h> moved into <plat/gpio.h>, new processors should implement its own <mach/gpio.h>, provide the following required definitions and '#include <plat/gpio.h>' in the end: - GPIO_REGS_VIRT for mapped virtual address of the GPIO registers' physical I/O memory - macros of GPLR(), GPSR(), GPDR() for constant optimization for functions gpio_{set,get}_value() (so that bit-bang code can still have tolerable performance) - NR_BUILTIN_GPIO for the number of onchip GPIO - definitions of __gpio_is_inverted() and __gpio_is_occupied(), they can be either macros or inlined functions Signed-off-by: Eric Miao <eric.miao@marvell.com>
- Loading branch information
Eric Miao
committed
Mar 23, 2009
1 parent
bd5ce43
commit 38f539a
Showing
5 changed files
with
66 additions
and
61 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -4,3 +4,4 @@ | |
|
||
obj-y := dma.o | ||
|
||
obj-$(CONFIG_GENERIC_GPIO) += gpio.o |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,62 @@ | ||
#ifndef __PLAT_GPIO_H | ||
#define __PLAT_GPIO_H | ||
|
||
/* | ||
* We handle the GPIOs by banks, each bank covers up to 32 GPIOs with | ||
* one set of registers. The register offsets are organized below: | ||
* | ||
* GPLR GPDR GPSR GPCR GRER GFER GEDR | ||
* BANK 0 - 0x0000 0x000C 0x0018 0x0024 0x0030 0x003C 0x0048 | ||
* BANK 1 - 0x0004 0x0010 0x001C 0x0028 0x0034 0x0040 0x004C | ||
* BANK 2 - 0x0008 0x0014 0x0020 0x002C 0x0038 0x0044 0x0050 | ||
* | ||
* BANK 3 - 0x0100 0x010C 0x0118 0x0124 0x0130 0x013C 0x0148 | ||
* BANK 4 - 0x0104 0x0110 0x011C 0x0128 0x0134 0x0140 0x014C | ||
* BANK 5 - 0x0108 0x0114 0x0120 0x012C 0x0138 0x0144 0x0150 | ||
* | ||
* NOTE: | ||
* BANK 3 is only available on PXA27x and later processors. | ||
* BANK 4 and 5 are only available on PXA935 | ||
*/ | ||
|
||
#define GPIO_BANK(n) (GPIO_REGS_VIRT + BANK_OFF(n)) | ||
|
||
#define GPLR_OFFSET 0x00 | ||
#define GPDR_OFFSET 0x0C | ||
#define GPSR_OFFSET 0x18 | ||
#define GPCR_OFFSET 0x24 | ||
#define GRER_OFFSET 0x30 | ||
#define GFER_OFFSET 0x3C | ||
#define GEDR_OFFSET 0x48 | ||
|
||
static inline int gpio_get_value(unsigned gpio) | ||
{ | ||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) | ||
return GPLR(gpio) & GPIO_bit(gpio); | ||
else | ||
return __gpio_get_value(gpio); | ||
} | ||
|
||
static inline void gpio_set_value(unsigned gpio, int value) | ||
{ | ||
if (__builtin_constant_p(gpio) && (gpio < NR_BUILTIN_GPIO)) { | ||
if (value) | ||
GPSR(gpio) = GPIO_bit(gpio); | ||
else | ||
GPCR(gpio) = GPIO_bit(gpio); | ||
} else | ||
__gpio_set_value(gpio, value); | ||
} | ||
|
||
#define gpio_cansleep __gpio_cansleep | ||
|
||
/* NOTE: some PXAs have fewer on-chip GPIOs (like PXA255, with 85). | ||
* Those cases currently cause holes in the GPIO number space, the | ||
* actual number of the last GPIO is recorded by 'pxa_last_gpio'. | ||
*/ | ||
extern int pxa_last_gpio; | ||
|
||
typedef int (*set_wake_t)(unsigned int irq, unsigned int on); | ||
|
||
extern void pxa_init_gpio(int mux_irq, int start, int end, set_wake_t fn); | ||
#endif /* __PLAT_GPIO_H */ |