diff options
Diffstat (limited to 'arch/arm/plat-samsung/include/plat/gpio-cfg.h')
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-cfg.h | 78 |
1 files changed, 75 insertions, 3 deletions
diff --git a/arch/arm/plat-samsung/include/plat/gpio-cfg.h b/arch/arm/plat-samsung/include/plat/gpio-cfg.h index 1c6b92947c5d..1762dcb4cb9e 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg.h | |||
@@ -108,11 +108,24 @@ extern int s3c_gpio_cfgpin(unsigned int pin, unsigned int to); | |||
108 | */ | 108 | */ |
109 | extern unsigned s3c_gpio_getcfg(unsigned int pin); | 109 | extern unsigned s3c_gpio_getcfg(unsigned int pin); |
110 | 110 | ||
111 | /** | ||
112 | * s3c_gpio_cfgpin_range() - Change the GPIO function for configuring pin range | ||
113 | * @start: The pin number to start at | ||
114 | * @nr: The number of pins to configure from @start. | ||
115 | * @cfg: The configuration for the pin's function | ||
116 | * | ||
117 | * Call s3c_gpio_cfgpin() for the @nr pins starting at @start. | ||
118 | * | ||
119 | * @sa s3c_gpio_cfgpin. | ||
120 | */ | ||
121 | extern int s3c_gpio_cfgpin_range(unsigned int start, unsigned int nr, | ||
122 | unsigned int cfg); | ||
123 | |||
111 | /* Define values for the pull-{up,down} available for each gpio pin. | 124 | /* Define values for the pull-{up,down} available for each gpio pin. |
112 | * | 125 | * |
113 | * These values control the state of the weak pull-{up,down} resistors | 126 | * These values control the state of the weak pull-{up,down} resistors |
114 | * available on most pins on the S3C series. Not all chips support both | 127 | * available on most pins on the S3C series. Not all chips support both |
115 | * up or down settings, and it may be dependant on the chip that is being | 128 | * up or down settings, and it may be dependent on the chip that is being |
116 | * used to whether the particular mode is available. | 129 | * used to whether the particular mode is available. |
117 | */ | 130 | */ |
118 | #define S3C_GPIO_PULL_NONE ((__force s3c_gpio_pull_t)0x00) | 131 | #define S3C_GPIO_PULL_NONE ((__force s3c_gpio_pull_t)0x00) |
@@ -125,7 +138,7 @@ extern unsigned s3c_gpio_getcfg(unsigned int pin); | |||
125 | * @pull: The configuration for the pull resistor. | 138 | * @pull: The configuration for the pull resistor. |
126 | * | 139 | * |
127 | * This function sets the state of the pull-{up,down} resistor for the | 140 | * This function sets the state of the pull-{up,down} resistor for the |
128 | * specified pin. It will return 0 if successfull, or a negative error | 141 | * specified pin. It will return 0 if successful, or a negative error |
129 | * code if the pin cannot support the requested pull setting. | 142 | * code if the pin cannot support the requested pull setting. |
130 | * | 143 | * |
131 | * @pull is one of S3C_GPIO_PULL_NONE, S3C_GPIO_PULL_DOWN or S3C_GPIO_PULL_UP. | 144 | * @pull is one of S3C_GPIO_PULL_NONE, S3C_GPIO_PULL_DOWN or S3C_GPIO_PULL_UP. |
@@ -140,6 +153,31 @@ extern int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull); | |||
140 | */ | 153 | */ |
141 | extern s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin); | 154 | extern s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin); |
142 | 155 | ||
156 | /* configure `all` aspects of an gpio */ | ||
157 | |||
158 | /** | ||
159 | * s3c_gpio_cfgall_range() - configure range of gpio functtion and pull. | ||
160 | * @start: The gpio number to start at. | ||
161 | * @nr: The number of gpio to configure from @start. | ||
162 | * @cfg: The configuration to use | ||
163 | * @pull: The pull setting to use. | ||
164 | * | ||
165 | * Run s3c_gpio_cfgpin() and s3c_gpio_setpull() over the gpio range starting | ||
166 | * @gpio and running for @size. | ||
167 | * | ||
168 | * @sa s3c_gpio_cfgpin | ||
169 | * @sa s3c_gpio_setpull | ||
170 | * @sa s3c_gpio_cfgpin_range | ||
171 | */ | ||
172 | extern int s3c_gpio_cfgall_range(unsigned int start, unsigned int nr, | ||
173 | unsigned int cfg, s3c_gpio_pull_t pull); | ||
174 | |||
175 | static inline int s3c_gpio_cfgrange_nopull(unsigned int pin, unsigned int size, | ||
176 | unsigned int cfg) | ||
177 | { | ||
178 | return s3c_gpio_cfgall_range(pin, size, cfg, S3C_GPIO_PULL_NONE); | ||
179 | } | ||
180 | |||
143 | /* Define values for the drvstr available for each gpio pin. | 181 | /* Define values for the drvstr available for each gpio pin. |
144 | * | 182 | * |
145 | * These values control the value of the output signal driver strength, | 183 | * These values control the value of the output signal driver strength, |
@@ -164,9 +202,43 @@ extern s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin); | |||
164 | * @drvstr: The new value of the driver strength | 202 | * @drvstr: The new value of the driver strength |
165 | * | 203 | * |
166 | * This function sets the driver strength value for the specified pin. | 204 | * This function sets the driver strength value for the specified pin. |
167 | * It will return 0 if successfull, or a negative error code if the pin | 205 | * It will return 0 if successful, or a negative error code if the pin |
168 | * cannot support the requested setting. | 206 | * cannot support the requested setting. |
169 | */ | 207 | */ |
170 | extern int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr); | 208 | extern int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr); |
171 | 209 | ||
210 | /** | ||
211 | * s5p_register_gpio_interrupt() - register interrupt support for a gpio group | ||
212 | * @pin: The pin number from the group to be registered | ||
213 | * | ||
214 | * This function registers gpio interrupt support for the group that the | ||
215 | * specified pin belongs to. | ||
216 | * | ||
217 | * The total number of gpio pins is quite large ob s5p series. Registering | ||
218 | * irq support for all of them would be a resource waste. Because of that the | ||
219 | * interrupt support for standard gpio pins is registered dynamically. | ||
220 | * | ||
221 | * It will return the irq number of the interrupt that has been registered | ||
222 | * or -ENOMEM if no more gpio interrupts can be registered. It is allowed | ||
223 | * to call this function more than once for the same gpio group (the group | ||
224 | * will be registered only once). | ||
225 | */ | ||
226 | extern int s5p_register_gpio_interrupt(int pin); | ||
227 | |||
228 | /** s5p_register_gpioint_bank() - add gpio bank for further gpio interrupt | ||
229 | * registration (see s5p_register_gpio_interrupt function) | ||
230 | * @chain_irq: chained irq number for the gpio int handler for this bank | ||
231 | * @start: start gpio group number of this bank | ||
232 | * @nr_groups: number of gpio groups handled by this bank | ||
233 | * | ||
234 | * This functions registers initial information about gpio banks that | ||
235 | * can be later used by the s5p_register_gpio_interrupt() function to | ||
236 | * enable support for gpio interrupt for particular gpio group. | ||
237 | */ | ||
238 | #ifdef CONFIG_S5P_GPIO_INT | ||
239 | extern int s5p_register_gpioint_bank(int chain_irq, int start, int nr_groups); | ||
240 | #else | ||
241 | #define s5p_register_gpioint_bank(chain_irq, start, nr_groups) do { } while (0) | ||
242 | #endif | ||
243 | |||
172 | #endif /* __PLAT_GPIO_CFG_H */ | 244 | #endif /* __PLAT_GPIO_CFG_H */ |