[U-Boot] [PATCH 1/2] tegra: display: add board pinmux

Boards may require a different pinmux setup for DISPALY than the default one. Add a way to call into board specific code to set this up.
Signed-off-by: Marc Dietrich marvin24@gmx.de --- arch/arm/include/asm/arch-tegra/board.h | 7 ++++--- board/nvidia/common/board.c | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/arch-tegra/board.h b/arch/arm/include/asm/arch-tegra/board.h index be6bf25..3db0d93 100644 --- a/arch/arm/include/asm/arch-tegra/board.h +++ b/arch/arm/include/asm/arch-tegra/board.h @@ -41,8 +41,9 @@ void gpio_early_init(void); /* overrideable GPIO config */ * an empty stub function will be called. */
-void pin_mux_usb(void); /* overrideable USB pinmux setup */ -void pin_mux_spi(void); /* overrideable SPI pinmux setup */ -void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_usb(void); /* overrideable USB pinmux setup */ +void pin_mux_spi(void); /* overrideable SPI pinmux setup */ +void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_display(void); /* overrideable DISPLAY pinmux setup */
#endif diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 76ec687..819c120 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -87,6 +87,12 @@ void __pin_mux_nand(void)
void pin_mux_nand(void) __attribute__((weak, alias("__pin_mux_nand")));
+void __pin_mux_display(void) +{ +} + +void pin_mux_display(void) __attribute__((weak, alias("__pin_mux_display"))); + /* * Routine: power_det_init * Description: turn off power detects @@ -126,6 +132,7 @@ int board_init(void) debug("%s: Failed to init pwm\n", __func__); #endif #ifdef CONFIG_LCD + pin_mux_display(); tegra_lcd_check_next_stage(gd->fdt_blob, 0); #endif /* boot param addr */

This adds LCD panel descriptions to the device tree of PAZ00 and enables LCD support in the configuration.
Signed-off-by: Marc Dietrich marvin24@gmx.de --- board/compal/dts/tegra20-paz00.dts | 32 ++++++++++++++++++++++++++++++++ board/compal/paz00/paz00.c | 11 +++++++++++ include/configs/paz00.h | 15 +++++++++++++++ 3 files changed, 58 insertions(+)
diff --git a/board/compal/dts/tegra20-paz00.dts b/board/compal/dts/tegra20-paz00.dts index 9e3e169..afebbe5 100644 --- a/board/compal/dts/tegra20-paz00.dts +++ b/board/compal/dts/tegra20-paz00.dts @@ -54,4 +54,36 @@ usb@c5004000 { status = "disabled"; }; + + host1x { + status = "okay"; + dc@54200000 { + status = "okay"; + rgb { + status = "okay"; + nvidia,panel = <&lcd_panel>; + }; + }; + }; + + lcd_panel: panel { + /* PAZ00 has 1024x600 */ + clock = <54030000>; + xres = <1024>; + yres = <600>; + right-margin = <160>; + left-margin = <24>; + hsync-len = <136>; + upper-margin = <3>; + lower-margin = <61>; + vsync-len = <6>; + hsync-active-high; + nvidia,bits-per-pixel = <16>; + nvidia,pwm = <&pwm 0 0>; + nvidia,backlight-enable-gpios = <&gpio 164 0>; /* PU4 */ + nvidia,lvds-shutdown-gpios = <&gpio 102 0>; /* PM6 */ + nvidia,backlight-vdd-gpios = <&gpio 176 0>; /* PW0 */ + nvidia,panel-vdd-gpios = <&gpio 4 0>; /* PA4 */ + nvidia,panel-timings = <400 4 203 17 15>; + }; }; diff --git a/board/compal/paz00/paz00.c b/board/compal/paz00/paz00.c index 6492d41..1447f47 100644 --- a/board/compal/paz00/paz00.c +++ b/board/compal/paz00/paz00.c @@ -71,3 +71,14 @@ int board_mmc_init(bd_t *bd) return 0; } #endif + +#ifdef CONFIG_LCD +/* this is a weak define that we are overriding */ +void pin_mux_display(void) +{ + debug("init display pinmux\n"); + + /* EN_VDD_PANEL GPIO A4 */ + pinmux_tristate_disable(PINGRP_DAP2); +} +#endif diff --git a/include/configs/paz00.h b/include/configs/paz00.h index 38c79cf..4a74d00 100644 --- a/include/configs/paz00.h +++ b/include/configs/paz00.h @@ -36,6 +36,7 @@ #define CONFIG_MACH_TYPE MACH_TYPE_PAZ00
#define CONFIG_BOARD_EARLY_INIT_F +#define CONFIG_BOARD_LATE_INIT
/* SD/MMC */ #define CONFIG_MMC @@ -71,6 +72,20 @@ #define CONFIG_CMD_NET #define CONFIG_CMD_DHCP
+#undef TEGRA_DEVICE_SETTINGS +#define TEGRA_DEVICE_SETTINGS \ + "stdin=serial\0" \ + "stdout=serial,lcd\0" \ + "stderr=serial,lcd\0" + +/* LCD support */ +#define CONFIG_LCD +#define CONFIG_PWM_TEGRA +#define CONFIG_VIDEO_TEGRA +#define LCD_BPP LCD_COLOR16 +#define CONFIG_SYS_WHITE_ON_BLACK +#define CONFIG_CONSOLE_SCROLL_LINES 10 + #include "tegra-common-post.h"
#endif /* __CONFIG_H */

On 11/25/2012 02:26 PM, Marc Dietrich wrote:
This adds LCD panel descriptions to the device tree of PAZ00 and enables LCD support in the configuration.
diff --git a/include/configs/paz00.h b/include/configs/paz00.h
+#define CONFIG_BOARD_LATE_INIT
What's that for? I don't think any of the other Tegra boards have it.
/* SD/MMC */ #define CONFIG_MMC @@ -71,6 +72,20 @@ #define CONFIG_CMD_NET #define CONFIG_CMD_DHCP
+#undef TEGRA_DEVICE_SETTINGS +#define TEGRA_DEVICE_SETTINGS \
- "stdin=serial\0" \
- "stdout=serial,lcd\0" \
- "stderr=serial,lcd\0"
Why not extend tegra-common-post.h's automatic calculation of TEGRA_DEVICE_SETTINGS to support the lcd case too? Allen Martin's recent change "tegra: move TEGRA_DEVICE_SETTINGS to tegra-common-post.h" should make it easy to do that.

On Monday 26 November 2012 12:00:51 Stephen Warren wrote:
On 11/25/2012 02:26 PM, Marc Dietrich wrote:
This adds LCD panel descriptions to the device tree of PAZ00 and enables LCD support in the configuration.
diff --git a/include/configs/paz00.h b/include/configs/paz00.h
+#define CONFIG_BOARD_LATE_INIT
What's that for? I don't think any of the other Tegra boards have it.
No, all board defining CONFIG_LCD have this (seaboard, avionics). You may ask Simon why it is required. Without it, backlight will not come up on PAZ00 at least.
/* SD/MMC */ #define CONFIG_MMC
@@ -71,6 +72,20 @@
#define CONFIG_CMD_NET #define CONFIG_CMD_DHCP
+#undef TEGRA_DEVICE_SETTINGS +#define TEGRA_DEVICE_SETTINGS \
- "stdin=serial\0" \
- "stdout=serial,lcd\0" \
- "stderr=serial,lcd\0"
Why not extend tegra-common-post.h's automatic calculation of TEGRA_DEVICE_SETTINGS to support the lcd case too? Allen Martin's recent change "tegra: move TEGRA_DEVICE_SETTINGS to tegra-common-post.h" should make it easy to do that.
Yes, I have such a patch in my gitorious tree for some time now. Allen's patch is not in any u-boot-tegra branch yet. I can fix it up when it has landed.
Marc

TEGRA_DEVICE_SETTINGS patch is assigned to Marek and waiting on him to pull 'em thru the USB tree.
Tom
On Mon, Nov 26, 2012 at 2:00 PM, Marc Dietrich marvin24@gmx.de wrote:
On Monday 26 November 2012 12:00:51 Stephen Warren wrote:
On 11/25/2012 02:26 PM, Marc Dietrich wrote:
This adds LCD panel descriptions to the device tree of PAZ00 and enables LCD support in the configuration.
diff --git a/include/configs/paz00.h b/include/configs/paz00.h
+#define CONFIG_BOARD_LATE_INIT
What's that for? I don't think any of the other Tegra boards have it.
No, all board defining CONFIG_LCD have this (seaboard, avionics). You may ask Simon why it is required. Without it, backlight will not come up on PAZ00 at least.
/* SD/MMC */ #define CONFIG_MMC
@@ -71,6 +72,20 @@
#define CONFIG_CMD_NET #define CONFIG_CMD_DHCP
+#undef TEGRA_DEVICE_SETTINGS +#define TEGRA_DEVICE_SETTINGS \
- "stdin=serial\0" \
- "stdout=serial,lcd\0" \
- "stderr=serial,lcd\0"
Why not extend tegra-common-post.h's automatic calculation of TEGRA_DEVICE_SETTINGS to support the lcd case too? Allen Martin's recent change "tegra: move TEGRA_DEVICE_SETTINGS to tegra-common-post.h" should make it easy to do that.
Yes, I have such a patch in my gitorious tree for some time now. Allen's patch is not in any u-boot-tegra branch yet. I can fix it up when it has landed.
Marc

