From 480d4df984badc22e8ea446f0bd5fbff2807819a Mon Sep 17 00:00:00 2001 From: =?utf8?q?Lothar=20Wa=C3=9Fmann?= Date: Tue, 23 Jul 2013 14:00:16 +0200 Subject: [PATCH] karo: fdt: fix handling of multiple panel-names in karo_fdt_update_fb_mode() --- board/karo/common/fdt.c | 29 ++++++++++++++++++----------- 1 file changed, 18 insertions(+), 11 deletions(-) diff --git a/board/karo/common/fdt.c b/board/karo/common/fdt.c index 7a5ebd9632..2285f3a2a3 100644 --- a/board/karo/common/fdt.c +++ b/board/karo/common/fdt.c @@ -424,9 +424,10 @@ int karo_fdt_update_fb_mode(void *blob, const char *name) printf("Could not find node '%s' in FDT: %d\n", subnode, off); } do { - const char *n; - int d = 1; + const char *n, *endp; + int len, d = 1; int node = fdt_next_node(blob, off, &d); + int do_del; if (d > 2) { printf("Skipping node @ %04x %s depth %d\n", node, fdt_get_name(blob, node, NULL), d); @@ -436,22 +437,28 @@ int karo_fdt_update_fb_mode(void *blob, const char *name) if (node < 0 || d < 1) break; - n = fdt_getprop(blob, node, "panel-name", NULL); + n = fdt_getprop(blob, node, "panel-name", &len); if (!n) { printf("Missing 'panel-name' property in node '%s'\n", fdt_get_name(blob, node, NULL)); continue; } - debug("Checking panel-name '%s'\n", n); - if (strcasecmp(n, name) == 0) { - debug("Keeping node %s @ %04x\n", + do_del = 1; + for (endp = n + len; n < endp; n += strlen(n) + 1) { + debug("Checking panel-name '%s'\n", n); + if (strcasecmp(n, name) == 0) { + debug("Keeping node %s @ %04x\n", + fdt_get_name(blob, node, NULL), node); + off = node; + do_del = 0; + break; + } + } + if (do_del) { + debug("Deleting node %s @ %04x\n", fdt_get_name(blob, node, NULL), node); - off = node; - continue; + fdt_del_node(blob, node); } - debug("Deleting node %s @ %04x\n", - fdt_get_name(blob, node, NULL), node); - fdt_del_node(blob, node); } while (off > 0); -- 2.39.2