diff options
-rw-r--r-- | arch/arm/plat-s5p/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/plat-s5pc1xx/Kconfig | 2 | ||||
-rw-r--r-- | arch/arm/plat-s5pc1xx/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/plat-s5pc1xx/gpio-config.c | 62 | ||||
-rw-r--r-- | arch/arm/plat-s5pc1xx/include/plat/gpio-cfg-s5pc1xx.h | 32 | ||||
-rw-r--r-- | arch/arm/plat-s5pc1xx/setup-fb-24bpp.c | 1 | ||||
-rw-r--r-- | arch/arm/plat-samsung/Kconfig | 12 | ||||
-rw-r--r-- | arch/arm/plat-samsung/gpio-config.c | 48 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-cfg.h | 30 |
9 files changed, 86 insertions, 103 deletions
diff --git a/arch/arm/plat-s5p/Kconfig b/arch/arm/plat-s5p/Kconfig index d400a6a20fe4..92bd75607b43 100644 --- a/arch/arm/plat-s5p/Kconfig +++ b/arch/arm/plat-s5p/Kconfig | |||
@@ -13,6 +13,7 @@ config PLAT_S5P | |||
13 | select NO_IOPORT | 13 | select NO_IOPORT |
14 | select ARCH_REQUIRE_GPIOLIB | 14 | select ARCH_REQUIRE_GPIOLIB |
15 | select S3C_GPIO_TRACK | 15 | select S3C_GPIO_TRACK |
16 | select S5P_GPIO_DRVSTR | ||
16 | select SAMSUNG_GPIOLIB_4BIT | 17 | select SAMSUNG_GPIOLIB_4BIT |
17 | select S3C_GPIO_CFG_S3C64XX | 18 | select S3C_GPIO_CFG_S3C64XX |
18 | select S3C_GPIO_PULL_UPDOWN | 19 | select S3C_GPIO_PULL_UPDOWN |
diff --git a/arch/arm/plat-s5pc1xx/Kconfig b/arch/arm/plat-s5pc1xx/Kconfig index c7ccdf22eefa..79d3be721dde 100644 --- a/arch/arm/plat-s5pc1xx/Kconfig +++ b/arch/arm/plat-s5pc1xx/Kconfig | |||
@@ -16,9 +16,9 @@ config PLAT_S5PC1XX | |||
16 | select SAMSUNG_IRQ_VIC_TIMER | 16 | select SAMSUNG_IRQ_VIC_TIMER |
17 | select S3C_GPIO_TRACK | 17 | select S3C_GPIO_TRACK |
18 | select S3C_GPIO_PULL_UPDOWN | 18 | select S3C_GPIO_PULL_UPDOWN |
19 | select S5P_GPIO_DRVSTR | ||
19 | select S3C_GPIO_CFG_S3C24XX | 20 | select S3C_GPIO_CFG_S3C24XX |
20 | select S3C_GPIO_CFG_S3C64XX | 21 | select S3C_GPIO_CFG_S3C64XX |
21 | select S5P_GPIO_CFG_S5PC1XX | ||
22 | help | 22 | help |
23 | Base platform code for any Samsung S5PC1XX device | 23 | Base platform code for any Samsung S5PC1XX device |
24 | 24 | ||
diff --git a/arch/arm/plat-s5pc1xx/Makefile b/arch/arm/plat-s5pc1xx/Makefile index 278f26806089..66a8f3eb7071 100644 --- a/arch/arm/plat-s5pc1xx/Makefile +++ b/arch/arm/plat-s5pc1xx/Makefile | |||
@@ -24,7 +24,6 @@ obj-$(CONFIG_CPU_S5PC100_CLOCK) += s5pc100-clock.o | |||
24 | 24 | ||
25 | # Device setup | 25 | # Device setup |
26 | 26 | ||
27 | obj-$(CONFIG_S5P_GPIO_CFG_S5PC1XX) += gpio-config.o | ||
28 | obj-$(CONFIG_S5PC1XX_SETUP_FB_24BPP) += setup-fb-24bpp.o | 27 | obj-$(CONFIG_S5PC1XX_SETUP_FB_24BPP) += setup-fb-24bpp.o |
29 | obj-$(CONFIG_S5PC1XX_SETUP_I2C0) += setup-i2c0.o | 28 | obj-$(CONFIG_S5PC1XX_SETUP_I2C0) += setup-i2c0.o |
30 | obj-$(CONFIG_S5PC1XX_SETUP_I2C1) += setup-i2c1.o | 29 | obj-$(CONFIG_S5PC1XX_SETUP_I2C1) += setup-i2c1.o |
diff --git a/arch/arm/plat-s5pc1xx/gpio-config.c b/arch/arm/plat-s5pc1xx/gpio-config.c deleted file mode 100644 index a4f67e80a150..000000000000 --- a/arch/arm/plat-s5pc1xx/gpio-config.c +++ /dev/null | |||
@@ -1,62 +0,0 @@ | |||
1 | /* linux/arch/arm/plat-s5pc1xx/gpio-config.c | ||
2 | * | ||
3 | * Copyright 2009 Samsung Electronics | ||
4 | * | ||
5 | * S5PC1XX GPIO Configuration. | ||
6 | * | ||
7 | * Based on plat-s3c64xx/gpio-config.c | ||
8 | * | ||
9 | * This program is free software; you can redistribute it and/or modify | ||
10 | * it under the terms of the GNU General Public License version 2 as | ||
11 | * published by the Free Software Foundation. | ||
12 | */ | ||
13 | |||
14 | #include <linux/kernel.h> | ||
15 | #include <linux/module.h> | ||
16 | #include <linux/gpio.h> | ||
17 | #include <linux/io.h> | ||
18 | |||
19 | #include <plat/gpio-core.h> | ||
20 | #include <plat/gpio-cfg-s5pc1xx.h> | ||
21 | |||
22 | s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin, unsigned int off) | ||
23 | { | ||
24 | struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); | ||
25 | void __iomem *reg; | ||
26 | int shift = off * 2; | ||
27 | u32 drvstr; | ||
28 | |||
29 | if (!chip) | ||
30 | return -EINVAL; | ||
31 | |||
32 | reg = chip->base + 0x0C; | ||
33 | |||
34 | drvstr = __raw_readl(reg); | ||
35 | drvstr = 0xffff & (0x3 << shift); | ||
36 | drvstr = drvstr >> shift; | ||
37 | |||
38 | return (__force s5p_gpio_drvstr_t)drvstr; | ||
39 | } | ||
40 | EXPORT_SYMBOL(s5p_gpio_get_drvstr); | ||
41 | |||
42 | int s5p_gpio_set_drvstr(unsigned int pin, unsigned int off, | ||
43 | s5p_gpio_drvstr_t drvstr) | ||
44 | { | ||
45 | struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); | ||
46 | void __iomem *reg; | ||
47 | int shift = off * 2; | ||
48 | u32 tmp; | ||
49 | |||
50 | if (!chip) | ||
51 | return -EINVAL; | ||
52 | |||
53 | reg = chip->base + 0x0C; | ||
54 | |||
55 | tmp = __raw_readl(reg); | ||
56 | tmp |= drvstr << shift; | ||
57 | |||
58 | __raw_writel(tmp, reg); | ||
59 | |||
60 | return 0; | ||
61 | } | ||
62 | EXPORT_SYMBOL(s5p_gpio_set_drvstr); | ||
diff --git a/arch/arm/plat-s5pc1xx/include/plat/gpio-cfg-s5pc1xx.h b/arch/arm/plat-s5pc1xx/include/plat/gpio-cfg-s5pc1xx.h deleted file mode 100644 index 72ad59f61efc..000000000000 --- a/arch/arm/plat-s5pc1xx/include/plat/gpio-cfg-s5pc1xx.h +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | /* linux/arch/arm/plat-s5pc1xx/include/plat/gpio-cfg.h | ||
2 | * | ||
3 | * Copyright 2009 Samsung Electronic | ||
4 | * | ||
5 | * S5PC1XX Platform - GPIO pin configuration | ||
6 | * | ||
7 | * This program is free software; you can redistribute it and/or modify | ||
8 | * it under the terms of the GNU General Public License version 2 as | ||
9 | * published by the Free Software Foundation. | ||
10 | */ | ||
11 | |||
12 | /* This file contains the necessary definitions to get the basic gpio | ||
13 | * pin configuration done such as setting a pin to input or output or | ||
14 | * changing the pull-{up,down} configurations. | ||
15 | */ | ||
16 | |||
17 | #ifndef __GPIO_CFG_S5PC1XX_H | ||
18 | #define __GPIO_CFG_S5PC1XX_H __FILE__ | ||
19 | |||
20 | typedef unsigned int __bitwise__ s5p_gpio_drvstr_t; | ||
21 | |||
22 | #define S5P_GPIO_DRVSTR_LV1 0x00 | ||
23 | #define S5P_GPIO_DRVSTR_LV2 0x01 | ||
24 | #define S5P_GPIO_DRVSTR_LV3 0x10 | ||
25 | #define S5P_GPIO_DRVSTR_LV4 0x11 | ||
26 | |||
27 | extern s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin, unsigned int off); | ||
28 | |||
29 | extern int s5p_gpio_set_drvstr(unsigned int pin, unsigned int off, | ||
30 | s5p_gpio_drvstr_t drvstr); | ||
31 | |||
32 | #endif /* __GPIO_CFG_S5PC1XX_H */ | ||
diff --git a/arch/arm/plat-s5pc1xx/setup-fb-24bpp.c b/arch/arm/plat-s5pc1xx/setup-fb-24bpp.c index 1a63768a9a2e..b02c36fb10d1 100644 --- a/arch/arm/plat-s5pc1xx/setup-fb-24bpp.c +++ b/arch/arm/plat-s5pc1xx/setup-fb-24bpp.c | |||
@@ -19,7 +19,6 @@ | |||
19 | #include <mach/map.h> | 19 | #include <mach/map.h> |
20 | #include <plat/fb.h> | 20 | #include <plat/fb.h> |
21 | #include <plat/gpio-cfg.h> | 21 | #include <plat/gpio-cfg.h> |
22 | #include <plat/gpio-cfg-s5pc1xx.h> | ||
23 | 22 | ||
24 | #define DISR_OFFSET 0x7008 | 23 | #define DISR_OFFSET 0x7008 |
25 | 24 | ||
diff --git a/arch/arm/plat-samsung/Kconfig b/arch/arm/plat-samsung/Kconfig index c91c21ac5fcb..711d5a4cce58 100644 --- a/arch/arm/plat-samsung/Kconfig +++ b/arch/arm/plat-samsung/Kconfig | |||
@@ -90,12 +90,6 @@ config S3C_GPIO_CFG_S3C64XX | |||
90 | Internal configuration to enable S3C64XX style GPIO configuration | 90 | Internal configuration to enable S3C64XX style GPIO configuration |
91 | functions. | 91 | functions. |
92 | 92 | ||
93 | config S5P_GPIO_CFG_S5PC1XX | ||
94 | bool | ||
95 | help | ||
96 | Internal configuration to enable S5PC1XX style GPIO configuration | ||
97 | functions. | ||
98 | |||
99 | config S3C_GPIO_PULL_UPDOWN | 93 | config S3C_GPIO_PULL_UPDOWN |
100 | bool | 94 | bool |
101 | help | 95 | help |
@@ -111,6 +105,12 @@ config S3C_GPIO_PULL_UP | |||
111 | help | 105 | help |
112 | Internal configuration to enable the correct GPIO pull helper | 106 | Internal configuration to enable the correct GPIO pull helper |
113 | 107 | ||
108 | config S5P_GPIO_DRVSTR | ||
109 | bool | ||
110 | help | ||
111 | Internal configuration to get and set correct GPIO driver strength | ||
112 | helper | ||
113 | |||
114 | config SAMSUNG_GPIO_EXTRA | 114 | config SAMSUNG_GPIO_EXTRA |
115 | int "Number of additional GPIO pins" | 115 | int "Number of additional GPIO pins" |
116 | default 0 | 116 | default 0 |
diff --git a/arch/arm/plat-samsung/gpio-config.c b/arch/arm/plat-samsung/gpio-config.c index a76eef533392..57b68a50f45e 100644 --- a/arch/arm/plat-samsung/gpio-config.c +++ b/arch/arm/plat-samsung/gpio-config.c | |||
@@ -261,3 +261,51 @@ s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, | |||
261 | } | 261 | } |
262 | #endif /* CONFIG_S3C_GPIO_PULL_UP */ | 262 | #endif /* CONFIG_S3C_GPIO_PULL_UP */ |
263 | 263 | ||
264 | #ifdef CONFIG_S5P_GPIO_DRVSTR | ||
265 | s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin) | ||
266 | { | ||
267 | struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); | ||
268 | unsigned int off; | ||
269 | void __iomem *reg; | ||
270 | int shift; | ||
271 | u32 drvstr; | ||
272 | |||
273 | if (!chip) | ||
274 | return -EINVAL; | ||
275 | |||
276 | off = chip->chip.base - pin; | ||
277 | shift = off * 2; | ||
278 | reg = chip->base + 0x0C; | ||
279 | |||
280 | drvstr = __raw_readl(reg); | ||
281 | drvstr = 0xffff & (0x3 << shift); | ||
282 | drvstr = drvstr >> shift; | ||
283 | |||
284 | return (__force s5p_gpio_drvstr_t)drvstr; | ||
285 | } | ||
286 | EXPORT_SYMBOL(s5p_gpio_get_drvstr); | ||
287 | |||
288 | int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr) | ||
289 | { | ||
290 | struct s3c_gpio_chip *chip = s3c_gpiolib_getchip(pin); | ||
291 | unsigned int off; | ||
292 | void __iomem *reg; | ||
293 | int shift; | ||
294 | u32 tmp; | ||
295 | |||
296 | if (!chip) | ||
297 | return -EINVAL; | ||
298 | |||
299 | off = chip->chip.base - pin; | ||
300 | shift = off * 2; | ||
301 | reg = chip->base + 0x0C; | ||
302 | |||
303 | tmp = __raw_readl(reg); | ||
304 | tmp |= drvstr << shift; | ||
305 | |||
306 | __raw_writel(tmp, reg); | ||
307 | |||
308 | return 0; | ||
309 | } | ||
310 | EXPORT_SYMBOL(s5p_gpio_set_drvstr); | ||
311 | #endif /* CONFIG_S5P_GPIO_DRVSTR */ | ||
diff --git a/arch/arm/plat-samsung/include/plat/gpio-cfg.h b/arch/arm/plat-samsung/include/plat/gpio-cfg.h index 8d01e853df39..34efdd2b032c 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg.h | |||
@@ -25,6 +25,7 @@ | |||
25 | #define __PLAT_GPIO_CFG_H __FILE__ | 25 | #define __PLAT_GPIO_CFG_H __FILE__ |
26 | 26 | ||
27 | typedef unsigned int __bitwise__ s3c_gpio_pull_t; | 27 | typedef unsigned int __bitwise__ s3c_gpio_pull_t; |
28 | typedef unsigned int __bitwise__ s5p_gpio_drvstr_t; | ||
28 | 29 | ||
29 | /* forward declaration if gpio-core.h hasn't been included */ | 30 | /* forward declaration if gpio-core.h hasn't been included */ |
30 | struct s3c_gpio_chip; | 31 | struct s3c_gpio_chip; |
@@ -118,4 +119,33 @@ extern int s3c_gpio_setpull(unsigned int pin, s3c_gpio_pull_t pull); | |||
118 | */ | 119 | */ |
119 | extern s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin); | 120 | extern s3c_gpio_pull_t s3c_gpio_getpull(unsigned int pin); |
120 | 121 | ||
122 | /* Define values for the drvstr available for each gpio pin. | ||
123 | * | ||
124 | * These values control the value of the output signal driver strength, | ||
125 | * configurable on most pins on the S5C series. | ||
126 | */ | ||
127 | #define S5P_GPIO_DRVSTR_LV1 ((__force s5p_gpio_drvstr_t)0x00) | ||
128 | #define S5P_GPIO_DRVSTR_LV2 ((__force s5p_gpio_drvstr_t)0x01) | ||
129 | #define S5P_GPIO_DRVSTR_LV3 ((__force s5p_gpio_drvstr_t)0x10) | ||
130 | #define S5P_GPIO_DRVSTR_LV4 ((__force s5p_gpio_drvstr_t)0x11) | ||
131 | |||
132 | /** | ||
133 | * s5c_gpio_get_drvstr() - get the driver streght value of a gpio pin | ||
134 | * @pin: The pin number to get the settings for | ||
135 | * | ||
136 | * Read the driver streght value for the specified pin. | ||
137 | */ | ||
138 | extern s5p_gpio_drvstr_t s5p_gpio_get_drvstr(unsigned int pin); | ||
139 | |||
140 | /** | ||
141 | * s3c_gpio_set_drvstr() - set the driver streght value of a gpio pin | ||
142 | * @pin: The pin number to configure the driver streght value | ||
143 | * @drvstr: The new value of the driver strength | ||
144 | * | ||
145 | * This function sets the driver strength value for the specified pin. | ||
146 | * It will return 0 if successfull, or a negative error code if the pin | ||
147 | * cannot support the requested setting. | ||
148 | */ | ||
149 | extern int s5p_gpio_set_drvstr(unsigned int pin, s5p_gpio_drvstr_t drvstr); | ||
150 | |||
121 | #endif /* __PLAT_GPIO_CFG_H */ | 151 | #endif /* __PLAT_GPIO_CFG_H */ |