]> git.kernelconcepts.de Git - karo-tx-uboot.git/commitdiff
FDT: fix handling of otg_mode DT fixup
authorLothar Waßmann <LW@KARO-electronics.de>
Thu, 20 Dec 2012 09:58:31 +0000 (10:58 +0100)
committerLothar Waßmann <LW@KARO-electronics.de>
Thu, 20 Dec 2012 09:58:31 +0000 (10:58 +0100)
board/karo/common/fdt.c
board/karo/common/karo.h
board/karo/tx28/tx28.c
board/karo/tx51/tx51.c
board/karo/tx53/tx53.c

index e641454928706cb85f020e61e0c6924eb8a699a5..76d1ba3575cfdf07f192b5ef33122380ccd218d7 100644 (file)
@@ -81,8 +81,33 @@ void karo_fdt_move_fdt(void)
 
 void karo_fdt_remove_node(void *blob, const char *node)
 {
-       debug("Removing node %s from DT\n", node);
-       fdt_del_node_and_alias(blob, node);
+       debug("Removing node '%s' from DT\n", node);
+       int off = fdt_path_offset(blob, node);
+       int ret;
+
+       if (off < 0) {
+               printf("Could not find node '%s': %d\n", node, off);
+       } else {
+               ret = fdt_del_node(blob, off);
+               if (ret)
+                       printf("Failed to remove node '%s': %d\n",
+                               node, ret);
+       }
+       karo_set_fdtsize(blob);
+}
+
+void karo_fdt_enable_node(void *blob, const char *node, int enable)
+{
+       int off = fdt_path_offset(blob, node);
+
+       debug("%sabling node '%s'\n", enable ? "En" : "Dis", node);
+       if (off < 0) {
+               printf("Could not find node '%s': %d\n", node, off);
+               return;
+       }
+       fdt_set_node_status(blob, off,
+                       enable ? FDT_STATUS_OKAY : FDT_STATUS_DISABLED, 0);
+
        karo_set_fdtsize(blob);
 }
 
@@ -149,21 +174,28 @@ void karo_fdt_fixup_touchpanel(void *blob)
        }
 }
 
-void karo_fdt_fixup_usb_otg(void *blob)
+void karo_fdt_fixup_usb_otg(void *blob, const char *compat, phys_addr_t offs)
 {
        const char *otg_mode = getenv("otg_mode");
-       int usbphy = 2;
+       int off;
 
-       if (otg_mode == NULL || strcmp(otg_mode, "host") != 0) {
-               karo_fdt_remove_node(blob, "usbh1");
-               usbphy--;
+       debug("OTG mode is '%s'\n", otg_mode ? otg_mode : "<UNSET>");
+
+       off = fdt_node_offset_by_compat_reg(blob, compat, offs);
+       if (off < 0) {
+               printf("Failed to find node %s@%08lx\n", compat, offs);
+               return;
        }
-       if (otg_mode == NULL || strcmp(otg_mode, "device") != 0) {
-               karo_fdt_remove_node(blob, "usbotg");
-               usbphy--;
+
+       if (!otg_mode || strcmp(otg_mode, "device") != 0) {
+               printf("Deleting property gadget-device-name from node %s@%08lx\n",
+                       compat, offs);
+               fdt_delprop(blob, off, "gadget-device-name");
        }
-       if (!usbphy) {
-               karo_fdt_remove_node(blob, "usbphy");
+       if (!otg_mode || strcmp(otg_mode, "host") != 0) {
+               printf("Deleting property host-device-name from node %s@%08lx\n",
+                       compat, offs);
+               fdt_delprop(blob, off, "host-device-name");
        }
        karo_set_fdtsize(blob);
 }
@@ -180,7 +212,7 @@ void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs,
        if (offset <= 0)
                return;
 
-       phandle = fdt_getprop(blob, offset, "transceiver-switch", NULL);
+       phandle = fdt_getprop(blob, offset, prop, NULL);
        if (phandle) {
                ph = fdt32_to_cpu(*phandle);
        }
index f724d148ffbce8346ae0c6054757b5981e633ad0..20f95ffeeb29f62fa27e811f966fd41619a74f95 100644 (file)
@@ -18,7 +18,7 @@
 void karo_fdt_remove_node(void *blob, const char *node);
 void karo_fdt_move_fdt(void);
 void karo_fdt_fixup_touchpanel(void *blob);
-void karo_fdt_fixup_usb_otg(void *blob);
+void karo_fdt_fixup_usb_otg(void *blob, const char *compat, phys_addr_t offs);
 void karo_fdt_del_prop(void *blob, const char *compat, phys_addr_t offs,
                const char *prop);
 void *karo_fdt_load_dtb(void);
index 2e7d47f45c3769a598dcf4ae550ff96017856297..3e81bc9ca741afabefa41e81f13ca0f0ab748bbc 100644 (file)
@@ -762,6 +762,6 @@ void ft_board_setup(void *blob, bd_t *bd)
        fdt_fixup_ethernet(blob);
 
        karo_fdt_fixup_touchpanel(blob);
-       karo_fdt_fixup_usb_otg(blob);
+       karo_fdt_fixup_usb_otg(blob, "fsl,imx28-usbphy", 0x8007c000);
 }
 #endif
index 671f555f311c1da0b8e44d8eef708af185e95539..180447a179e28b9ac270ae4c624ba5b52d0af0fa 100644 (file)
@@ -888,6 +888,6 @@ void ft_board_setup(void *blob, bd_t *bd)
        fdt_fixup_ethernet(blob);
 
        karo_fdt_fixup_touchpanel(blob);
-       karo_fdt_fixup_usb_otg(blob);
+       karo_fdt_fixup_usb_otg(blob, "fsl,imx-otg", 0x73f80000);
 }
 #endif
index 6d46ae2a083de5585aa697e2ba4f4dbf8a49b7d9..a3607deac163ac82b9cb6b303826fd87f4b739ee 100644 (file)
@@ -886,7 +886,7 @@ void ft_board_setup(void *blob, bd_t *bd)
        fdt_fixup_ethernet(blob);
 
        karo_fdt_fixup_touchpanel(blob);
-       karo_fdt_fixup_usb_otg(blob);
+       karo_fdt_fixup_usb_otg(blob, "fsl,imx-otg", 0x53f80000);
        tx53_fixup_flexcan(blob);
        tx53_fixup_rtc(blob);
 }