Skip to contentSkip to conversation

fdt_support: support adding EDID property to FDT display nodes

PATCH Superseded Anatolij Gustschin 4 participants 12 messages Aug 16, 2010 – Oct 12, 2010

lore
Share & tools
lore
#0 lore raw

PATCH 1/2 fdt_support: support adding EDID property to FDT display nodes

Boards can pass display timing info for drivers using EDID block. Provide common function to add board specific EDID data to the device tree. Subsequent patch makes use of this functionality.

---
 common/fdt_support.c  |   29 +++++++++++++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 30 insertions(+), 0 deletions(-)
common/fdt_support.c +29 -0
index 33336be..13c8882 100644
@@ -1171,3 +1171,32 @@ int fdt_alloc_phandle(void *blob)
 
 	return phandle + 1;
 }
+
+#if defined(CONFIG_VIDEO)
+int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)
+{
+	int noff;
+	int ret;
+
+	noff = fdt_node_offset_by_compatible(blob, -1, compat);
+	if (noff != -FDT_ERR_NOTFOUND) {
+		debug("%s: %s\n", fdt_get_name(blob, noff, 0), compat);
+add_edid:
+		ret = fdt_setprop(blob, noff, "edid", edid_buf, 128);
+		if (ret == -FDT_ERR_NOSPACE) {
+			ret = fdt_increase_size(blob, 512);
+			if (!ret)
+				goto add_edid;
+			else
+				goto err_size;
+		} else if (ret < 0) {
+			printf("Can't add property: %s\n", fdt_strerror(ret));
+			return ret;
+		}
+	}
+	return 0;
+err_size:
+	printf("Can't increase blob size: %s\n", fdt_strerror(ret));
+	return ret;
+}
+#endif
include/fdt_support.h +1 -0
index 871ef45..b2a7a0c 100644
@@ -87,6 +87,7 @@ u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);
 int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 					phys_addr_t compat_off);
 int fdt_alloc_phandle(void *blob);
+int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
 #endif /* ifndef __FDT_SUPPORT_H */
Signature · 1 line
1.7.0.4
#1 lore raw

PATCH 2/2 pdm360ng: add EDID property to FDT display node

PDM360NG board uses this functionality to pass display timing info to the Linux Framebuffer driver.

---
 board/pdm360ng/pdm360ng.c |   24 ++++++++++++++++++++++++
 1 files changed, 24 insertions(+), 0 deletions(-)
board/pdm360ng/pdm360ng.c +24 -0
index e3abeb8..06e7fde 100644
@@ -518,6 +518,27 @@ struct node_info nodes[] = {
 };
 #endif
 
