diff options
author | Ben Dooks <ben-linux@fluff.org> | 2010-05-03 01:39:45 -0400 |
---|---|---|
committer | Ben Dooks <ben-linux@fluff.org> | 2010-05-05 20:25:57 -0400 |
commit | 1ec7269fd8b05044f2cb4059b679e053d57460f5 (patch) | |
tree | 20addcc19fac614b2954fc1b126d9ae5ca38485e | |
parent | 9bbb851c7079ff670ba3fe6c7ce93bb5daa9a694 (diff) |
ARM: S3C24XX: Add the gpio pull configuration for pull-up
Add the necessary gpio configuration helper for the devices which
have a single-bit pull-up resistor disabled.
Signed-off-by: Ben Dooks <ben-linux@fluff.org>
-rw-r--r-- | arch/arm/mach-s3c2410/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-s3c2410/s3c2410.c | 8 | ||||
-rw-r--r-- | arch/arm/mach-s3c2440/Kconfig | 1 | ||||
-rw-r--r-- | arch/arm/mach-s3c2440/s3c2440.c | 8 | ||||
-rw-r--r-- | arch/arm/plat-samsung/gpio-config.c | 32 | ||||
-rw-r--r-- | arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h | 11 |
6 files changed, 61 insertions, 0 deletions
diff --git a/arch/arm/mach-s3c2410/Kconfig b/arch/arm/mach-s3c2410/Kconfig index 554731868b07..9e5e96f12d86 100644 --- a/arch/arm/mach-s3c2410/Kconfig +++ b/arch/arm/mach-s3c2410/Kconfig | |||
@@ -6,6 +6,7 @@ config CPU_S3C2410 | |||
6 | bool | 6 | bool |
7 | depends on ARCH_S3C2410 | 7 | depends on ARCH_S3C2410 |
8 | select CPU_ARM920T | 8 | select CPU_ARM920T |
9 | select S3C_GPIO_PULL_UP | ||
9 | select S3C2410_CLOCK | 10 | select S3C2410_CLOCK |
10 | select S3C2410_GPIO | 11 | select S3C2410_GPIO |
11 | select CPU_LLSERIAL_S3C2410 | 12 | select CPU_LLSERIAL_S3C2410 |
diff --git a/arch/arm/mach-s3c2410/s3c2410.c b/arch/arm/mach-s3c2410/s3c2410.c index 91ba42f688ac..adc90a3c5890 100644 --- a/arch/arm/mach-s3c2410/s3c2410.c +++ b/arch/arm/mach-s3c2410/s3c2410.c | |||
@@ -16,6 +16,7 @@ | |||
16 | #include <linux/list.h> | 16 | #include <linux/list.h> |
17 | #include <linux/timer.h> | 17 | #include <linux/timer.h> |
18 | #include <linux/init.h> | 18 | #include <linux/init.h> |
19 | #include <linux/gpio.h> | ||
19 | #include <linux/clk.h> | 20 | #include <linux/clk.h> |
20 | #include <linux/sysdev.h> | 21 | #include <linux/sysdev.h> |
21 | #include <linux/serial_core.h> | 22 | #include <linux/serial_core.h> |
@@ -40,6 +41,10 @@ | |||
40 | #include <plat/clock.h> | 41 | #include <plat/clock.h> |
41 | #include <plat/pll.h> | 42 | #include <plat/pll.h> |
42 | 43 | ||
44 | #include <plat/gpio-core.h> | ||
45 | #include <plat/gpio-cfg.h> | ||
46 | #include <plat/gpio-cfg-helpers.h> | ||
47 | |||
43 | /* Initial IO mappings */ | 48 | /* Initial IO mappings */ |
44 | 49 | ||
45 | static struct map_desc s3c2410_iodesc[] __initdata = { | 50 | static struct map_desc s3c2410_iodesc[] __initdata = { |
@@ -65,6 +70,9 @@ void __init s3c2410_init_uarts(struct s3c2410_uartcfg *cfg, int no) | |||
65 | 70 | ||
66 | void __init s3c2410_map_io(void) | 71 | void __init s3c2410_map_io(void) |
67 | { | 72 | { |
73 | s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up; | ||
74 | s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up; | ||
75 | |||
68 | iotable_init(s3c2410_iodesc, ARRAY_SIZE(s3c2410_iodesc)); | 76 | iotable_init(s3c2410_iodesc, ARRAY_SIZE(s3c2410_iodesc)); |
69 | } | 77 | } |
70 | 78 | ||
diff --git a/arch/arm/mach-s3c2440/Kconfig b/arch/arm/mach-s3c2440/Kconfig index 7f465265cf04..9d102b912091 100644 --- a/arch/arm/mach-s3c2440/Kconfig +++ b/arch/arm/mach-s3c2440/Kconfig | |||
@@ -6,6 +6,7 @@ config CPU_S3C2440 | |||
6 | bool | 6 | bool |
7 | depends on ARCH_S3C2410 | 7 | depends on ARCH_S3C2410 |
8 | select CPU_ARM920T | 8 | select CPU_ARM920T |
9 | select S3C_GPIO_PULL_UP | ||
9 | select S3C2410_CLOCK | 10 | select S3C2410_CLOCK |
10 | select S3C2410_PM if PM | 11 | select S3C2410_PM if PM |
11 | select S3C2410_GPIO | 12 | select S3C2410_GPIO |
diff --git a/arch/arm/mach-s3c2440/s3c2440.c b/arch/arm/mach-s3c2440/s3c2440.c index 2b68f7ea45ae..d50f3ae6173d 100644 --- a/arch/arm/mach-s3c2440/s3c2440.c +++ b/arch/arm/mach-s3c2440/s3c2440.c | |||
@@ -19,6 +19,7 @@ | |||
19 | #include <linux/platform_device.h> | 19 | #include <linux/platform_device.h> |
20 | #include <linux/serial_core.h> | 20 | #include <linux/serial_core.h> |
21 | #include <linux/sysdev.h> | 21 | #include <linux/sysdev.h> |
22 | #include <linux/gpio.h> | ||
22 | #include <linux/clk.h> | 23 | #include <linux/clk.h> |
23 | #include <linux/io.h> | 24 | #include <linux/io.h> |
24 | 25 | ||
@@ -33,6 +34,10 @@ | |||
33 | #include <plat/cpu.h> | 34 | #include <plat/cpu.h> |
34 | #include <plat/s3c244x.h> | 35 | #include <plat/s3c244x.h> |
35 | 36 | ||
37 | #include <plat/gpio-core.h> | ||
38 | #include <plat/gpio-cfg.h> | ||
39 | #include <plat/gpio-cfg-helpers.h> | ||
40 | |||
36 | static struct sys_device s3c2440_sysdev = { | 41 | static struct sys_device s3c2440_sysdev = { |
37 | .cls = &s3c2440_sysclass, | 42 | .cls = &s3c2440_sysclass, |
38 | }; | 43 | }; |
@@ -41,6 +46,9 @@ int __init s3c2440_init(void) | |||
41 | { | 46 | { |
42 | printk("S3C2440: Initialising architecture\n"); | 47 | printk("S3C2440: Initialising architecture\n"); |
43 | 48 | ||
49 | s3c24xx_gpiocfg_default.set_pull = s3c_gpio_setpull_1up; | ||
50 | s3c24xx_gpiocfg_default.get_pull = s3c_gpio_getpull_1up; | ||
51 | |||
44 | /* change irq for watchdog */ | 52 | /* change irq for watchdog */ |
45 | 53 | ||
46 | s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT; | 54 | s3c_device_wdt.resource[1].start = IRQ_S3C2440_WDT; |
diff --git a/arch/arm/plat-samsung/gpio-config.c b/arch/arm/plat-samsung/gpio-config.c index c5832824e198..8aca88d6c486 100644 --- a/arch/arm/plat-samsung/gpio-config.c +++ b/arch/arm/plat-samsung/gpio-config.c | |||
@@ -164,3 +164,35 @@ s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, | |||
164 | return (__force s3c_gpio_pull_t)pup; | 164 | return (__force s3c_gpio_pull_t)pup; |
165 | } | 165 | } |
166 | #endif | 166 | #endif |
167 | |||
168 | #ifdef CONFIG_S3C_GPIO_PULL_UP | ||
169 | int s3c_gpio_setpull_1up(struct s3c_gpio_chip *chip, | ||
170 | unsigned int off, s3c_gpio_pull_t pull) | ||
171 | { | ||
172 | void __iomem *reg = chip->base + 0x08; | ||
173 | u32 pup = __raw_readl(reg); | ||
174 | |||
175 | pup = __raw_readl(reg); | ||
176 | |||
177 | if (pup == S3C_GPIO_PULL_UP) | ||
178 | pup &= ~(1 << off); | ||
179 | else if (pup == S3C_GPIO_PULL_NONE) | ||
180 | pup |= (1 << off); | ||
181 | else | ||
182 | return -EINVAL; | ||
183 | |||
184 | __raw_writel(pup, reg); | ||
185 | return 0; | ||
186 | } | ||
187 | |||
188 | s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, | ||
189 | unsigned int off) | ||
190 | { | ||
191 | void __iomem *reg = chip->base + 0x08; | ||
192 | u32 pup = __raw_readl(reg); | ||
193 | |||
194 | pup &= (1 << off); | ||
195 | return pup ? S3C_GPIO_PULL_NONE : S3C_GPIO_PULL_UP; | ||
196 | } | ||
197 | #endif /* CONFIG_S3C_GPIO_PULL_UP */ | ||
198 | |||
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..885e9ac642d3 100644 --- a/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h +++ b/arch/arm/plat-samsung/include/plat/gpio-cfg-helpers.h | |||
@@ -146,6 +146,17 @@ extern s3c_gpio_pull_t s3c_gpio_getpull_updown(struct s3c_gpio_chip *chip, | |||
146 | unsigned int off); | 146 | unsigned int off); |
147 | 147 | ||
148 | /** | 148 | /** |
149 | * s3c_gpio_getpull_1up() - Get configuration for choice of up or none | ||
150 | * @chip: The gpio chip that the GPIO pin belongs to | ||
151 | * @off: The offset to the pin to get the configuration of. | ||
152 | * | ||
153 | * This helper function reads the state of the pull-up resistor for the | ||
154 | * given GPIO in the same case as s3c_gpio_setpull_1up. | ||
155 | */ | ||
156 | extern s3c_gpio_pull_t s3c_gpio_getpull_1up(struct s3c_gpio_chip *chip, | ||
157 | unsigned int off); | ||
158 | |||
159 | /** | ||
149 | * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. | 160 | * s3c_gpio_setpull_s3c2443() - Pull configuration for s3c2443. |
150 | * @chip: The gpio chip that is being configured. | 161 | * @chip: The gpio chip that is being configured. |
151 | * @off: The offset for the GPIO being configured. | 162 | * @off: The offset for the GPIO being configured. |