powerpc/mpc8xxx: Fix USB device-tree fixup
authorramneek mehresh <ramneek.mehresh@freescale.com>
Tue, 18 Sep 2012 22:28:51 +0000 (22:28 +0000)
committerAndy Fleming <afleming@freescale.com>
Mon, 22 Oct 2012 19:31:12 +0000 (14:31 -0500)
Fix usb device-tree fixup:
- wrong modification of dr_mode and phy_type when
  "usb1" is not mentioned inside hwconfig string;
   now allows hwconfig strings like:
"usb2:dr_mode=host,phy_type=ulpi"
- add warning message for using usb_dr_mode
  and usb_phy_type env variables (if either is used)

Signed-off-by: Ramneek Mehresh <ramneek.mehresh@freescale.com>
Signed-off-by: Andy Fleming <afleming@freescale.com>
arch/powerpc/cpu/mpc8xxx/fdt.c

index 32ab0509622ee811254c7ae860dfc6cbc1a9506e..68db8e2448a4c6bfb7a581607ae15d486175a570 100644 (file)
@@ -139,6 +139,8 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
        const char *phys[] = { "ulpi", "utmi" };
        const char *mode = NULL;
        const char *phy_type = NULL;
+       const char *dr_mode_type = NULL;
+       const char *dr_phy_type = NULL;
        char usb1_defined = 0;
        int usb_mode_off = -1;
        int usb_phy_off = -1;
@@ -156,6 +158,7 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                                        break;
                                }
                        }
+
                        for (j = 0; j < ARRAY_SIZE(phys); j++) {
                                if (hwconfig_subarg_cmp(str, "phy_type",
                                                phys[j])) {
@@ -163,31 +166,46 @@ void fdt_fixup_dr_usb(void *blob, bd_t *bd)
                                        break;
                                }
                        }
-                       if (mode_idx >= 0) {
-                               usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
-                                       modes[mode_idx], NULL, usb_mode_off);
-                               if (usb_mode_off < 0)
-                                       return;
-                       }
-                       if (phy_idx >= 0) {
-                               usb_phy_off = fdt_fixup_usb_mode_phy_type(blob,
-                                       NULL, phys[phy_idx], usb_phy_off);
-                               if (usb_phy_off < 0)
-                                       return;
-                       }
+
+                       dr_mode_type = modes[mode_idx];
+                       dr_phy_type = phys[phy_idx];
+
+                       /* use usb_dr_mode and usb_phy_type if
+                          usb1_defined = 0; these variables are to
+                          be deprecated */
                        if (!strcmp(str, "usb1"))
                                usb1_defined = 1;
-                       if (mode_idx < 0 && phy_idx < 0)
+
+                       if (mode_idx < 0 && phy_idx < 0) {
                                printf("WARNING: invalid phy or mode\n");
+                               return;
+                       }
                }
+
+               usb_mode_off = fdt_fixup_usb_mode_phy_type(blob,
+                       dr_mode_type, NULL, usb_mode_off);
+
+               if (usb_mode_off < 0)
+                       return;
+
+               usb_phy_off = fdt_fixup_usb_mode_phy_type(blob,
+                       NULL, dr_phy_type, usb_phy_off);
+
+               if (usb_phy_off < 0)
+                       return;
        }
+
        if (!usb1_defined) {
                int usb_off = -1;
                mode = getenv("usb_dr_mode");
                phy_type = getenv("usb_phy_type");
-               if (!mode && !phy_type)
-                       return;
-               fdt_fixup_usb_mode_phy_type(blob, mode, phy_type, usb_off);
+               if (mode || phy_type) {
+                       printf("WARNING: usb_dr_mode and usb_phy_type "
+                               "are to be deprecated soon. Use "
+                               "hwconfig to set these values instead!!\n");
+                       fdt_fixup_usb_mode_phy_type(blob, mode,
+                               phy_type, usb_off);
+               }
        }
 }
 #endif /* defined(CONFIG_HAS_FSL_DR_USB) || defined(CONFIG_HAS_FSL_MPH_USB) */