+#if defined(CONFIG_VIDEO)
+static unsigned char edid_buf[128] = {
+	0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+	0x42, 0xC9, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00,
+	0x0A, 0x0C, 0x01, 0x03, 0x80, 0x98, 0x5B, 0x78,
+	0xCA, 0x7E, 0x50, 0xA0, 0x58, 0x4E, 0x96, 0x25,
+	0x1E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C,
+	0x20, 0x00, 0x31, 0xE0, 0x2D, 0x10, 0x2A, 0x80,
+	0x12, 0x08, 0x30, 0xE4, 0x10, 0x00, 0x00, 0x18,
+	0x00, 0x00, 0x00, 0xFD, 0x00, 0x38, 0x3C, 0x1F,
+	0x3C, 0x04, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
+	0x20, 0x20, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x50,
+	0x4D, 0x30, 0x37, 0x30, 0x57, 0x4C, 0x33, 0x0A,
+	0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0xFF,
+	0x00, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x00, 0xD4,
+};
+#endif
+
 void ft_board_setup(void *blob, bd_t *bd)
 {
 	u32 val[8];
@@ -528,6 +549,9 @@ void ft_board_setup(void *blob, bd_t *bd)
 #ifdef CONFIG_FDT_FIXUP_PARTITIONS
 	fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
 #endif
+#if defined(CONFIG_VIDEO)
+	fdt_add_edid(blob, "fsl,mpc5121-diu", edid_buf);
+#endif
 
 	/* Fixup NOR FLASH mapping */
 	val[i++] = 0;				/* chip select number */
Signature · 1 line
1.7.0.4
#2 lore raw

PATCH 2/2 pdm360ng: add EDID property to FDT display node

Dear Anatolij Gustschin,

Quoted 2 lines · In message <[email protected]> you wrote:

PDM360NG board uses this functionality to pass display timing info to the Linux Framebuffer driver.

thanks for these patches.

I have one (probably stupid) question:

Quoted 8 lines
board/pdm360ng/pdm360ng.c +8 -0
+static unsigned char edid_buf[128] = {
+	0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+	0x42, 0xC9, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00,
+	0x0A, 0x0C, 0x01, 0x03, 0x80, 0x98, 0x5B, 0x78,
+	0xCA, 0x7E, 0x50, 0xA0, 0x58, 0x4E, 0x96, 0x25,
+	0x1E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C,

board/pdm360ng/pdm360ng.c struct node_info nodes[] = { · line 539

Quoted 10 lines
board/pdm360ng/pdm360ng.c +10 -0
+	0x20, 0x00, 0x31, 0xE0, 0x2D, 0x10, 0x2A, 0x80,
+	0x12, 0x08, 0x30, 0xE4, 0x10, 0x00, 0x00, 0x18,
+	0x00, 0x00, 0x00, 0xFD, 0x00, 0x38, 0x3C, 0x1F,
+	0x3C, 0x04, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
+	0x20, 0x20, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x50,
+	0x4D, 0x30, 0x37, 0x30, 0x57, 0x4C, 0x33, 0x0A,
+	0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0xFF,
+	0x00, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x00, 0xD4,
+};

Is there a way to make these magic numbers readbale for a mere human?

How do you generate these?

Best regards,

Wolfgang Denk

Signature · 5 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
Q:  What's a light-year?
A:  One-third less calories than a regular year.
#3 lore raw

PATCH 2/2 pdm360ng: add EDID property to FDT display node

Hello Wolfgang,

On Mon, 16 Aug 2010 16:02:14 +0200
Wolfgang Denk <[email protected]> wrote:
...

Quoted 14 lines

I have one (probably stupid) question:

Quoted 12 lines
board/pdm360ng/pdm360ng.c +12 -0
+static unsigned char edid_buf[128] = {
+	0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+	0x42, 0xC9, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00,
+	0x0A, 0x0C, 0x01, 0x03, 0x80, 0x98, 0x5B, 0x78,
+	0xCA, 0x7E, 0x50, 0xA0, 0x58, 0x4E, 0x96, 0x25,
+	0x1E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C,
+	0x20, 0x00, 0x31, 0xE0, 0x2D, 0x10, 0x2A, 0x80,
+	0x12, 0x08, 0x30, 0xE4, 0x10, 0x00, 0x00, 0x18,
+	0x00, 0x00, 0x00, 0xFD, 0x00, 0x38, 0x3C, 0x1F,
+	0x3C, 0x04, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
Quoted 8 lines

board/pdm360ng/pdm360ng.c struct node_info nodes[] = { · line 539

Quoted 6 lines
board/pdm360ng/pdm360ng.c +6 -0
+	0x20, 0x20, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x50,
+	0x4D, 0x30, 0x37, 0x30, 0x57, 0x4C, 0x33, 0x0A,
+	0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0xFF,
+	0x00, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x00, 0xD4,
+};

Is there a way to make these magic numbers readbale for a mere human?

The numbers encode some strings (manufacturer, date, display name, etc.) and display parameter numbers. I already thought about the way how to easily generate the structure. Using some macros doesn't make sense, I think. Better would be to describe the display in a file and write a tool that generates the edid data structure from this description.

Quoted 1 line

How do you generate these?

I generated the block using Phoenix EDID Designer 1.3 (a tool for Windows). This creates a text file like:

EDID BYTES:
0x 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    ------------------------------------------------
00 | 00 FF FF FF FF FF FF 00 42 C9 34 12 01 00 00 00
10 | 0A 0C 01 03 80 98 5B 78 CA 7E 50 A0 58 4E 96 25
20 | 1E 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
30 | 01 01 01 01 01 01 80 0C 20 40 31 E0 26 10 18 80
40 | 36 00 30 E4 10 00 00 18 00 00 00 FD 00 38 3C 1F
50 | 3C 04 0A 20 20 20 20 20 20 20 00 00 00 FF 00 50
60 | 4D 30 37 30 57 4C 33 0A 0A 0A 0A 0A 00 00 00 FF
70 | 00 41 30 30 30 30 30 30 30 30 30 30 30 31 00 91

Then I manualy converted the needed bytes to a char array.

Best regards,
Anatolij

--
DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: +49-8142-66989-0 Fax: +49-8142-66989-80 Email: office at denx.de

#4 lore raw

PATCH 2/2 pdm360ng: add EDID property to FDT display node

Hi Anatolij,

Quoted 28 lines

Hello Wolfgang,

On Mon, 16 Aug 2010 16:02:14 +0200
Wolfgang Denk <[email protected]> wrote:
...

Quoted 14 lines

I have one (probably stupid) question:

Quoted 12 lines
board/pdm360ng/pdm360ng.c +12 -0
+static unsigned char edid_buf[128] = {
+	0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+	0x42, 0xC9, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00,
+	0x0A, 0x0C, 0x01, 0x03, 0x80, 0x98, 0x5B, 0x78,
+	0xCA, 0x7E, 0x50, 0xA0, 0x58, 0x4E, 0x96, 0x25,
+	0x1E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C,
+	0x20, 0x00, 0x31, 0xE0, 0x2D, 0x10, 0x2A, 0x80,
+	0x12, 0x08, 0x30, 0xE4, 0x10, 0x00, 0x00, 0x18,
+	0x00, 0x00, 0x00, 0xFD, 0x00, 0x38, 0x3C, 0x1F,
+	0x3C, 0x04, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
Quoted 8 lines

board/pdm360ng/pdm360ng.c struct node_info nodes[] = { · line 539

Quoted 6 lines
board/pdm360ng/pdm360ng.c +6 -0
+	0x20, 0x20, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x50,
+	0x4D, 0x30, 0x37, 0x30, 0x57, 0x4C, 0x33, 0x0A,
+	0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0xFF,
+	0x00, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x00, 0xD4,
+};

Is there a way to make these magic numbers readbale for a mere human?

Quoted 7 lines

The numbers encode some strings (manufacturer, date, display name, etc.) and display parameter numbers. I already thought about the way how to easily generate the structure. Using some macros doesn't make sense, I think. Better would be to describe the display in a file and write a tool that generates the edid data structure from this description.

I don't believe that currently we have a need for such a tool. When we can document "verbally" how to generate the data and if it is used often enough, then maybe someone comes up with a cleverer solution.

Quoted 17 lines
Quoted 1 line

How do you generate these?

I generated the block using Phoenix EDID Designer 1.3 (a tool for Windows). This creates a text file like:

EDID BYTES:
0x 00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F

    ------------------------------------------------
00 | 00 FF FF FF FF FF FF 00 42 C9 34 12 01 00 00 00
10 | 0A 0C 01 03 80 98 5B 78 CA 7E 50 A0 58 4E 96 25
20 | 1E 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
30 | 01 01 01 01 01 01 80 0C 20 40 31 E0 26 10 18 80
40 | 36 00 30 E4 10 00 00 18 00 00 00 FD 00 38 3C 1F
50 | 3C 04 0A 20 20 20 20 20 20 20 00 00 00 FF 00 50
60 | 4D 30 37 30 57 4C 33 0A 0A 0A 0A 0A 00 00 00 FF
70 | 00 41 30 30 30 30 30 30 30 30 30 30 30 31 00 91
Quoted 1 line

Then I manualy converted the needed bytes to a char array.

Then put this text as a "how-to comment" next to the data. This _is_ valuable informatino which we do not want to loose. Rather then putting it in a commit message, this will keep the comment intact once people begin copying the construct around.

Cheers
Detlev

Signature · 9 lines
... what [Microsoft] Exchange provides is *like* email, but it is *not* email.
Once you start trying to use it for real email, you find it's broken by design
in a large number of ways.  It makes no  sense for [a company] to require that
you use Exchange for Internet email, because that's not what Exchange does.
                      -- David Woodhouse <1281348164.12908.47.camel@localhost>
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
#5 lore raw

PATCH v2 2/2 pdm360ng: add EDID property to FDT display node

In reply to Anatolij Gustschin

PDM360NG board uses this functionality to pass display timing info to the Linux Framebuffer driver.

---
v2:
- added "howto comment" explaining the generation of EDID data block.

 board/pdm360ng/pdm360ng.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)
board/pdm360ng/pdm360ng.c +43 -0
index e3abeb8..d154517 100644
@@ -518,6 +518,46 @@ struct node_info nodes[] = {
 };
 #endif
 
+#if defined(CONFIG_VIDEO)
+/*
+ * EDID block has been generated using Phoenix EDID Designer 1.3.
+ * This tool creates a text file containing:
+ *
+ * EDID BYTES:
+ * 0x   00 01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F
+ *     ------------------------------------------------
+ * 00 | 00 FF FF FF FF FF FF 00 42 C9 34 12 01 00 00 00
+ * 10 | 0A 0C 01 03 80 98 5B 78 CA 7E 50 A0 58 4E 96 25
+ * 20 | 1E 50 54 00 00 00 01 01 01 01 01 01 01 01 01 01
+ * 30 | 01 01 01 01 01 01 80 0C 20 00 31 E0 2D 10 2A 80
+ * 40 | 12 08 30 E4 10 00 00 18 00 00 00 FD 00 38 3C 1F
+ * 50 | 3C 04 0A 20 20 20 20 20 20 20 00 00 00 FF 00 50
+ * 60 | 4D 30 37 30 57 4C 33 0A 0A 0A 0A 0A 00 00 00 FF
+ * 70 | 00 41 30 30 30 30 30 30 30 30 30 30 30 31 00 D4
+ *
+ * Then this data has been manually converted to the char
+ * array below.
+ */
+static unsigned char edid_buf[128] = {
+	0x00, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0x00,
+	0x42, 0xC9, 0x34, 0x12, 0x01, 0x00, 0x00, 0x00,
+	0x0A, 0x0C, 0x01, 0x03, 0x80, 0x98, 0x5B, 0x78,
+	0xCA, 0x7E, 0x50, 0xA0, 0x58, 0x4E, 0x96, 0x25,
+	0x1E, 0x50, 0x54, 0x00, 0x00, 0x00, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x01,
+	0x01, 0x01, 0x01, 0x01, 0x01, 0x01, 0x80, 0x0C,
+	0x20, 0x00, 0x31, 0xE0, 0x2D, 0x10, 0x2A, 0x80,
+	0x12, 0x08, 0x30, 0xE4, 0x10, 0x00, 0x00, 0x18,
+	0x00, 0x00, 0x00, 0xFD, 0x00, 0x38, 0x3C, 0x1F,
+	0x3C, 0x04, 0x0A, 0x20, 0x20, 0x20, 0x20, 0x20,
+	0x20, 0x20, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x50,
+	0x4D, 0x30, 0x37, 0x30, 0x57, 0x4C, 0x33, 0x0A,
+	0x0A, 0x0A, 0x0A, 0x0A, 0x00, 0x00, 0x00, 0xFF,
+	0x00, 0x41, 0x30, 0x30, 0x30, 0x30, 0x30, 0x30,
+	0x30, 0x30, 0x30, 0x30, 0x30, 0x31, 0x00, 0xD4,
+};
+#endif
+
 void ft_board_setup(void *blob, bd_t *bd)
 {
 	u32 val[8];
@@ -528,6 +568,9 @@ void ft_board_setup(void *blob, bd_t *bd)
 #ifdef CONFIG_FDT_FIXUP_PARTITIONS
 	fdt_fixup_mtdparts(blob, nodes, ARRAY_SIZE(nodes));
 #endif
+#if defined(CONFIG_VIDEO)
+	fdt_add_edid(blob, "fsl,mpc5121-diu", edid_buf);
+#endif
 
 	/* Fixup NOR FLASH mapping */
 	val[i++] = 0;				/* chip select number */
Signature · 1 line
1.7.0.4
#6 lore raw

PATCH v2 2/2 pdm360ng: add EDID property to FDT display node

Hi Anatolij,

Quoted 4 lines

PDM360NG board uses this functionality to pass display timing info to the Linux Framebuffer driver.

Thanks!
Detlev

Signature · 7 lines
Der erfahrene Politiker hantiert mit Werten wie mit Fahnen. Man tut so,
als ob klar sei,  was gerecht ist,  und unterstellt jedem,  der dar?ber
diskutieren will, er sei dagegen.        -- Norbert Bolz
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
#7 lore raw

PATCH v2 2/2 pdm360ng: add EDID property to FDT display node

In reply to Anatolij Gustschin

Dear Anatolij Gustschin,

Quoted 11 lines · In message <[email protected]> you wrote:

PDM360NG board uses this functionality to pass display timing info to the Linux Framebuffer driver.

---
v2:
- added "howto comment" explaining the generation of EDID data block.

 board/pdm360ng/pdm360ng.c |   43 +++++++++++++++++++++++++++++++++++++++++++
 1 files changed, 43 insertions(+), 0 deletions(-)

Applied, thanks.

Best regards,

Wolfgang Denk

Signature · 7 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I distrust all systematisers, and avoid them. The will  to  a  system
shows a lack of honesty.
- Friedrich Wilhelm Nietzsche _G?tzen-D?mmerung [The Twilight of  the
Idols]_ ``Maxims and Missiles'' no. 26
#8 lore raw

PATCH 1/2 fdt_support: support adding EDID property to FDT display nodes

In reply to Anatolij Gustschin

Hi Anatolij,

Quoted 4 lines

Boards can pass display timing info for drivers using EDID block. Provide common function to add board specific EDID data to the device tree. Subsequent patch makes use of this functionality.

You could mention that this is currently implemented on the Linux side by the fsl-diu-fb driver and it is documented there in Documentation/powerpc/dts-bindings/fsl/diu.txt.

Quoted 2 lines

Thanks
Detlev

Signature · 5 lines
<ESC>:!emacs %
--
DENX Software Engineering GmbH,      MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich,  Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-40 Fax: (+49)-8142-66989-80 Email: dzu at denx.de
#9 lore raw

PATCH v2 1/2 fdt_support: support adding EDID property to FDT display nodes

In reply to Anatolij Gustschin

Boards can pass display timing info for drivers using EDID block. Provide common function to add board specific EDID data to the device tree. Subsequent patch makes use of this functionality.

Detailed timing descriptor data from EDID is used for programming the display controller. This is currently implemented on the Linux side by the fsl-diu-fb frame buffer driver and it is documented there in Documentation/powerpc/dts-bindings/fsl/diu.txt.

---
v2:
- improve commit message as suggested by Detlev
- add Acked-by line

 common/fdt_support.c  |   29 +++++++++++++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 30 insertions(+), 0 deletions(-)
common/fdt_support.c +29 -0
index 33336be..13c8882 100644
@@ -1171,3 +1171,32 @@ int fdt_alloc_phandle(void *blob)
 
 	return phandle + 1;
 }
+
+#if defined(CONFIG_VIDEO)
+int fdt_add_edid(void *blob, const char *compat, unsigned char *edid_buf)
+{
+	int noff;
+	int ret;
+
+	noff = fdt_node_offset_by_compatible(blob, -1, compat);
+	if (noff != -FDT_ERR_NOTFOUND) {
+		debug("%s: %s\n", fdt_get_name(blob, noff, 0), compat);
+add_edid:
+		ret = fdt_setprop(blob, noff, "edid", edid_buf, 128);
+		if (ret == -FDT_ERR_NOSPACE) {
+			ret = fdt_increase_size(blob, 512);
+			if (!ret)
+				goto add_edid;
+			else
+				goto err_size;
+		} else if (ret < 0) {
+			printf("Can't add property: %s\n", fdt_strerror(ret));
+			return ret;
+		}
+	}
+	return 0;
+err_size:
+	printf("Can't increase blob size: %s\n", fdt_strerror(ret));
+	return ret;
+}
+#endif
include/fdt_support.h +1 -0
index 871ef45..b2a7a0c 100644
@@ -87,6 +87,7 @@ u64 fdt_translate_address(void *blob, int node_offset, const u32 *in_addr);
 int fdt_node_offset_by_compat_reg(void *blob, const char *compat,
 					phys_addr_t compat_off);
 int fdt_alloc_phandle(void *blob);
+int fdt_add_edid(void *blob, const char *compat, unsigned char *buf);
 
 #endif /* ifdef CONFIG_OF_LIBFDT */
 #endif /* ifndef __FDT_SUPPORT_H */
Signature · 1 line
1.7.0.4
#10 lore raw

PATCH v2 1/2 fdt_support: support adding EDID property to FDT display nodes

Dear Anatolij Gustschin,

Quoted 14 lines · In message <[email protected]> you wrote:

Boards can pass display timing info for drivers using EDID block. Provide common function to add board specific EDID data to the device tree. Subsequent patch makes use of this functionality.

Detailed timing descriptor data from EDID is used for programming the display controller. This is currently implemented on the Linux side by the fsl-diu-fb frame buffer driver and it is documented there in Documentation/powerpc/dts-bindings/fsl/diu.txt.

Quoted 8 lines

---
v2:
- improve commit message as suggested by Detlev
- add Acked-by line

 common/fdt_support.c  |   29 +++++++++++++++++++++++++++++
 include/fdt_support.h |    1 +
 2 files changed, 30 insertions(+), 0 deletions(-)

Applied.

Jerry, hope it's OK with you that I pulled this directly.

Best regards,

Wolfgang Denk

Signature · 4 lines
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
I still miss my ex-wife, but my aim is getting better.
#11 lore raw

PATCH v2 1/2 fdt_support: support adding EDID property to FDT display nodes

Quoted 3 lines · Wolfgang Denk

Dear Anatolij Gustschin,

In message<[email protected]> you wrote:

[snip]

Quoted 8 lines
Quoted 8 lines

---
v2:
- improve commit message as suggested by Detlev
- add Acked-by line

Quoted 8 lines
Quoted 3 lines
  common/fdt_support.c  |   29 +++++++++++++++++++++++++++++
  include/fdt_support.h |    1 +
  2 files changed, 30 insertions(+), 0 deletions(-)

Applied.

Jerry, hope it's OK with you that I pulled this directly.

Yes, thanks.

Quoted 2 lines

Best regards,
Wolfgang Denk

Best regards,
gvb