
On Thu, Jul 19, 2012 at 03:37:07PM +0800, Thierry Reding wrote:
- PGP Signed by an unknown key
On Thu, Jul 12, 2012 at 08:25:08AM -0700, Simon Glass wrote:
From: Wei Ni wni@nvidia.com
Add support for the LCD peripheral at the Tegra2 SOC level. A separate LCD driver will use this functionality to configure the display.
Mayuresh Kulkarni:
- changes to remove bitfields and clean up for submission
Simon Glass:
- simplify code, move clock control into here, clean-up
Signed-off-by: Mayuresh Kulkarni mkulkarni@nvidia.com Signed-off-by: Simon Glass sjg@chromium.org
Changes in v3:
- Add probe function to read in fdt parameters in display driver
- Separate display driver and LCD driver more in fdt
arch/arm/cpu/armv7/tegra2/Makefile | 2 +- arch/arm/cpu/armv7/tegra2/display.c | 389 ++++++++++++++++++++ arch/arm/include/asm/arch-tegra2/dc.h | 544 ++++++++++++++++++++++++++++ arch/arm/include/asm/arch-tegra2/display.h | 152 ++++++++ include/fdtdec.h | 1 + lib/fdtdec.c | 1 + 6 files changed, 1088 insertions(+), 1 deletions(-) create mode 100644 arch/arm/cpu/armv7/tegra2/display.c create mode 100644 arch/arm/include/asm/arch-tegra2/dc.h create mode 100644 arch/arm/include/asm/arch-tegra2/display.h
[...]
diff --git a/arch/arm/cpu/armv7/tegra2/display.c b/arch/arm/cpu/armv7/tegra2/display.c
[...]
+int setup_window(struct disp_ctl_win *win, struct fdt_disp_config *config) +{
- win->x = 0;
- win->y = 0;
- win->w = config->width;
- win->h = config->height;
- win->out_x = 0;
- win->out_y = 0;
- win->out_w = config->width;
- win->out_h = config->height;
- win->phys_addr = config->frame_buffer;
- win->stride = config->width * (1 << config->log2_bpp) / 8;
- debug("%s: depth = %d\n", __func__, config->log2_bpp);
- switch (config->log2_bpp) {
- case 5:
- case 24:
What's the 24 doing here?
This has been explained in the definition of the log2_bpp. When bpp is 24, the integer holds 24 itself because there is no 2^N expression for it.
/Adam
[...]
+static int tegra_display_decode_config(const void *blob,
struct fdt_disp_config *config)
+{
- int front, back, ref;
- int node, rgb;
- int bpp, bit;
- node = fdtdec_next_compatible(blob, 0, COMPAT_NVIDIA_TEGRA20_DC);
- if (node < 0) {
debug("%s: Cannot find display controller node in fdt\n",
__func__);
return node;
- }
- config->disp = (struct disp_ctlr *)fdtdec_get_addr(blob, node, "reg");
- if (!config->disp) {
debug("%s: No display controller address\n", __func__);
return -1;
- }
- rgb = fdt_subnode_offset(blob, node, "rgb");
- config->frame_buffer = fdtdec_get_addr(blob, rgb,
"nvidia,frame-buffer");
- config->width = fdtdec_get_int(blob, rgb, "xres", -1);
- config->height = fdtdec_get_int(blob, rgb, "yres", -1);
- bpp = fdtdec_get_int(blob, rgb, "nvidia,bits-per-pixel", -1);
- bit = ffs(bpp) - 1;
- if (bpp == (1 << bit))
config->log2_bpp = bit;
- else
config->log2_bpp = bpp;
- config->bpp = bpp;
- config->pixel_clock = fdtdec_get_int(blob, rgb, "clock", 0);
- if (!config->pixel_clock || bpp == -1 ||
config->width == -1 || config->height == -1) {
debug("%s: Pixel parameters missing\n", __func__);
return -FDT_ERR_NOTFOUND;
- }
- /* Use a ref-to-sync of 1 always, and take this from the front porch */
- back = fdtdec_get_int(blob, rgb, "left-margin", -1);
- front = fdtdec_get_int(blob, rgb, "right-margin", -1);
- ref = fdtdec_get_int(blob, rgb, "hsync-len", -1);
- if ((back | front | ref) == -1) {
debug("%s: Horizontal parameters missing\n", __func__);
return -FDT_ERR_NOTFOUND;
- }
- config->horiz_timing[FDT_LCD_TIMING_REF_TO_SYNC] = 11;
The comment above says this should be 1.
- config->horiz_timing[FDT_LCD_TIMING_SYNC_WIDTH] = ref;
- config->horiz_timing[FDT_LCD_TIMING_BACK_PORCH] = back;
- config->horiz_timing[FDT_LCD_TIMING_FRONT_PORCH] = front -
config->horiz_timing[FDT_LCD_TIMING_REF_TO_SYNC];
- debug_timing("horiz", config->horiz_timing);
- back = fdtdec_get_int(blob, rgb, "upper-margin", -1);
- front = fdtdec_get_int(blob, rgb, "lower-margin", -1);
- ref = fdtdec_get_int(blob, rgb, "vsync-len", -1);
- if ((back | front | ref) == -1) {
debug("%s: Vertical parameters missing\n", __func__);
return -FDT_ERR_NOTFOUND;
- }
- config->vert_timing[FDT_LCD_TIMING_REF_TO_SYNC] = 1;
- config->vert_timing[FDT_LCD_TIMING_SYNC_WIDTH] = ref;
- config->vert_timing[FDT_LCD_TIMING_BACK_PORCH] = back;
- config->vert_timing[FDT_LCD_TIMING_FRONT_PORCH] = front -
config->vert_timing[FDT_LCD_TIMING_REF_TO_SYNC];
- debug_timing("vert", config->horiz_timing);
This should probably be config->vert_timing.
Thierry
- Unknown Key
- 0x7F3EB3A1
U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
----------------------------------------------------------------------------------- This email message is for the sole use of the intended recipient(s) and may contain confidential information. Any unauthorized review, use, disclosure or distribution is prohibited. If you are not the intended recipient, please contact the sender by reply email and destroy all copies of the original message. -----------------------------------------------------------------------------------