
Hello Robert,
On Thu, 25 Jul 2013 11:21:10 -0700 Robert Winkler robert.winkler@boundarydevices.com wrote:
Hello all,
We're trying to figure out how best to get rid of static code like this:
http://git.denx.de/?p=u-boot.git;a=blob;f=board/boundary/nitrogen6x/nitrogen...
and turn it into run time data.
Our idea is to use an environment variable so adding support for new screens and iterating on minor settings is quick and easy and then we can remove the static arrays like the one above and in wandboard.c and other places.
We have some code and users to define timing parameters in an environment variable "videomode". video_get_params() is used to read the parameters into a structure "struct ctfb_res_modes".
One way to do this is to create a data structure that can subsume the functionalities of of display_info_t and the various structures in lcd.h and elsewhere that can be used throughout U-Boot both with CONFIG_LCD and CONFIG_CFB_CONSOLE. Combined with the EDID functionality already in U-Boot this would allow code to easily select the "best" display supported by the monitor or closest to what the user wanted (given in the environment variable). This data structure would then be passed to Linux on boot up.
I realize that there's already the FDT and CONFIG_OF_CONTROL functionality and device trees sort of cover the passing to Linux part so maybe before handing it off, converting the relevant data into a device tree that Linux can already use/parse would work.
Devicetree bindings for describing display timings info exist in recent Linux kernel versions (since v3.9 I think) and are documented under Documentation/devicetree/bindings/video/display-timing.txt. In Linux there are also DT helpers to parse display timings nodes and read the timing values into fb_videomode structure (of_get_display_timings, of_get_fb_videomode). Code for adding such display timings nodes to the device tree under U-Boot doesn't exist yet.
Is anyone working on something like this? Am I missing something that's already in place to accomplish this?
Maybe you can use "videomode" Variable and video_get_params().
Thanks,
Anatolij