Hi Stefano, 2014/1/8 Stefano Babic <sba...@denx.de>: > Hi Christian, > > On 08/01/2014 08:24, Christian Gmeiner wrote: >> This new function is used to set all display-timings >> properties based on fb_videomode. >> >> display-timings { >> timing0 { >> clock-frequency = <25000000>; >> hactive = <640>; >> vactive = <480>; >> hback-porch = <48>; >> hfront-porch = <16>; >> vback-porch = <31>; >> vfront-porch = <12>; >> hsync-len = <96>; >> vsync-len = <2>; >> }; >> }; >> >> Signed-off-by: Christian Gmeiner <christian.gmei...@gmail.com> >> --- >> common/fdt_support.c | 23 +++++++++++++++++++++++ >> include/fdt_support.h | 3 +++ >> 2 files changed, 26 insertions(+) >> >> diff --git a/common/fdt_support.c b/common/fdt_support.c >> index 4e32b02..cf81a4b 100644 >> --- a/common/fdt_support.c >> +++ b/common/fdt_support.c >> @@ -11,6 +11,7 @@ >> #include <stdio_dev.h> >> #include <linux/ctype.h> >> #include <linux/types.h> >> +#include <linux/fb.h> >> #include <asm/global_data.h> >> #include <libfdt.h> >> #include <fdt_support.h> >> @@ -1342,6 +1343,28 @@ err_size: >> #endif >> >> /* >> + * fdt_add_display_timings: add display-timings properties >> + * >> + * @fdt: ptr to device tree >> + * @noff: node to update >> + * @mode: ptr to b_videomode >> + */ >> +void fdt_add_display_timings(void *fdt, int noff, struct fb_videomode *mode) >> +{ >> + if (noff != -FDT_ERR_NOTFOUND) { >> + fdt_setprop_u32(fdt, noff, "clock-frequency", mode->pixclock); >> + fdt_setprop_u32(fdt, noff, "hactive", mode->xres); >> + fdt_setprop_u32(fdt, noff, "vactive", mode->yres); >> + fdt_setprop_u32(fdt, noff, "hback-porch", mode->left_margin); >> + fdt_setprop_u32(fdt, noff, "hfront-porch", mode->right_margin); >> + fdt_setprop_u32(fdt, noff, "vback-porch", mode->upper_margin); >> + fdt_setprop_u32(fdt, noff, "vfront-porch", mode->lower_margin); >> + fdt_setprop_u32(fdt, noff, "hsync-len", mode->hsync_len); >> + fdt_setprop_u32(fdt, noff, "vsync-len", mode->vsync_len); >> + } >> +} >> + >> +/* >> * Verify the physical address of device tree node for a given alias >> * >> * This function locates the device tree node of a given alias, and then >> diff --git a/include/fdt_support.h b/include/fdt_support.h >> index 9871e2f..1c54880 100644 >> --- a/include/fdt_support.h >> +++ b/include/fdt_support.h >> @@ -82,6 +82,9 @@ int fdt_set_phandle(void *fdt, int nodeoffset, uint32_t >> phandle); >> unsigned int fdt_create_phandle(void *fdt, int nodeoffset); >> int fdt_add_edid(void *blob, const char *compat, unsigned char *buf); >> >> +struct fb_videomode; >> +void fdt_add_display_timings(void *blob, int noff, struct fb_videomode >> *mode); >> + >> int fdt_verify_alias_address(void *fdt, int anode, const char *alias, >> u64 addr); >> u64 fdt_get_base_address(void *fdt, int node); >> > > Agree that we have to sync u-boot and kernel, and this can be a way in > the short term. > > I am asking if this is in the long term the best way to do it. You are > converting EDID values to fb_videomode *mode, and then again to the > device node as required by DT. > We have already had some talks about moving U-Boot configuration to DT, > that is U-Boot can be also configured by a DT file (see for example > support for Nvidia processors, they already support DT in U-Boot). >
The problem for me here is that DT only does not work in my case. As it is possible to attach different panels/displays via lvds (different timings and resolutions) we have put an at24 on our print, which contains the suitable EDID data. So I need to readout the at24 every boot and need to manipulate the loaded (emmc) DT. > Anatolji, what do you think as best solution we have to follow for > display setting ? > thanks -- Christian Gmeiner, MSc _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot