|
@@ -1560,3 +1560,32 @@ int fdt_setup_simplefb_node(void *fdt, int node, u64 base_address, u32 width,
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+
|
|
|
+/*
|
|
|
+ * Update native-mode in display-timings from display environment variable.
|
|
|
+ * The node to update are specified by path.
|
|
|
+ */
|
|
|
+int fdt_fixup_display(void *blob, const char *path, const char *display)
|
|
|
+{
|
|
|
+ int off, toff;
|
|
|
+
|
|
|
+ if (!display || !path)
|
|
|
+ return -FDT_ERR_NOTFOUND;
|
|
|
+
|
|
|
+ toff = fdt_path_offset(blob, path);
|
|
|
+ if (toff >= 0)
|
|
|
+ toff = fdt_subnode_offset(blob, toff, "display-timings");
|
|
|
+ if (toff < 0)
|
|
|
+ return toff;
|
|
|
+
|
|
|
+ for (off = fdt_first_subnode(blob, toff);
|
|
|
+ off >= 0;
|
|
|
+ off = fdt_next_subnode(blob, off)) {
|
|
|
+ uint32_t h = fdt_get_phandle(blob, off);
|
|
|
+ debug("%s:0x%x\n", fdt_get_name(blob, off, NULL),
|
|
|
+ fdt32_to_cpu(h));
|
|
|
+ if (strcasecmp(fdt_get_name(blob, off, NULL), display) == 0)
|
|
|
+ return fdt_setprop_u32(blob, toff, "native-mode", h);
|
|
|
+ }
|
|
|
+ return toff;
|
|
|
+}
|