ARM: pxa: palmtreo: a few treo fixes
Subsystems (3)
cover ARM: pxa: palmtreo: a few treo fixes
Some miscellaneous fixes to the treo code.
Mike Dunn (3):
ARM: pxa: palmtreo: fix lcd initialization on treo680
ARM: pxa: palmtreo: fix #ifdefs for leds-gpio device
ARM: pxa: palmtreo: add docg4 device initialization
arch/arm/mach-pxa/include/mach/palmtreo.h | 3 + arch/arm/mach-pxa/palmtreo.c | 102 ++++++++++++++++++++++++++--- 2 files changed, 96 insertions(+), 9 deletions(-)
Signature · 1 line
1.7.8.6
PATCH 1/3 ARM: pxa: palmtreo: fix lcd initialization on treo680
This patch gets the LCD working on my Palm Treo680. Changing the Palm Centro code is avoided (I don't have a Centro for testing at the moment), but some initialization is shuffled around a bit.
This basically adds some code that manages the three gpios that interface to the lcd on the Treo 680. The precise role of each gpio in the hardware architecture is not entirely clear to me; this patch is the result of trial-and-error and observing how the PalmOS code initializes the lcd.
The need for this patch is not evident when Linux is loaded from PalmOS, because at that point the lcd-related gpios have already been configured. But when booting the kernel by other means, this patch is required unless the bootloader has performed the necessary initialializations.
---
I suspect that at least some of these changes may apply to the Centro as well. When I get a hold of one, I will sort this all out.
arch/arm/mach-pxa/include/mach/palmtreo.h | 3 + arch/arm/mach-pxa/palmtreo.c | 59 +++++++++++++++++++++++++++-- 2 files changed, 58 insertions(+), 4 deletions(-)
arch/arm/mach-pxa/include/mach/palmtreo.h +3 -0
@@ -44,6 +44,9 @@#define GPIO_NR_TREO680_VIBRATE_EN 44#define GPIO_NR_TREO680_KEYB_BL 24#define GPIO_NR_TREO680_BT_EN 43 +#define GPIO_NR_TREO680_LCD_POWER 77 +#define GPIO_NR_TREO680_LCD_EN 86 +#define GPIO_NR_TREO680_LCD_EN_N 25#endif /* CONFIG_MACH_TREO680 */ /* Centro685 specific GPIOs */
arch/arm/mach-pxa/palmtreo.c +55 -4
99 lines not on this page · raw message
Signature · 1 line
1.7.8.6
PATCH 1/3 ARM: pxa: palmtreo: fix lcd initialization on treo680
Dear Mike Dunn,
I think you should Cc Haojian (done)
Quoted 3 lines
This patch gets the LCD working on my Palm Treo680. Changing the Palm Centro code is avoided (I don't have a Centro for testing at the moment), but some initialization is shuffled around a bit.
I think I have a spare device somewhere around. I might get it available to you somehow eventually -- but that'll need some further discussion. Let's postpone it for now.
Quoted 4 lines
This basically adds some code that manages the three gpios that interface to the lcd on the Treo 680. The precise role of each gpio in the hardware architecture is not entirely clear to me; this patch is the result of trial-and-error and observing how the PalmOS code initializes the lcd.
Yay, good old times ;-)
Quoted 4 lines
The need for this patch is not evident when Linux is loaded from PalmOS, because at that point the lcd-related gpios have already been configured. But when booting the kernel by other means, this patch is required unless the bootloader has performed the necessary initialializations.
You mean U-Boot ? Makes sense.
[...]
arch/arm/mach-pxa/palmtreo.c static void __init palmphone_common_init(void) · line 480
Quoted 5 lines
static void
__inittreo680_init(void)
{arch/arm/mach-pxa/palmtreo.c +1
-0pxa2xx_mfp_config (ARRAY_AND_SIZE (treo680_pin_config));palmphone_common_init (); +treo680_lcd_init ();
I think you want to do treo680_gpio_configure() kind of thing and then call palm27x_lcd_init() from here.
Even better of course would be to integrate this kind of GPIO fiddling with the backlight subsystem, so the LCD can be properly powered down when going LPM.
arch/arm/mach-pxa/palmtreo.c static void __init centro_init(void) · line 494
Quoted 11 lines
arch/arm/mach-pxa/palmtreo.c +1
-0palm27x_mmc_init (GPIO_NR_TREO_SD_DETECT_N ,GPIO_NR_TREO680_SD_READONLY ,GPIO_NR_TREO680_SD_POWER ,0 ); }@@ -438,6 +488,7 @@ static void __init centro_init(void) {pxa2xx_mfp_config (ARRAY_AND_SIZE (centro685_pin_config));palmphone_common_init (); +palm27x_lcd_init (GPIO_NR_TREO_BL_POWER , &palm_320x320_new_lcd_mode);palm27x_mmc_init (GPIO_NR_TREO_SD_DETECT_N ,-1 ,GPIO_NR_CENTRO_SD_POWER ,1 ); }
Best regards,
Marek Vasut
PATCH 1/3 ARM: pxa: palmtreo: fix lcd initialization on treo680
Quoted 3 lines · Marek Vasut
Dear Mike Dunn,
I think you should Cc Haojian (done)
Yes thanks you Marek, and my aplogies Haojian. Actually I was negligent on the CC's of all these patches. When I repost, I'll expand the CC list.
[...]
Quoted 3 lines
I think I have a spare device somewhere around. I might get it available to you somehow eventually -- but that'll need some further discussion. Let's postpone it for now.
I plan to start checking ebay soon. The Treos seemed widely available last I checked (at least the 680), and fairly cheap.
[...]
Quoted 6 lines
Quoted 4 lines
The need for this patch is not evident when Linux is loaded from PalmOS, because at that point the lcd-related gpios have already been configured. But when booting the kernel by other means, this patch is required unless the bootloader has performed the necessary initialializations.
You mean U-Boot ? Makes sense.
Well my u-boot port does initialize the lcd. But generally, it shouldn't be assumed. I discovered the need for this when I loaded the kernel with the emulator. It's actually the secondary program loader that does the initialization (when it displays the Palm logo).
Quoted 10 lines
[...]
arch/arm/mach-pxa/palmtreo.c static void __init palmphone_common_init(void) · line 480
Quoted 5 lines
static void
__inittreo680_init(void)
{arch/arm/mach-pxa/palmtreo.c +1
-0pxa2xx_mfp_config (ARRAY_AND_SIZE (treo680_pin_config));palmphone_common_init (); +treo680_lcd_init ();I think you want to do
treo680_gpio_configure()kind of thing and then callpalm27x_lcd_init()from here.
I'm not 100% sure, but I think that the lcd controller has to be initialized while the gpios are driven high, then after that, driving one of them low turns the lcd on. This is why palm27x_lcd_init() is called from within treo680_lcd_init(). But yes, it could be cleaner if the hardware permits. I'll experiment some more.
Quoted 2 lines
Even better of course would be to integrate this kind of GPIO fiddling with the backlight subsystem, so the LCD can be properly powered down when going LPM.
Yes, this needs to be cleaned up. The label "lcd power" is thrown around too much, sometimes when actually referring to the backlight. And power management is another whole effort. I'm hoping to be able to take things step by step.
[...]
Thanks for having a look Marek. I'll see if the gpio initialization can be separated from the lcd initialization.
MIke
PATCH 2/3 ARM: pxa: palmtreo: fix #ifdefs for leds-gpio device
In reply to Mike DunnThe #ifdefs around the leds-gpio device platform data are erroneous. Currently the device is not instantiated on the centro unless CONFIG_MACH_TREO680 is defined.
---
The #ifdefs within palmtreo_leds_init() are a little ugly, but I think the only alternative would be to instantiate the leds-gpio device platform data for both treo680 and centro, which would require some of the #defines in palmtreo.h to be moved outside their containing #ifdef CONFIG_MACH_{TREO680,CENTRO}.
arch/arm/mach-pxa/palmtreo.c | 16 +++++++++------- 1 files changed, 9 insertions(+), 7 deletions(-)
arch/arm/mach-pxa/palmtreo.c +9 -7
@@ -357,7 +357,9 @@ static struct gpio_led_platform_data treo680_gpio_led_info = { .leds = treo680_gpio_leds, .num_leds = ARRAY_SIZE(treo680_gpio_leds), }; +#endif +#ifdef CONFIG_MACH_CENTRO static struct gpio_led centro_gpio_leds[] = { { .name = "centro:vibra:vibra",
@@ -381,25 +383,25 @@ static struct gpio_led_platform_data centro_gpio_led_info = { .leds = centro_gpio_leds, .num_leds = ARRAY_SIZE(centro_gpio_leds), }; +#endif static struct platform_device palmtreo_leds = { .name ="leds-gpio" , .id =-1 , - .dev = { - .platform_data = &treo680_gpio_led_info, - } };static void __init palmtreo_leds_init (void ) { +#ifdef CONFIG_MACH_CENTRO if (machine_is_centro ()) palmtreo_leds.dev.platform_data = ¢ro_gpio_led_info; - +#endif +#ifdef CONFIG_MACH_TREO680 +if (machine_is_treo680 ()) + palmtreo_leds.dev.platform_data = &treo680_gpio_led_info; +#endif platform_device_register (&palmtreo_leds); } -#else -static inline void palmtreo_leds_init (void ) {} -#endif /****************************************************************************** * Machine init
Signature · 1 line
1.7.8.6
PATCH 2/3 ARM: pxa: palmtreo: fix #ifdefs for leds-gpio device
Dear Mike Dunn,
Quoted 4 lines
The #ifdefs around the leds-gpio device platform data are erroneous. Currently the device is not instantiated on the centro unless
CONFIG_MACH_TREO680is defined.
Quoted 8 lines
Signed-off-by Mike Dunn <[email protected]>---
The #ifdefs within
palmtreo_leds_init()are a little ugly, but I think the only alternative would be to instantiate the leds-gpio device platform data for both treo680 and centro, which would require some of the #defines inpalmtreo.hto be moved outside their containing #ifdef CONFIG_MACH_{TREO680,CENTRO}.
Shall we not just kill all those ifdefs and let GCC decide what to optimize out? I think this kind of simple stuff should just be optimized out anyway.
Best regards,
Marek Vasut
PATCH 2/3 ARM: pxa: palmtreo: fix #ifdefs for leds-gpio device
Quoted 9 lines · Marek Vasut
Dear Mike Dunn,
Quoted 7 lines
The #ifdefs around the leds-gpio device platform data are erroneous. Currently the device is not instantiated on the centro unless
CONFIG_MACH_TREO680is defined.Signed-off-by Mike Dunn <[email protected]>---
Quoted 8 lines
Quoted 5 lines
The #ifdefs within
palmtreo_leds_init()are a little ugly, but I think the only alternative would be to instantiate the leds-gpio device platform data for both treo680 and centro, which would require some of the #defines inpalmtreo.hto be moved outside their containing #ifdef CONFIG_MACH_{TREO680,CENTRO}.Shall we not just kill all those ifdefs and let GCC decide what to optimize out? I think this kind of simple stuff should just be optimized out anyway.
You're suggesting that all the #ifdef CONFIG_MACH_{TREO680,CENTRO} be removed from palmtreo.h? Yes, this might be better. I'll look into it.
Thanks again,
Mike
PATCH 3/3 ARM: pxa: palmtreo: add docg4 device initialization
In reply to Mike DunnThis patch adds initialization of the docg4 nand flash device to the treo680.
--- arch/arm/mach-pxa/palmtreo.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-)
arch/arm/mach-pxa/palmtreo.c +31 -0
@@ -404,6 +404,36 @@ static void __init palmtreo_leds_init(void) }/****************************************************************************** +* diskonchip docg4 flash +******************************************************************************/ +#if defined(CONFIG_MACH_TREO680 ) +/* REVISIT: does the centro have this device also? */ +#if defined(CONFIG_MTD_NAND_DOCG4 ) || defined(CONFIG_MTD_NAND_DOCG4_MODULE ) +static struct resource docg4_resources[] = { + { + .start =0x00000000 , + .end =0x00001FFF , + .flags =IORESOURCE_MEM , + }, +}; + +static struct platform_device palmtreo680_docg4_flashdevice = { + .name ="docg4" , + .id =-1 , + .resource = docg4_resources, + .num_resources =ARRAY_SIZE (docg4_resources), +}; + +static void __init palmtreo680_docg4_flash_init (void ) +{ +platform_device_register (&palmtreo680_docg4_flashdevice); +} +#else +static inline void palmtreo680_docg4_flash_init (void ) {} +#endif +#endif + +/****************************************************************************** * Machine init ******************************************************************************/ static void __init treo_reserve (void )
@@ -482,6 +512,7 @@ static void __init treo680_init(void)treo680_lcd_init ();palm27x_mmc_init (GPIO_NR_TREO_SD_DETECT_N ,GPIO_NR_TREO680_SD_READONLY ,GPIO_NR_TREO680_SD_POWER ,0 ); + palmtreo680_docg4_flash_init(); }#endif
Signature · 1 line
1.7.8.6
PATCH 3/3 ARM: pxa: palmtreo: add docg4 device initialization
Dear Mike Dunn,
Quoted 4 lines
This patch adds initialization of the docg4 nand flash device to the treo680.
Signed-off-by Mike Dunn <[email protected]>
Best regards,
Marek Vasut
PATCH 3/3 ARM: pxa: palmtreo: add docg4 device initialization
In reply to Mike DunnHello.
Quoted 12 lines · Mike Dunn
This patch adds initialization of the docg4 nand flash device to the treo680.
Signed-off-by Mike Dunn <[email protected]>--- arch/arm/mach-pxa/palmtreo.c | 31 +++++++++++++++++++++++++++++++ 1 files changed, 31 insertions(+), 0 deletions(-)arch/arm/mach-pxa/palmtreo.c +0
-0
arch/arm/mach-pxa/palmtreo.c static void __init palmtreo_leds_init(void) · line 411
Quoted 8 lines
arch/arm/mach-pxa/palmtreo.c +5
-0@@ -404,6 +404,36 @@ static void __init palmtreo_leds_init(void) }/****************************************************************************** +* diskonchip docg4 flash +******************************************************************************/ +#if defined(CONFIG_MACH_TREO680 ) +/* REVISIT: does the centro have this device also? */ +#if defined(CONFIG_MTD_NAND_DOCG4 ) || defined(CONFIG_MTD_NAND_DOCG4_MODULE )
#if IS_ENABLED(CONFIG_MTD_NAND_DOCG4)
WBR, Sergei
PATCH 3/3 ARM: pxa: palmtreo: add docg4 device initialization
Quoted 10 lines · Sergei Shtylyov
arch/arm/mach-pxa/palmtreo.c static void __init palmtreo_leds_init(void) · line 411
Quoted 7 lines
/******************************************************************************
+ * diskonchip docg4 flash
+ ******************************************************************************/arch/arm/mach-pxa/palmtreo.c +3
-0+#if defined(CONFIG_MACH_TREO680 ) +/* REVISIT: does the centro have this device also? */ +#if defined(CONFIG_MTD_NAND_DOCG4 ) || defined(CONFIG_MTD_NAND_DOCG4_MODULE )#if IS_ENABLED(CONFIG_MTD_NAND_DOCG4)
Quoted 2 lines
WBR, Sergei
Thanks Sergei. I see this in kconfig.h now. This will be another patch to replace all the "if defined" in this file.
Mike