diff options
-rw-r--r-- | arch/arm/mach-pxa/include/mach/palmtreo.h | 3 | ||||
-rw-r--r-- | arch/arm/mach-pxa/palmtreo.c | 61 |
2 files changed, 61 insertions, 3 deletions
diff --git a/arch/arm/mach-pxa/include/mach/palmtreo.h b/arch/arm/mach-pxa/include/mach/palmtreo.h index 2d3f14e3be29..32661945d4c3 100644 --- a/arch/arm/mach-pxa/include/mach/palmtreo.h +++ b/arch/arm/mach-pxa/include/mach/palmtreo.h | |||
@@ -44,6 +44,9 @@ | |||
44 | #define GPIO_NR_TREO680_VIBRATE_EN 44 | 44 | #define GPIO_NR_TREO680_VIBRATE_EN 44 |
45 | #define GPIO_NR_TREO680_KEYB_BL 24 | 45 | #define GPIO_NR_TREO680_KEYB_BL 24 |
46 | #define GPIO_NR_TREO680_BT_EN 43 | 46 | #define GPIO_NR_TREO680_BT_EN 43 |
47 | #define GPIO_NR_TREO680_LCD_POWER 77 | ||
48 | #define GPIO_NR_TREO680_LCD_EN 86 | ||
49 | #define GPIO_NR_TREO680_LCD_EN_N 25 | ||
47 | #endif /* CONFIG_MACH_TREO680 */ | 50 | #endif /* CONFIG_MACH_TREO680 */ |
48 | 51 | ||
49 | /* Centro685 specific GPIOs */ | 52 | /* Centro685 specific GPIOs */ |
diff --git a/arch/arm/mach-pxa/palmtreo.c b/arch/arm/mach-pxa/palmtreo.c index 3f3c48f2f7ce..44412162fd27 100644 --- a/arch/arm/mach-pxa/palmtreo.c +++ b/arch/arm/mach-pxa/palmtreo.c | |||
@@ -98,9 +98,6 @@ static unsigned long treo_pin_config[] __initdata = { | |||
98 | GPIO96_KP_MKOUT_6, | 98 | GPIO96_KP_MKOUT_6, |
99 | GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ | 99 | GPIO93_KP_DKIN_0 | WAKEUP_ON_LEVEL_HIGH, /* Hotsync button */ |
100 | 100 | ||
101 | /* LCD */ | ||
102 | GPIOxx_LCD_TFT_16BPP, | ||
103 | |||
104 | /* Quick Capture Interface */ | 101 | /* Quick Capture Interface */ |
105 | GPIO84_CIF_FV, | 102 | GPIO84_CIF_FV, |
106 | GPIO85_CIF_LV, | 103 | GPIO85_CIF_LV, |
@@ -140,6 +137,12 @@ static unsigned long treo680_pin_config[] __initdata = { | |||
140 | /* MATRIX KEYPAD - different wake up source */ | 137 | /* MATRIX KEYPAD - different wake up source */ |
141 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, | 138 | GPIO100_KP_MKIN_0 | WAKEUP_ON_LEVEL_HIGH, |
142 | GPIO99_KP_MKIN_5, | 139 | GPIO99_KP_MKIN_5, |
140 | |||
141 | /* LCD... L_BIAS alt fn not configured on Treo680; is GPIO instead */ | ||
142 | GPIOxx_LCD_16BPP, | ||
143 | GPIO74_LCD_FCLK, | ||
144 | GPIO75_LCD_LCLK, | ||
145 | GPIO76_LCD_PCLK, | ||
143 | }; | 146 | }; |
144 | #endif /* CONFIG_MACH_TREO680 */ | 147 | #endif /* CONFIG_MACH_TREO680 */ |
145 | 148 | ||
@@ -155,6 +158,9 @@ static unsigned long centro685_pin_config[] __initdata = { | |||
155 | /* MATRIX KEYPAD - different wake up source */ | 158 | /* MATRIX KEYPAD - different wake up source */ |
156 | GPIO100_KP_MKIN_0, | 159 | GPIO100_KP_MKIN_0, |
157 | GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH, | 160 | GPIO99_KP_MKIN_5 | WAKEUP_ON_LEVEL_HIGH, |
161 | |||
162 | /* LCD */ | ||
163 | GPIOxx_LCD_TFT_16BPP, | ||
158 | }; | 164 | }; |
159 | #endif /* CONFIG_MACH_CENTRO */ | 165 | #endif /* CONFIG_MACH_CENTRO */ |
160 | 166 | ||
@@ -424,10 +430,59 @@ static void __init palmphone_common_init(void) | |||
424 | } | 430 | } |
425 | 431 | ||
426 | #ifdef CONFIG_MACH_TREO680 | 432 | #ifdef CONFIG_MACH_TREO680 |
433 | void __init treo680_gpio_init(void) | ||
434 | { | ||
435 | unsigned int gpio; | ||
436 | |||
437 | /* drive all three lcd gpios high initially */ | ||
438 | const unsigned long lcd_flags = GPIOF_INIT_HIGH | GPIOF_DIR_OUT; | ||
439 | |||
440 | /* | ||
441 | * LCD GPIO initialization... | ||
442 | */ | ||
443 | |||
444 | /* | ||
445 | * This is likely the power to the lcd. Toggling it low/high appears to | ||
446 | * turn the lcd off/on. Can be toggled after lcd is initialized without | ||
447 | * any apparent adverse effects to the lcd operation. Note that this | ||
448 | * gpio line is used by the lcd controller as the L_BIAS signal, but | ||
449 | * treo680 configures it as gpio. | ||
450 | */ | ||
451 | gpio = GPIO_NR_TREO680_LCD_POWER; | ||
452 | if (gpio_request_one(gpio, lcd_flags, "LCD power") < 0) | ||
453 | goto fail; | ||
454 | |||
455 | /* | ||
456 | * These two are called "enables", for lack of a better understanding. | ||
457 | * If either of these are toggled after the lcd is initialized, the | ||
458 | * image becomes degraded. N.B. The IPL shipped with the treo | ||
459 | * configures GPIO_NR_TREO680_LCD_EN_N as output and drives it high. If | ||
460 | * the IPL is ever reprogrammed, this initialization may be need to be | ||
461 | * revisited. | ||
462 | */ | ||
463 | gpio = GPIO_NR_TREO680_LCD_EN; | ||
464 | if (gpio_request_one(gpio, lcd_flags, "LCD enable") < 0) | ||
465 | goto fail; | ||
466 | gpio = GPIO_NR_TREO680_LCD_EN_N; | ||
467 | if (gpio_request_one(gpio, lcd_flags, "LCD enable_n") < 0) | ||
468 | goto fail; | ||
469 | |||
470 | /* driving this low turns LCD on */ | ||
471 | gpio_set_value(GPIO_NR_TREO680_LCD_EN_N, 0); | ||
472 | |||
473 | return; | ||
474 | fail: | ||
475 | pr_err("gpio %d initialization failed\n", gpio); | ||
476 | gpio_free(GPIO_NR_TREO680_LCD_POWER); | ||
477 | gpio_free(GPIO_NR_TREO680_LCD_EN); | ||
478 | gpio_free(GPIO_NR_TREO680_LCD_EN_N); | ||
479 | } | ||
480 | |||
427 | static void __init treo680_init(void) | 481 | static void __init treo680_init(void) |
428 | { | 482 | { |
429 | pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); | 483 | pxa2xx_mfp_config(ARRAY_AND_SIZE(treo680_pin_config)); |
430 | palmphone_common_init(); | 484 | palmphone_common_init(); |
485 | treo680_gpio_init(); | ||
431 | palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY, | 486 | palm27x_mmc_init(GPIO_NR_TREO_SD_DETECT_N, GPIO_NR_TREO680_SD_READONLY, |
432 | GPIO_NR_TREO680_SD_POWER, 0); | 487 | GPIO_NR_TREO680_SD_POWER, 0); |
433 | } | 488 | } |