Merge tag 'mfd-3.5-1' of git://git.kernel.org/pub/scm/linux/kernel/git/sameo/mfd-2.6
[deliverable/linux.git] / drivers / usb / host / fsl-mph-dr-of.c
index ab333ac6071d65458ebef236642f0064ba46c4d6..22ff6b3a676f40f705d5530b0fc526a4ccae70a2 100644 (file)
@@ -119,6 +119,39 @@ error:
 
 static const struct of_device_id fsl_usb2_mph_dr_of_match[];
 
+static int usb_get_ver_info(struct device_node *np)
+{
+       int ver = -1;
+
+       /*
+        * returns 1 for usb controller version 1.6
+        * returns 2 for usb controller version 2.2
+        * returns 0 otherwise
+        */
+       if (of_device_is_compatible(np, "fsl-usb2-dr")) {
+               if (of_device_is_compatible(np, "fsl-usb2-dr-v1.6"))
+                       ver = FSL_USB_VER_1_6;
+               else if (of_device_is_compatible(np, "fsl-usb2-dr-v2.2"))
+                       ver = FSL_USB_VER_2_2;
+               else /* for previous controller versions */
+                       ver = FSL_USB_VER_OLD;
+
+               if (ver > -1)
+                       return ver;
+       }
+
+       if (of_device_is_compatible(np, "fsl-usb2-mph")) {
+               if (of_device_is_compatible(np, "fsl-usb2-mph-v1.6"))
+                       ver = FSL_USB_VER_1_6;
+               else if (of_device_is_compatible(np, "fsl-usb2-mph-v2.2"))
+                       ver = FSL_USB_VER_2_2;
+               else /* for previous controller versions */
+                       ver = FSL_USB_VER_OLD;
+       }
+
+       return ver;
+}
+
 static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
 {
        struct device_node *np = ofdev->dev.of_node;
@@ -166,6 +199,14 @@ static int __devinit fsl_usb2_mph_dr_of_probe(struct platform_device *ofdev)
 
        prop = of_get_property(np, "phy_type", NULL);
        pdata->phy_mode = determine_usb_phy(prop);
+       pdata->controller_ver = usb_get_ver_info(np);
+
+       if (pdata->have_sysif_regs) {
+               if (pdata->controller_ver < 0) {
+                       dev_warn(&ofdev->dev, "Could not get controller version\n");
+                       return -ENODEV;
+               }
+       }
 
        for (i = 0; i < ARRAY_SIZE(dev_data->drivers); i++) {
                if (!dev_data->drivers[i])
This page took 0.038347 seconds and 5 git commands to generate.