[U-Boot] [PATCH] edid: add function to convert edid to fb_videomode

There may be some custom boards in the field which have an seperate eeprom chip to store edid informations in it. To make use of those edid information in the board code this patch add a function to convert edid to fb_videomode.
Signed-off-by: Christian Gmeiner christian.gmeiner@gmail.com --- common/edid.c | 29 +++++++++++++++++++++++++++++ include/edid.h | 3 +++ 2 files changed, 32 insertions(+)
diff --git a/common/edid.c b/common/edid.c index e66108f..8841c25 100644 --- a/common/edid.c +++ b/common/edid.c @@ -12,6 +12,7 @@
#include <common.h> #include <edid.h> +#include <linux/fb.h> #include <linux/ctype.h> #include <linux/string.h>
@@ -288,3 +289,31 @@ void edid_print_info(struct edid1_info *edid_info) if (!have_timing) printf("\tNone\n"); } + +void edid_to_fb_videomode(struct edid1_info *edid, struct fb_videomode *mode) +{ + struct edid_monitor_descriptor *monitor = &edid->monitor_details.descriptor[0]; + unsigned char *bytes = (unsigned char *)monitor; + struct edid_detailed_timing *timing = (struct edid_detailed_timing *)monitor; + + uint32_t pixclock = EDID_DETAILED_TIMING_PIXEL_CLOCK(*timing); + uint32_t h_blanking = EDID_DETAILED_TIMING_HORIZONTAL_BLANKING(*timing); + uint32_t h_active = EDID_DETAILED_TIMING_HORIZONTAL_ACTIVE(*timing); + uint32_t h_sync_offset = EDID_DETAILED_TIMING_HSYNC_OFFSET(*timing); + uint32_t h_sync_width = EDID_DETAILED_TIMING_HSYNC_PULSE_WIDTH(*timing); + uint32_t v_blanking = EDID_DETAILED_TIMING_VERTICAL_BLANKING(*timing); + uint32_t v_active = EDID_DETAILED_TIMING_VERTICAL_ACTIVE(*timing); + uint32_t v_sync_offset = EDID_DETAILED_TIMING_VSYNC_OFFSET(*timing); + uint32_t v_sync_width = EDID_DETAILED_TIMING_VSYNC_PULSE_WIDTH(*timing); + + mode->name = "EDID"; + mode->pixclock = pixclock; + mode->yres = v_active; + mode->xres = h_active; + mode->left_margin = h_blanking - h_sync_offset - h_sync_width; + mode->right_margin = h_sync_offset; + mode->upper_margin = v_blanking - v_sync_offset - v_sync_width; + mode->lower_margin = v_sync_offset; + mode->hsync_len = h_sync_width; + mode->vsync_len = v_sync_width; +} diff --git a/include/edid.h b/include/edid.h index 480a773..4423062 100644 --- a/include/edid.h +++ b/include/edid.h @@ -233,6 +233,9 @@ struct edid1_info { */ void edid_print_info(struct edid1_info *edid_info);
+struct fb_videomode; +void edid_to_fb_videomode(struct edid1_info *edid, struct fb_videomode *mode); + /** * Check the EDID info. *

Dear Christian Gmeiner,
In message 39679-8461-1-git-send-email-christian.gmeiner@gmail.com you wrote:
There may be some custom boards in the field which have an seperate eeprom chip to store edid informations in it.
Also some boards may pass EDIT information in the device tree.
To make use of those edid information in the board code this patch add a function to convert edid to fb_videomode.
Allthough this function may be useful, there is no user for this new function in current mainline code, and we do not like adding dead code like this.
Please resubmit as part of a patch series that actually uses this code.
Thanks.
Best regards,
Wolfgang Denk

2014/1/4 Wolfgang Denk wd@denx.de:
Dear Christian Gmeiner,
In message 39679-8461-1-git-send-email-christian.gmeiner@gmail.com you wrote:
There may be some custom boards in the field which have an seperate eeprom chip to store edid informations in it.
Also some boards may pass EDIT information in the device tree.
The linux imx-drm driver does needs a display-timing node.
To make use of those edid information in the board code this patch add a function to convert edid to fb_videomode.
Allthough this function may be useful, there is no user for this new function in current mainline code, and we do not like adding dead code like this.
Please resubmit as part of a patch series that actually uses this code.
It is really time to submit the whole board support code our imx6 based board series. I am preparing it and will send it out in the next days.
greets -- Christian Gmeiner, MSc

On Thu, Jan 01, 1970 at 11:01 +0000, Christian Gmeiner wrote:
[ ... ]
Please check you system's clock, it appears to be off. Your message had this timestamp:
Date: Thu, 1 Jan 1970 11:01:19 +0000
Can't tell what git would make of it when applying the patch.
virtually yours Gerhard Sittig
participants (3)
-
Christian Gmeiner
-
Gerhard Sittig
-
Wolfgang Denk