diff options
author | Ben Dooks <ben-linux@fluff.org> | 2010-05-19 05:04:08 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2010-05-19 05:04:08 -0400 |
commit | ff1b8ba01dc80da338890a187c112fdd3c0b9202 (patch) | |
tree | 415999aa2c3ac52e48c2b6f690bba393e3d7a00c /arch/arm/plat-samsung/include | |
parent | 5fcdb16bd04fdeb313ee33bb269b04e59a9abf91 (diff) | |
parent | 32b6cb3872883861f3a2669cce880f3a7ef8979a (diff) |
ARM: Merge for-2635/gpio2
Merge branch 'for-2635/gpio2' into for-linus/samsung2
Diffstat (limited to 'arch/arm/plat-samsung/include')
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h | 58 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-cfg.h | 11 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-core.h | 17 |
3 files changed, 86 insertions, 0 deletions
diff --git a/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h b/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h index dda19da037ad..3e21c75feefa 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h | |||
@@ -30,6 +30,12 @@ static inline int s3c_gpio_do_setcfg(struct s3c_gpio_chip *chip, | |||
30 | return (chip->config->set_config)(chip, off, config); | 30 | return (chip->config->set_config)(chip, off, config); |
31 | } | 31 | } |
32 | 32 | ||
33 | static inline unsigned s3c_gpio_do_getcfg(struct s3c_gpio_chip *chip, | ||
34 | unsigned int off) | ||
35 | { | ||
36 | return (chip->config->get_config)(chip, off); | ||
37 | } | ||
38 | |||
33 | static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip, | 39 | static inline int s3c_gpio_do_setpull(struct s3c_gpio_chip *chip, |
34 | unsigned int off, s3c_gpio_pull_t pull) | 40 | unsigned int off, s3c_gpio_pull_t pull) |
35 | { | 41 | { |
@@ -53,6 +59,18 @@ extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip, | |||
53 | unsigned int off, unsigned int cfg); | 59 | unsigned int off, unsigned int cfg); |
54 | 60 | ||
55 | /** | 61 | /** |
62 | * s3c_gpio_getcfg_s3c24xx - S3C24XX style GPIO configuration read. | ||
63 | * @chip: The gpio chip that is being configured. | ||
64 | * @off: The offset for the GPIO being configured. | ||
65 | * | ||
66 | * The reverse of s3c_gpio_setcfg_s3c24xx(). Will return a value whicg | ||
67 | * could be directly passed back to s3c_gpio_setcfg_s3c24xx(), from the | ||
68 | * S3C_GPIO_SPECIAL() macro. | ||
69 | */ | ||
70 | unsigned int s3c_gpio_getcfg_s3c24xx(struct s3c_gpio_chip *chip, | ||
71 | unsigned int off); | ||
72 | |||
73 | /** | ||
56 | * s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A) | 74 | * s3c_gpio_setcfg_s3c24xx_a - S3C24XX style GPIO configuration (Bank A) |
57 | * @chip: The gpio chip that is being configured. | 75 | * @chip: The gpio chip that is being configured. |
58 | * @off: The offset for the GPIO being configured. | 76 | * @off: The offset for the GPIO being configured. |
@@ -65,6 +83,21 @@ extern int s3c_gpio_setcfg_s3c24xx(struct s3c_gpio_chip *chip, | |||
65 | extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip, | 83 | extern int s3c_gpio_setcfg_s3c24xx_a(struct s3c_gpio_chip *chip, |
66 | unsigned int off, unsigned int cfg); | 84 | unsigned int off, unsigned int cfg); |
67 | 85 | ||
86 | |||
87 | /** | ||
88 | * s3c_gpio_getcfg_s3c24xx_a - S3C24XX style GPIO configuration read (Bank A) | ||
89 | * @chip: The gpio chip that is being configured. | ||
90 | * @off: The offset for the GPIO being configured. | ||
91 | * | ||
92 | * The reverse of s3c_gpio_setcfg_s3c24xx_a() turning an GPIO into a usable | ||
93 | * GPIO configuration value. | ||
94 | * | ||
95 | * @sa s3c_gpio_getcfg_s3c24xx | ||
96 | * @sa s3c_gpio_getcfg_s3c64xx_4bit | ||
97 | */ | ||
98 | extern unsigned s3c_gpio_getcfg_s3c24xx_a(struct s3c_gpio_chip *chip, | ||
99 | unsigned int off); | ||
100 | |||
68 | /** | 101 | /** |
69 | * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. | 102 | * s3c_gpio_setcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config. |
70 | * @chip: The gpio chip that is being configured. | 103 | * @chip: The gpio chip that is being configured. |
@@ -85,6 +118,20 @@ extern int s3c_gpio_setcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip, | |||
85 | unsigned int off, unsigned int cfg); | 118 | unsigned int off, unsigned int cfg); |
86 | 119 | ||
87 | 120 | ||
121 | /** | ||
122 | * s3c_gpio_getcfg_s3c64xx_4bit - S3C64XX 4bit single register GPIO config read. | ||
123 | * @chip: The gpio chip that is being configured. | ||
124 | * @off: The offset for the GPIO being configured. | ||
125 | * | ||
126 | * The reverse of s3c_gpio_setcfg_s3c64xx_4bit(), turning a gpio configuration | ||
127 | * register setting into a value the software can use, such as could be passed | ||
128 | * to s3c_gpio_setcfg_s3c64xx_4bit(). | ||
129 | * | ||
130 | * @sa s3c_gpio_getcfg_s3c24xx | ||
131 | */ | ||
132 | extern unsigned s3c_gpio_getcfg_s3c64xx_4bit(struct s3c_gpio_chip *chip, | ||
133 | unsigned int off); | ||
134 | |||
88 | /* Pull-{up,down} resistor controls. | 135 | /* Pull-{up,down} resistor controls. |
89 | * | 136 | * |
90 | * S3C2410,S3C2440,S3C24A0 = Pull-UP, | 137 | * S3C2410,S3C2440,S3C24A0 = Pull-UP, |
@@ -146,6 +193,17 @@ extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, | |||
146 | unsigned int off); | 193 | unsigned int off); |
147 | 194 | ||
148 | /** | 195 | /** |
196 | * s3c_gpio_getpull_1up() - Get configuration for choice of up or none | ||
197 | * @chip: The gpio chip that the GPIO pin belongs to | ||
198 | * @off: The offset to the pin to get the configuration of. | ||
199 | * | ||
200 | * This helper function reads the state of the pull-up resistor for the | ||
201 | * given GPIO in the same case as s3c_gpio_setpull_1up. | ||
202 | */ | ||
203 | extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, | ||
204 | unsigned int off); | ||
205 | |||
206 | /** | ||
149 | * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. | 207 | * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. |
150 | * @chip: The gpio chip that is being configured. | 208 | * @chip: The gpio chip that is being configured. |
151 | * @off: The offset for the GPIO being configured. | 209 | * @off: The offset for the GPIO being configured. |
diff --git a/arch/arm/plat-samsung/include/plat/gpio-cfg.h b/arch/arm/plat-samsung/include/plat/gpio-cfg.h index 29cd6a86cade..8d01e853df39 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg.h | |||
@@ -77,6 +77,17 @@ struct s3c_gpio_cfg { | |||
77 | */ | 77 | */ |
78 | extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to); | 78 | extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to); |
79 | 79 | ||
80 | /** | ||
81 | * s3c_gpio_getcfg - Read the current function for a GPIO pin | ||
82 | * @pin: The pin to read the configuration value for. | ||
83 | * | ||
84 | * Read the configuration state of the given @pin, returning a value that | ||
85 | * could be passed back to s3c_gpio_cfgpin(). | ||
86 | * | ||
87 | * @sa s3c_gpio_cfgpin | ||
88 | */ | ||
89 | extern unsigned s3c_gpio_getcfg(unsigned int pin); | ||
90 | |||
80 | /* Define values for the pull-{up,down} available for each gpio pin. | 91 | /* Define values for the pull-{up,down} available for each gpio pin. |
81 | * | 92 | * |
82 | * These values control the state of the weak pull-{up,down} resistors | 93 | * These values control the state of the weak pull-{up,down} resistors |
diff --git a/arch/arm/plat-samsung/include/plat/gpio-core.h b/arch/arm/plat-samsung/include/plat/gpio-core.h index 49ff406a7066..f3a68d1a07b9 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-core.h +++ b/arch/arm/plat-samsung/include/plat/gpio-core.h | |||
@@ -44,16 +44,26 @@ struct s3c_gpio_cfg; | |||
44 | * @chip: The chip structure to be exported via gpiolib. | 44 | * @chip: The chip structure to be exported via gpiolib. |
45 | * @base: The base pointer to the gpio configuration registers. | 45 | * @base: The base pointer to the gpio configuration registers. |
46 | * @config: special function and pull-resistor control information. | 46 | * @config: special function and pull-resistor control information. |
47 | * @lock: Lock for exclusive access to this gpio bank. | ||
47 | * @pm_save: Save information for suspend/resume support. | 48 | * @pm_save: Save information for suspend/resume support. |
48 | * | 49 | * |
49 | * This wrapper provides the necessary information for the Samsung | 50 | * This wrapper provides the necessary information for the Samsung |
50 | * specific gpios being registered with gpiolib. | 51 | * specific gpios being registered with gpiolib. |
52 | * | ||
53 | * The lock protects each gpio bank from multiple access of the shared | ||
54 | * configuration registers, or from reading of data whilst another thread | ||
55 | * is writing to the register set. | ||
56 | * | ||
57 | * Each chip has its own lock to avoid any contention between different | ||
58 | * CPU cores trying to get one lock for different GPIO banks, where each | ||
59 | * bank of GPIO has its own register space and configuration registers. | ||
51 | */ | 60 | */ |
52 | struct s3c_gpio_chip { | 61 | struct s3c_gpio_chip { |
53 | struct gpio_chip chip; | 62 | struct gpio_chip chip; |
54 | struct s3c_gpio_cfg *config; | 63 | struct s3c_gpio_cfg *config; |
55 | struct s3c_gpio_pm *pm; | 64 | struct s3c_gpio_pm *pm; |
56 | void __iomem *base; | 65 | void __iomem *base; |
66 | spinlock_t lock; | ||
57 | #ifdef CONFIG_PM | 67 | #ifdef CONFIG_PM |
58 | u32 pm_save[4]; | 68 | u32 pm_save[4]; |
59 | #endif | 69 | #endif |
@@ -108,6 +118,9 @@ extern void samsung_gpiolib_add_4bit2_chips(struct s3c_gpio_chip *chip, | |||
108 | extern void samsung_gpiolib_add_4bit(struct s3c_gpio_chip *chip); | 118 | extern void samsung_gpiolib_add_4bit(struct s3c_gpio_chip *chip); |
109 | extern void samsung_gpiolib_add_4bit2(struct s3c_gpio_chip *chip); | 119 | extern void samsung_gpiolib_add_4bit2(struct s3c_gpio_chip *chip); |
110 | 120 | ||
121 | /* exported for core SoC support to change */ | ||
122 | extern struct s3c_gpio_cfg s3c24xx_gpiocfg_default; | ||
123 | |||
111 | #ifdef CONFIG_S3C_GPIO_TRACK | 124 | #ifdef CONFIG_S3C_GPIO_TRACK |
112 | extern struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END]; | 125 | extern struct s3c_gpio_chip *s3c_gpios[S3C_GPIO_END]; |
113 | 126 | ||
@@ -135,3 +148,7 @@ extern struct s3c_gpio_pm s3c_gpio_pm_4bit; | |||
135 | #define __gpio_pm(x) NULL | 148 | #define __gpio_pm(x) NULL |
136 | 149 | ||
137 | #endif /* CONFIG_PM */ | 150 | #endif /* CONFIG_PM */ |
151 | |||
152 | /* locking wrappers to deal with multiple access to the same gpio bank */ | ||
153 | #define s3c_gpio_lock(_oc, _fl) spin_lock_irqsave(&(_oc)->lock, _fl) | ||
154 | #define s3c_gpio_unlock(_oc, _fl) spin_unlock_irqrestore(&(_oc)->lock, _fl) | ||