changed Makefile and profiles, added patches for kernel 2.6.24
[openwrt.git] / target / linux / s3c24xx / patches-2.6.26 / 0117--neo-Every-access-to-GPIO-bank-B-has-to-go-through.patch
1 From 81bf1ac05c1ba0d32db8fe8fb0cd52cb6b7d8e7e Mon Sep 17 00:00:00 2001
2 From: Holger Freyther <zecke@openmoko.org>
3 Date: Fri, 25 Jul 2008 23:06:05 +0100
4 Subject: [PATCH] [neo] Every access to GPIO bank B has to go through the shadow code
5
6     - Any setting of any PIN on bank B will undo the LED setting.
7       Introduce neo1973_gpb_set_pin to set the PIN in a way not losing
8       the LED or any other shadowed setting.
9     - Update users of GPBXY for gta01 and gta02.
10
11 Signed-Off-By: Holger Freyther <zecke@openmoko.org>
12 ---
13  arch/arm/mach-s3c2410/mach-gta01.c     |    9 ++--
14  arch/arm/mach-s3c2440/mach-gta02.c     |   10 ++--
15  arch/arm/plat-s3c24xx/Makefile         |    4 +-
16  arch/arm/plat-s3c24xx/neo1973_pm_bt.c  |   15 +++---
17  arch/arm/plat-s3c24xx/neo1973_pm_gps.c |    5 ++-
18  arch/arm/plat-s3c24xx/neo1973_pm_gsm.c |    9 ++--
19  arch/arm/plat-s3c24xx/neo1973_shadow.c |   86 ++++++++++++++++++++++++++++++++
20  drivers/leds/leds-neo1973-gta02.c      |   12 ++--
21  drivers/leds/leds-neo1973-vibrator.c   |    7 ++-
22  drivers/video/backlight/gta01_bl.c     |    9 ++--
23  include/asm-arm/plat-s3c24xx/neo1973.h |   33 ++++++++++++
24  11 files changed, 165 insertions(+), 34 deletions(-)
25  create mode 100644 arch/arm/plat-s3c24xx/neo1973_shadow.c
26  create mode 100644 include/asm-arm/plat-s3c24xx/neo1973.h
27
28 diff --git a/arch/arm/mach-s3c2410/mach-gta01.c b/arch/arm/mach-s3c2410/mach-gta01.c
29 index 8c1a402..a4384b6 100644
30 --- a/arch/arm/mach-s3c2410/mach-gta01.c
31 +++ b/arch/arm/mach-s3c2410/mach-gta01.c
32 @@ -72,6 +72,7 @@
33  #include <asm/plat-s3c24xx/cpu.h>
34  #include <asm/plat-s3c24xx/pm.h>
35  #include <asm/plat-s3c24xx/udc.h>
36 +#include <asm/plat-s3c24xx/neo1973.h>
37  
38  static struct map_desc gta01_iodesc[] __initdata = {
39         {
40 @@ -416,10 +417,10 @@ static void gta01_mmc_set_power(unsigned char power_mode, unsigned short vdd)
41         case GTA01Bv4_SYSTEM_REV:
42                 switch (power_mode) {
43                 case MMC_POWER_OFF:
44 -                       s3c2410_gpio_setpin(GTA01_GPIO_SDMMC_ON, 1);
45 +                       neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 1);
46                         break;
47                 case MMC_POWER_ON:
48 -                       s3c2410_gpio_setpin(GTA01_GPIO_SDMMC_ON, 0);
49 +                       neo1973_gpb_setpin(GTA01_GPIO_SDMMC_ON, 0);
50                         break;
51                 }
52                 break;
53 @@ -442,10 +443,10 @@ static void gta01_udc_command(enum s3c2410_udc_cmd_e cmd)
54  
55         switch (cmd) {
56         case S3C2410_UDC_P_ENABLE:
57 -               s3c2410_gpio_setpin(GTA01_GPIO_USB_PULLUP, 1);
58 +               neo1973_gpb_setpin(GTA01_GPIO_USB_PULLUP, 1);
59                 break;
60         case S3C2410_UDC_P_DISABLE:
61 -               s3c2410_gpio_setpin(GTA01_GPIO_USB_PULLUP, 0);
62 +               neo1973_gpb_setpin(GTA01_GPIO_USB_PULLUP, 0);
63                 break;
64         default:
65                 break;
66 diff --git a/arch/arm/mach-s3c2440/mach-gta02.c b/arch/arm/mach-s3c2440/mach-gta02.c
67 index f9e00d5..27babc9 100644
68 --- a/arch/arm/mach-s3c2440/mach-gta02.c
69 +++ b/arch/arm/mach-s3c2440/mach-gta02.c
70 @@ -75,6 +75,7 @@
71  #include <asm/plat-s3c24xx/cpu.h>
72  #include <asm/plat-s3c24xx/pm.h>
73  #include <asm/plat-s3c24xx/udc.h>
74 +#include <asm/plat-s3c24xx/neo1973.h>
75  #include <linux/jbt6k74.h>
76  
77  #include <linux/glamofb.h>
78 @@ -127,11 +128,11 @@ FIQ_HANDLER_ENTRY(256, 512)
79  
80         if (fiq_ipc.vib_pwm_latched || fiq_ipc.vib_pwm) { /* not idle */
81                 if (((u8)_fiq_count_fiqs) == fiq_ipc.vib_pwm_latched)
82 -                       s3c2410_gpio_setpin(fiq_ipc.vib_gpio_pin, 0);
83 +                       neo1973_gpb_setpin(fiq_ipc.vib_gpio_pin, 0);
84                 if (((u8)_fiq_count_fiqs) == 0) {
85                         fiq_ipc.vib_pwm_latched = fiq_ipc.vib_pwm;
86                         if (fiq_ipc.vib_pwm_latched)
87 -                               s3c2410_gpio_setpin(fiq_ipc.vib_gpio_pin, 1);
88 +                               neo1973_gpb_setpin(fiq_ipc.vib_gpio_pin, 1);
89                 }
90                 divisor = FIQ_DIVISOR_VIBRATOR;
91         }
92 @@ -319,6 +320,7 @@ FIQ_HANDLER_ENTRY(256, 512)
93  FIQ_HANDLER_END()
94  
95  
96 +
97  /**
98   * returns PCB revision information in b9,b8 and b2,b1,b0
99   * Pre-GTA02 A6 returns 0x000
100 @@ -763,10 +765,10 @@ static void gta02_udc_command(enum s3c2410_udc_cmd_e cmd)
101  
102         switch (cmd) {
103         case S3C2410_UDC_P_ENABLE:
104 -               s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 1);
105 +               neo1973_gpb_setpin(GTA02_GPIO_USB_PULLUP, 1);
106                 break;
107         case S3C2410_UDC_P_DISABLE:
108 -               s3c2410_gpio_setpin(GTA02_GPIO_USB_PULLUP, 0);
109 +               neo1973_gpb_setpin(GTA02_GPIO_USB_PULLUP, 0);
110                 break;
111         case S3C2410_UDC_P_RESET:
112                 /* FIXME! */
113 diff --git a/arch/arm/plat-s3c24xx/Makefile b/arch/arm/plat-s3c24xx/Makefile
114 index 6b32a8a..c173f7b 100644
115 --- a/arch/arm/plat-s3c24xx/Makefile
116 +++ b/arch/arm/plat-s3c24xx/Makefile
117 @@ -33,4 +33,6 @@ obj-$(CONFIG_MACH_NEO1973)    += neo1973_version.o \
118                                    neo1973_pm_host.o \
119                                    neo1973_pm_gsm.o \
120                                    neo1973_pm_gps.o \
121 -                                  neo1973_pm_bt.o
122 +                                  neo1973_pm_bt.o  \
123 +                                  neo1973_shadow.o
124 +
125 diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_bt.c b/arch/arm/plat-s3c24xx/neo1973_pm_bt.c
126 index a9694b4..dfc9ae8 100644
127 --- a/arch/arm/plat-s3c24xx/neo1973_pm_bt.c
128 +++ b/arch/arm/plat-s3c24xx/neo1973_pm_bt.c
129 @@ -18,6 +18,7 @@
130  
131  #include <asm/hardware.h>
132  #include <asm/mach-types.h>
133 +#include <asm/plat-s3c24xx/neo1973.h>
134  
135  #ifdef CONFIG_MACH_NEO1973_GTA01
136  #include <asm/arch/gta01.h>
137 @@ -95,20 +96,20 @@ static ssize_t bt_write(struct device *dev, struct device_attribute *attr,
138                         /* if we are powering up, assert reset, then power,
139                          * then release reset */
140                         if (on) {
141 -                               s3c2410_gpio_setpin(GTA01_GPIO_BT_EN, 0);
142 +                               neo1973_gpb_setpin(GTA01_GPIO_BT_EN, 0);
143                                 pcf50606_voltage_set(pcf50606_global,
144                                                      PCF50606_REGULATOR_D1REG,
145                                                      3100);
146                         }
147                         pcf50606_onoff_set(pcf50606_global,
148                                            PCF50606_REGULATOR_D1REG, on);
149 -                       s3c2410_gpio_setpin(GTA01_GPIO_BT_EN, on);
150 +                       neo1973_gpb_setpin(GTA01_GPIO_BT_EN, on);
151                         break;
152  #endif /* CONFIG_MACH_NEO1973_GTA01 */
153  
154  #ifdef CONFIG_MACH_NEO1973_GTA02
155                 case MACH_TYPE_NEO1973_GTA02:
156 -                       s3c2410_gpio_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
157 +                       neo1973_gpb_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
158                         if (on)
159                                 pcf50633_voltage_set(pcf50633_global,
160                                         PCF50633_REGULATOR_LDO4, 3200);
161 @@ -127,13 +128,13 @@ static ssize_t bt_write(struct device *dev, struct device_attribute *attr,
162  
163  #ifdef CONFIG_MACH_NEO1973_GTA01
164                 case MACH_TYPE_NEO1973_GTA01:
165 -                       s3c2410_gpio_setpin(GTA01_GPIO_BT_EN, on ? 0 : 1);
166 +                       neo1973_gpb_setpin(GTA01_GPIO_BT_EN, on ? 0 : 1);
167                         break;
168  #endif /* CONFIG_MACH_NEO1973_GTA01 */
169  
170  #ifdef CONFIG_MACH_NEO1973_GTA02
171                 case MACH_TYPE_NEO1973_GTA02:
172 -                       s3c2410_gpio_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
173 +                       neo1973_gpb_setpin(GTA02_GPIO_BT_EN, on ? 0 : 1);
174                         break;
175  #endif /* CONFIG_MACH_NEO1973_GTA02 */
176  
177 @@ -192,7 +193,7 @@ static int __init gta01_bt_probe(struct platform_device *pdev)
178                                    PCF50606_REGULATOR_D1REG, 0);
179                 /* we pull reset to low to make sure that the chip doesn't
180                  * drain power through the reset line */
181 -               s3c2410_gpio_setpin(GTA01_GPIO_BT_EN, 0);
182 +               neo1973_gpb_setpin(GTA01_GPIO_BT_EN, 0);
183                 break;
184  #endif /* CONFIG_MACH_NEO1973_GTA01 */
185  
186 @@ -203,7 +204,7 @@ static int __init gta01_bt_probe(struct platform_device *pdev)
187                                      PCF50633_REGULATOR_LDO4, 0);
188                 /* we pull reset to low to make sure that the chip doesn't
189                  * drain power through the reset line */
190 -               s3c2410_gpio_setpin(GTA02_GPIO_BT_EN, 0);
191 +               neo1973_gpb_setpin(GTA02_GPIO_BT_EN, 0);
192                 break;
193  #endif /* CONFIG_MACH_NEO1973_GTA02 */
194  
195 diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gps.c b/arch/arm/plat-s3c24xx/neo1973_pm_gps.c
196 index d882f7b..d020f8d 100644
197 --- a/arch/arm/plat-s3c24xx/neo1973_pm_gps.c
198 +++ b/arch/arm/plat-s3c24xx/neo1973_pm_gps.c
199 @@ -20,6 +20,9 @@
200  #include <asm/hardware.h>
201  
202  #include <asm/mach-types.h>
203 +
204 +#include <asm/plat-s3c24xx/neo1973.h>
205 +
206  #ifdef CONFIG_MACH_NEO1973_GTA01
207  #include <asm/arch/gta01.h>
208  #include <linux/pcf50606.h>
209 @@ -264,7 +267,7 @@ static void gps_pwron_set(int on)
210  {
211  #ifdef CONFIG_MACH_NEO1973_GTA01
212         if (machine_is_neo1973_gta01())
213 -               s3c2410_gpio_setpin(GTA01_GPIO_GPS_PWRON, on);
214 +               neo1973_gpb_setpin(GTA01_GPIO_GPS_PWRON, on);
215  #endif /* CONFIG_MACH_NEO1973_GTA01 */
216  
217  #ifdef CONFIG_MACH_NEO1973_GTA02
218 diff --git a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
219 index 5ad942e..149b866 100644
220 --- a/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
221 +++ b/arch/arm/plat-s3c24xx/neo1973_pm_gsm.c
222 @@ -22,6 +22,7 @@
223  #include <asm/gpio.h>
224  #include <asm/mach-types.h>
225  #include <asm/arch/gta01.h>
226 +#include <asm/plat-s3c24xx/neo1973.h>
227  
228  #ifdef CONFIG_MACH_NEO1973_GTA02
229  #include <asm/arch/gta02.h>
230 @@ -109,9 +110,9 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
231  #endif
232                         }
233  
234 -                       s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 1);
235 +                       neo1973_gpb_setpin(GTA01_GPIO_MODEM_ON, 1);
236                 } else {
237 -                       s3c2410_gpio_setpin(GTA01_GPIO_MODEM_ON, 0);
238 +                       neo1973_gpb_setpin(GTA01_GPIO_MODEM_ON, 0);
239  
240                         switch (system_rev) {
241  #ifdef CONFIG_MACH_NEO1973_GTA02
242 @@ -138,9 +139,9 @@ static ssize_t gsm_write(struct device *dev, struct device_attribute *attr,
243                 }
244         } else if (!strcmp(attr->attr.name, "reset")) {
245                 if (machine_is_neo1973_gta01())
246 -                       s3c2410_gpio_setpin(GTA01_GPIO_MODEM_RST, on);
247 +                       neo1973_gpb_setpin(GTA01_GPIO_MODEM_RST, on);
248                 else if (machine_is_neo1973_gta02())
249 -                       s3c2410_gpio_setpin(GTA02_GPIO_MODEM_RST, on);
250 +                       neo1973_gpb_setpin(GTA02_GPIO_MODEM_RST, on);
251         } else if (!strcmp(attr->attr.name, "download")) {
252                 if (machine_is_neo1973_gta01())
253                         s3c2410_gpio_setpin(GTA01_GPIO_MODEM_DNLOAD, on);
254 diff --git a/arch/arm/plat-s3c24xx/neo1973_shadow.c b/arch/arm/plat-s3c24xx/neo1973_shadow.c
255 new file mode 100644
256 index 0000000..09667da
257 --- /dev/null
258 +++ b/arch/arm/plat-s3c24xx/neo1973_shadow.c
259 @@ -0,0 +1,86 @@
260 +/*
261 + * include/asm-arm/plat-s3c24xx/neo1973.h
262 + *
263 + * Common utility code for GTA01 and GTA02
264 + *
265 + * Copyright (C) 2008 by Openmoko, Inc.
266 + * Author: Holger Hans Peter Freyther <freyther@openmoko.org>
267 + * All rights reserved.
268 + *
269 + * This program is free software; you can redistribute it and/or
270 + * modify it under the terms of the GNU General Public License as
271 + * published by the Free Software Foundation; either version 2 of
272 + * the License, or (at your option) any later version.
273 + *
274 + * This program is distributed in the hope that it will be useful,
275 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
276 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
277 + * GNU General Public License for more details.
278 + *
279 + * You should have received a copy of the GNU General Public License
280 + * along with this program; if not, write to the Free Software
281 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
282 + * MA 02111-1307 USA
283 + *
284 + */
285 +
286 +#include <linux/io.h>
287 +#include <linux/irq.h>
288 +
289 +#include <asm/gpio.h>
290 +#include <asm/plat-s3c24xx/neo1973.h>
291 +
292 +/**
293 + * Shadow GPIO bank B handling. For the LEDs we need to keep track of the state
294 + * in software. The s3c2410_gpio_setpin must not be used for GPIOs on bank B
295 + */
296 +static unsigned long gpb_mask;
297 +static unsigned long gpb_state;
298 +
299 +void neo1973_gpb_add_shadow_gpio(unsigned int gpio)
300 +{
301 +       unsigned long offset = S3C2410_GPIO_OFFSET(gpio);
302 +       unsigned long flags;
303 +
304 +       local_irq_save(flags);
305 +       gpb_mask |= 1L << offset;
306 +       local_irq_restore(flags);
307 +}
308 +EXPORT_SYMBOL(neo1973_gpb_add_shadow_gpio);
309 +
310 +static void set_shadow_gpio(unsigned long offset, unsigned int value)
311 +{
312 +       unsigned long state = value != 0;
313 +
314 +       gpb_state &= ~(1L << offset);
315 +       gpb_state |= state << offset;
316 +}
317 +
318 +void neo1973_gpb_setpin(unsigned int pin, unsigned to)
319 +{
320 +       void __iomem *base = S3C24XX_GPIO_BASE(S3C2410_GPB0);
321 +       unsigned long offset = S3C2410_GPIO_OFFSET(pin);
322 +       unsigned long flags;
323 +       unsigned long dat;
324 +
325 +       BUG_ON(base != S3C24XX_GPIO_BASE(pin));
326 +
327 +       local_irq_save(flags);
328 +       dat = __raw_readl(base + 0x04);
329 +
330 +       /* Add the shadow values */
331 +       dat &= ~gpb_mask;
332 +       dat |= gpb_state;
333 +
334 +       /* Do the operation like s3c2410_gpio_setpin */
335 +       dat &= ~(1L << offset);
336 +       dat |= to << offset;
337 +
338 +       /* Update the shadow state */
339 +       if ((1L << offset) & gpb_mask)
340 +               set_shadow_gpio(offset, to);
341 +
342 +       __raw_writel(dat, base + 0x04);
343 +       local_irq_restore(flags);
344 +}
345 +EXPORT_SYMBOL(neo1973_gpb_setpin);
346 diff --git a/drivers/leds/leds-neo1973-gta02.c b/drivers/leds/leds-neo1973-gta02.c
347 index 343550a..952ad69 100644
348 --- a/drivers/leds/leds-neo1973-gta02.c
349 +++ b/drivers/leds/leds-neo1973-gta02.c
350 @@ -20,6 +20,7 @@
351  #include <asm/arch/pwm.h>
352  #include <asm/arch/gta02.h>
353  #include <asm/plat-s3c/regs-timer.h>
354 +#include <asm/plat-s3c24xx/neo1973.h>
355  
356  #define MAX_LEDS 3
357  #define COUNTER 256
358 @@ -60,14 +61,13 @@ static void gta02led_set(struct led_classdev *led_cdev,
359          * value == 0 -> 0% duty cycle (zero power)
360          */
361         mutex_lock(&lp->mutex);
362 +
363         if (lp->has_pwm) {
364 -                       s3c2410_pwm_duty_cycle(value, &lp->pwm);
365 +               s3c2410_pwm_duty_cycle(value, &lp->pwm);
366         } else {
367 -               if (value)
368 -                       s3c2410_gpio_setpin(lp->gpio, 1);
369 -               else
370 -                       s3c2410_gpio_setpin(lp->gpio, 0);
371 +               neo1973_gpb_setpin(lp->gpio, value ? 1 : 0);
372         }
373 +
374         mutex_unlock(&lp->mutex);
375  }
376  
377 @@ -164,7 +164,7 @@ static int __init gta02led_probe(struct platform_device *pdev)
378                 case S3C2410_GPB3:
379                         lp->has_pwm = 0;
380                         s3c2410_gpio_cfgpin(lp->gpio, S3C2410_GPIO_OUTPUT);
381 -                       s3c2410_gpio_setpin(lp->gpio, 0);
382 +                       neo1973_gpb_add_shadow_gpio(lp->gpio);
383                         break;
384                 default:
385                         break;
386 diff --git a/drivers/leds/leds-neo1973-vibrator.c b/drivers/leds/leds-neo1973-vibrator.c
387 index f31302d..647e860 100644
388 --- a/drivers/leds/leds-neo1973-vibrator.c
389 +++ b/drivers/leds/leds-neo1973-vibrator.c
390 @@ -24,6 +24,7 @@
391  #include <asm/plat-s3c/regs-timer.h>
392  
393  #include <asm/arch-s3c2410/fiq_ipc_gta02.h>
394 +#include <asm/plat-s3c24xx/neo1973.h>
395  
396  #define COUNTER 64
397  
398 @@ -56,9 +57,9 @@ static void neo1973_vib_vib_set(struct led_classdev *led_cdev,
399                 s3c2410_pwm_duty_cycle(value / 4, &vp->pwm);
400         else {
401                 if (value)
402 -                       s3c2410_gpio_setpin(vp->gpio, 1);
403 +                       neo1973_gpb_setpin(vp->gpio, 1);
404                 else
405 -                       s3c2410_gpio_setpin(vp->gpio, 0);
406 +                       neo1973_gpb_setpin(vp->gpio, 0);
407         }
408  
409         mutex_unlock(&vp->mutex);
410 @@ -131,7 +132,7 @@ static int __init neo1973_vib_probe(struct platform_device *pdev)
411         platform_set_drvdata(pdev, &neo1973_vib_led);
412  
413         if (machine_is_neo1973_gta02()) { /* use FIQ to control GPIO */
414 -               s3c2410_gpio_setpin(neo1973_vib_led.gpio, 0); /* off */
415 +               neo1973_gpb_setpin(neo1973_vib_led.gpio, 0); /* off */
416                 s3c2410_gpio_cfgpin(neo1973_vib_led.gpio, S3C2410_GPIO_OUTPUT);
417                 /* safe, kmalloc'd copy needed for FIQ ISR */
418                 fiq_ipc.vib_gpio_pin = neo1973_vib_led.gpio;
419 diff --git a/drivers/video/backlight/gta01_bl.c b/drivers/video/backlight/gta01_bl.c
420 index bd7d41f..301ec9c 100644
421 --- a/drivers/video/backlight/gta01_bl.c
422 +++ b/drivers/video/backlight/gta01_bl.c
423 @@ -40,6 +40,7 @@
424  #include <asm/arch/pwm.h>
425  
426  #include <asm/plat-s3c/regs-timer.h>
427 +#include <asm/plat-s3c24xx/neo1973.h>
428  
429  static struct backlight_properties gta01bl_prop;
430  static struct backlight_device *gta01_backlight_device;
431 @@ -83,12 +84,12 @@ static int gta01bl_send_intensity(struct backlight_device *bd)
432         mutex_lock(&gta01bl.mutex);
433  #ifdef GTA01_BACKLIGHT_ONOFF_ONLY
434         if (intensity)
435 -               s3c2410_gpio_setpin(GTA01_GPIO_BACKLIGHT, 1);
436 +               neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
437         else
438 -               s3c2410_gpio_setpin(GTA01_GPIO_BACKLIGHT, 0);
439 +               neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 0);
440  #else
441         if (intensity == bd->props.max_brightness) {
442 -               s3c2410_gpio_setpin(GTA01_GPIO_BACKLIGHT, 1);
443 +               neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
444                 s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
445         } else  {
446                 s3c2410_pwm_duty_cycle(intensity & 0xffff, &gta01bl.pwm);
447 @@ -222,7 +223,7 @@ static int gta01bl_remove(struct platform_device *dev)
448         mutex_destroy(&gta01bl.mutex);
449  
450         s3c2410_gpio_cfgpin(GTA01_GPIO_BACKLIGHT, S3C2410_GPIO_OUTPUT);
451 -       s3c2410_gpio_setpin(GTA01_GPIO_BACKLIGHT, 1);
452 +       neo1973_gpb_setpin(GTA01_GPIO_BACKLIGHT, 1);
453  
454         return 0;
455  }
456 diff --git a/include/asm-arm/plat-s3c24xx/neo1973.h b/include/asm-arm/plat-s3c24xx/neo1973.h
457 new file mode 100644
458 index 0000000..63297de
459 --- /dev/null
460 +++ b/include/asm-arm/plat-s3c24xx/neo1973.h
461 @@ -0,0 +1,33 @@
462 +/*
463 + * include/asm-arm/plat-s3c24xx/neo1973.h
464 + *
465 + * Common utility code for GTA01 and GTA02
466 + *
467 + * Copyright (C) 2008 by Openmoko, Inc.
468 + * Author: Holger Hans Peter Freyther <freyther@openmoko.org>
469 + * All rights reserved.
470 + *
471 + * This program is free software; you can redistribute it and/or
472 + * modify it under the terms of the GNU General Public License as
473 + * published by the Free Software Foundation; either version 2 of
474 + * the License, or (at your option) any later version.
475 + *
476 + * This program is distributed in the hope that it will be useful,
477 + * but WITHOUT ANY WARRANTY; without even the implied warranty of
478 + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
479 + * GNU General Public License for more details.
480 + *
481 + * You should have received a copy of the GNU General Public License
482 + * along with this program; if not, write to the Free Software
483 + * Foundation, Inc., 59 Temple Place, Suite 330, Boston,
484 + * MA 02111-1307 USA
485 + *
486 + */
487 +
488 +#ifndef NEO1973_H
489 +#define NEO1973_H
490 +
491 +void neo1973_gpb_add_shadow_gpio(unsigned int gpio);
492 +void neo1973_gpb_setpin(unsigned int pin, unsigned to);
493 +
494 +#endif
495 -- 
496 1.5.6.3
497