net: fec: add phy-reset-duration for device tree probe
authorShawn Guo <shawn.guo@linaro.org>
Wed, 27 Jun 2012 03:45:24 +0000 (03:45 +0000)
committerDavid S. Miller <davem@davemloft.net>
Thu, 28 Jun 2012 04:22:06 +0000 (21:22 -0700)
Different boards may require different phy reset duration.  Add property
phy-reset-duration for device tree probe, so that the boards that need
a longer reset duration can specify it in their device tree.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Signed-off-by: David S. Miller <davem@davemloft.net>
Documentation/devicetree/bindings/net/fsl-fec.txt
drivers/net/ethernet/freescale/fec.c

index 0428920aacc784ac343e6c54e41b3b938beee361..f7a2fefc8ef17e216f6f704936f3e26f482bb4da 100644 (file)
@@ -11,6 +11,10 @@ Required properties:
 Optional properties:
 - local-mac-address : 6 bytes, mac address
 - phy-reset-gpios : Should specify the gpio for phy reset
+- phy-reset-duration : Reset duration in milliseconds.  Should present
+  only if property "phy-reset-gpios" is available.  Missing the property
+  will have the duration be 1 millisecond.  Numbers greater than 1000 are
+  invalid and 1 millisecond will be used instead.
 
 Example:
 
index f174070646f507df6f34e90042cf98836eb21759..dafd797a6069de385cc7d1aa0b92ee0b18be641b 100644 (file)
@@ -1507,11 +1507,17 @@ static int __devinit fec_get_phy_mode_dt(struct platform_device *pdev)
 static void __devinit fec_reset_phy(struct platform_device *pdev)
 {
        int err, phy_reset;
+       int msec = 1;
        struct device_node *np = pdev->dev.of_node;
 
        if (!np)
                return;
 
+       of_property_read_u32(np, "phy-reset-duration", &msec);
+       /* A sane reset duration should not be longer than 1s */
+       if (msec > 1000)
+               msec = 1;
+
        phy_reset = of_get_named_gpio(np, "phy-reset-gpios", 0);
        err = devm_gpio_request_one(&pdev->dev, phy_reset,
                                    GPIOF_OUT_INIT_LOW, "phy-reset");
@@ -1519,7 +1525,7 @@ static void __devinit fec_reset_phy(struct platform_device *pdev)
                pr_debug("FEC: failed to get gpio phy-reset: %d\n", err);
                return;
        }
-       msleep(1);
+       msleep(msec);
        gpio_set_value(phy_reset, 1);
 }
 #else /* CONFIG_OF */