On 11/26/2012 05:07 PM, Tom Warren wrote:
TEGRA_DEVICE_SETTINGS patch is assigned to Marek and waiting on him to pull 'em thru the USB tree.
It looks like the patch has been in u-boot-usb/master for about a week.
(we really need a linux-next for U-Boot to hide all the pull latency)
So, I'd propose that paz00.h can add the config options to enable LCD support right now, but that changes to TEGRA_DEVICE_SETTINGS should instead be implemented generically as a change to the logic in tegra-common-post.h (and hence support all boards not just paz00), either applied to u-boot-usb/master right now, or u-boot-tegra/master once the dependencies are enabled there.

On 11/27/2012 10:42 AM, Stephen Warren wrote:
On 11/26/2012 05:07 PM, Tom Warren wrote:
TEGRA_DEVICE_SETTINGS patch is assigned to Marek and waiting on him to pull 'em thru the USB tree.
It looks like the patch has been in u-boot-usb/master for about a week.
(we really need a linux-next for U-Boot to hide all the pull latency)
So, I'd propose that paz00.h can add the config options to enable LCD support right now, but that changes to TEGRA_DEVICE_SETTINGS should instead be implemented generically as a change to the logic in tegra-common-post.h (and hence support all boards not just paz00), either applied to u-boot-usb/master right now, or u-boot-tegra/master once the dependencies are enabled there.
It's been pointed out that Seaboard already uses this method to override TEGRA_DEVICE_SETTINGS. Given that precedent, I withdraw any objection. We'll just have to remember to fix this all up once the TEGRA_DEVICE_SETTINGS patch makes its way from u-boot-usb to u-boot-tegra.

Dear Stephen Warren,
On 11/27/2012 10:42 AM, Stephen Warren wrote:
On 11/26/2012 05:07 PM, Tom Warren wrote:
TEGRA_DEVICE_SETTINGS patch is assigned to Marek and waiting on him to pull 'em thru the USB tree.
It looks like the patch has been in u-boot-usb/master for about a week.
(we really need a linux-next for U-Boot to hide all the pull latency)
So, I'd propose that paz00.h can add the config options to enable LCD support right now, but that changes to TEGRA_DEVICE_SETTINGS should instead be implemented generically as a change to the logic in tegra-common-post.h (and hence support all boards not just paz00), either applied to u-boot-usb/master right now, or u-boot-tegra/master once the dependencies are enabled there.
It's been pointed out that Seaboard already uses this method to override TEGRA_DEVICE_SETTINGS. Given that precedent, I withdraw any objection. We'll just have to remember to fix this all up once the TEGRA_DEVICE_SETTINGS patch makes its way from u-boot-usb to u-boot-tegra.
Wasn't u-boot-usb pulled just recently?
Best regards, Marek Vasut

