@@ -12,6 +12,8 @@
#include <linux/irq.h>
#include <linux/of_irq.h>
#include <linux/of_platform.h>
+#include <linux/delay.h>
+#include <linux/phy.h>
#include <asm/mach/arch.h>
#include <asm/mach/time.h>
#include <mach/common.h>
@@ -32,8 +34,27 @@ static const struct of_dev_auxdata imx27_auxdata_lookup[] __initconst = {
{ /* sentinel */ }
};
+int apf27_lan8700_wakeup(struct phy_device *phydev)
+{
+ int rc = phy_read(phydev, MII_DCOUNTER);
+
+ phy_write(phydev, MII_DCOUNTER, rc | 0xE0);
+ phy_write(phydev, MII_BMCR, BMCR_RESET);
+ udelay(1000);
+
+ return 0;
+}
+
+static void __init apf27_init(void)
+{
+ phy_register_fixup_for_id("imx27-fec.0-1:1f", apf27_lan8700_wakeup);
+}
+
static void __init imx27_dt_init(void)
{
+ if (of_machine_is_compatible("armadeus,imx27-apf27"))
+ apf27_init();
+
of_platform_populate(NULL, of_default_bus_match_table,
imx27_auxdata_lookup, NULL);
}
At startup the Ethernet PHY is in power down mode, so we need to force the "all capable" mode to activate it. Signed-off-by: Philippe Reynes <tremyfr@yahoo.fr> --- arch/arm/mach-imx/imx27-dt.c | 21 +++++++++++++++++++++ 1 files changed, 21 insertions(+), 0 deletions(-)