- name = fdt_getprop(blob, off, "u-boot,panel-name",
- NULL);
- if (!name)
- return 0;
- pn = strdup(name);
- if (!pn)
- return -ENOMEM;
- debug("%s@%d: Updating 'compatible' property of '%s' from '%s' to '%s'\n",
- __func__, __LINE__, fdt_get_name(blob, panel_off, NULL),
- (char *)fdt_getprop(blob, panel_off, "compatible", NULL),
- pn);
-
- ret = fdt_setprop_string(blob, panel_off, "compatible",
- pn);
- if (ret)
- printf("Failed to set 'compatible' property of node '%s': %s\n",
- fdt_get_name(blob, panel_off, NULL),
- fdt_strerror(off));
- free(pn);
+ if (node < 0) {
+ printf("Warning: No '%s' subnode found in 'display-timings'\n",
+ name);
+ return -ENOENT;
+ }
+ if (fdt_node_check_compatible(blob, panel_off, "panel-dpi") == 0) {
+ int timing_node = fdt_subnode_offset(blob, panel_off,
+ "panel-timing");
+
+ if (timing_node < 0) {
+ printf("Warning: No 'panel-timing' subnode found\n");
+ return -ENOENT;
+ }
+ karo_fixup_panel_timing(blob, timing_node, node);
+ } else {
+ char *pn;
+
+ name = fdt_getprop(blob, off, "u-boot,panel-name",
+ NULL);
+ if (!name)
+ return 0;
+
+ pn = strdup(name);
+ if (!pn)
+ return -ENOMEM;
+ debug("%s@%d: Updating 'compatible' property of '%s' from '%s' to '%s'\n",
+ __func__, __LINE__, fdt_get_name(blob, panel_off, NULL),
+ (char *)fdt_getprop(blob, panel_off, "compatible", NULL),
+ pn);
+
+ ret = fdt_setprop_string(blob, panel_off, "compatible",
+ pn);
+ if (ret)
+ printf("Failed to set 'compatible' property of node '%s': %s\n",
+ fdt_get_name(blob, panel_off, NULL),
+ fdt_strerror(off));
+ free(pn);
+ }