Marc,
Boards may require a different pinmux setup for DISPALY than the default one.
s/b 'DISPLAY'
-void pin_mux_usb(void); /* overrideable USB pinmux setup */ -void pin_mux_spi(void); /* overrideable SPI pinmux setup */ -void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_usb(void); /* overrideable USB pinmux setup */ +void pin_mux_spi(void); /* overrideable SPI pinmux setup */ +void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_display(void); /* overrideable DISPLAY pinmux setup */
Don't pad the end of the other comments just to match up with your new DISPLAY proto comment. Had to look at this twice to see what you were really doing here.
Otherwise this patchset LGTM. I'll apply it to tegra/next once you've fixed these nits.
Tom
On Sun, Nov 25, 2012 at 2:26 PM, Marc Dietrich marvin24@gmx.de wrote:
Boards may require a different pinmux setup for DISPALY than the default one. Add a way to call into board specific code to set this up.
Signed-off-by: Marc Dietrich marvin24@gmx.de
arch/arm/include/asm/arch-tegra/board.h | 7 ++++--- board/nvidia/common/board.c | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/arch-tegra/board.h b/arch/arm/include/asm/arch-tegra/board.h index be6bf25..3db0d93 100644 --- a/arch/arm/include/asm/arch-tegra/board.h +++ b/arch/arm/include/asm/arch-tegra/board.h @@ -41,8 +41,9 @@ void gpio_early_init(void); /* overrideable GPIO config */
- an empty stub function will be called.
*/
-void pin_mux_usb(void); /* overrideable USB pinmux setup */ -void pin_mux_spi(void); /* overrideable SPI pinmux setup */ -void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_usb(void); /* overrideable USB pinmux setup */ +void pin_mux_spi(void); /* overrideable SPI pinmux setup */ +void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_display(void); /* overrideable DISPLAY pinmux setup */
#endif diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 76ec687..819c120 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -87,6 +87,12 @@ void __pin_mux_nand(void)
void pin_mux_nand(void) __attribute__((weak, alias("__pin_mux_nand")));
+void __pin_mux_display(void) +{ +}
+void pin_mux_display(void) __attribute__((weak, alias("__pin_mux_display")));
/*
- Routine: power_det_init
- Description: turn off power detects
@@ -126,6 +132,7 @@ int board_init(void) debug("%s: Failed to init pwm\n", __func__); #endif #ifdef CONFIG_LCD
pin_mux_display(); tegra_lcd_check_next_stage(gd->fdt_blob, 0);
#endif /* boot param addr */ -- 1.7.9.5

Hi Tom,
On Monday 26 November 2012 09:55:49 Tom Warren wrote:
Boards may require a different pinmux setup for DISPALY than the default one.
s/b 'DISPLAY'
ups.
-void pin_mux_usb(void); /* overrideable USB pinmux setup */ -void pin_mux_spi(void); /* overrideable SPI pinmux setup */ -void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_usb(void); /* overrideable USB pinmux setup */ +void pin_mux_spi(void); /* overrideable SPI pinmux setup */ +void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_display(void); /* overrideable DISPLAY pinmux setup */
Don't pad the end of the other comments just to match up with your new DISPLAY proto comment. Had to look at this twice to see what you were really doing here.
yeah, I had to decide whether to create an ugly patch or an ugly comment. Will choose the other solution then.
Marc
Otherwise this patchset LGTM. I'll apply it to tegra/next once you've fixed these nits.
Tom
On Sun, Nov 25, 2012 at 2:26 PM, Marc Dietrich marvin24@gmx.de wrote:
Boards may require a different pinmux setup for DISPALY than the default one. Add a way to call into board specific code to set this up.
Signed-off-by: Marc Dietrich marvin24@gmx.de
arch/arm/include/asm/arch-tegra/board.h | 7 ++++--- board/nvidia/common/board.c | 7 +++++++ 2 files changed, 11 insertions(+), 3 deletions(-)
diff --git a/arch/arm/include/asm/arch-tegra/board.h b/arch/arm/include/asm/arch-tegra/board.h index be6bf25..3db0d93 100644 --- a/arch/arm/include/asm/arch-tegra/board.h +++ b/arch/arm/include/asm/arch-tegra/board.h @@ -41,8 +41,9 @@ void gpio_early_init(void); /* overrideable GPIO config */>
- an empty stub function will be called.
*/
-void pin_mux_usb(void); /* overrideable USB pinmux setup */ -void pin_mux_spi(void); /* overrideable SPI pinmux setup */ -void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_usb(void); /* overrideable USB pinmux setup */ +void pin_mux_spi(void); /* overrideable SPI pinmux setup */ +void pin_mux_nand(void); /* overrideable NAND pinmux setup */ +void pin_mux_display(void); /* overrideable DISPLAY pinmux setup */
#endif
diff --git a/board/nvidia/common/board.c b/board/nvidia/common/board.c index 76ec687..819c120 100644 --- a/board/nvidia/common/board.c +++ b/board/nvidia/common/board.c @@ -87,6 +87,12 @@ void __pin_mux_nand(void)
void pin_mux_nand(void) __attribute__((weak, alias("__pin_mux_nand")));
+void __pin_mux_display(void) +{ +}
+void pin_mux_display(void) __attribute__((weak, alias("__pin_mux_display"))); +
/*
- Routine: power_det_init
- Description: turn off power detects
@@ -126,6 +132,7 @@ int board_init(void)
debug("%s: Failed to init pwm\n", __func__);
#endif #ifdef CONFIG_LCD
pin_mux_display(); tegra_lcd_check_next_stage(gd->fdt_blob, 0);
#endif
/* boot param addr */
-- 1.7.9.5
participants (4)
-
Marc Dietrich
-
Marek Vasut
-
Stephen Warren
-
Tom Warren