Patchwork [U-Boot,08/11] FEC: Allow registering MII postconfiguration callback

login
register
mail settings
Submitter Marek Vasut
Date Sept. 8, 2011, 8:37 p.m.
Message ID <1315514242-18998-9-git-send-email-marek.vasut@gmail.com>
Download mbox | patch
Permalink /patch/113943/
State Accepted
Commit 2e5f44213fd55ca53c3751061e19b0c54857900b
Delegated to: Stefano Babic
Headers show

Comments

Marek Vasut - Sept. 8, 2011, 8:37 p.m.
Signed-off-by: Marek Vasut <marek.vasut@gmail.com>
Cc: Ben Warren <biggerbadderben@gmail.com>
Cc: Stefano Babic <sbabic@denx.de>
Cc: Wolfgang Denk <wd@denx.de>
Cc: Detlev Zundel <dzu@denx.de>
---
 drivers/net/fec_mxc.c |   14 +++++++++++++-
 drivers/net/fec_mxc.h |    1 +
 include/netdev.h      |    5 +++++
 3 files changed, 19 insertions(+), 1 deletions(-)

Patch

diff --git a/drivers/net/fec_mxc.c b/drivers/net/fec_mxc.c
index 44b7919..989e7b4 100644
--- a/drivers/net/fec_mxc.c
+++ b/drivers/net/fec_mxc.c
@@ -153,6 +153,7 @@  static int fec_miiphy_write(const char *dev, uint8_t phyAddr, uint8_t regAddr,
 static int miiphy_restart_aneg(struct eth_device *dev)
 {
 	struct fec_priv *fec = (struct fec_priv *)dev->priv;
+	int ret = 0;
 
 	/*
 	 * Wake up from sleep if necessary
@@ -173,7 +174,11 @@  static int miiphy_restart_aneg(struct eth_device *dev)
 			LPA_10HALF | PHY_ANLPAR_PSB_802_3);
 	miiphy_write(dev->name, fec->phy_id, MII_BMCR,
 			BMCR_ANENABLE | BMCR_ANRESTART);
-	return 0;
+
+	if (fec->mii_postcall)
+		ret = fec->mii_postcall(fec->phy_id);
+
+	return ret;
 }
 
 static int miiphy_wait_aneg(struct eth_device *dev)
@@ -786,3 +791,10 @@  int fecmxc_initialize_multi(bd_t *bd, int dev_id, int phy_id, uint32_t addr)
 
 	return lout;
 }
+
+int fecmxc_register_mii_postcall(struct eth_device *dev, int (*cb)(int))
+{
+	struct fec_priv *fec = (struct fec_priv *)dev->priv;
+	fec->mii_postcall = cb;
+	return 0;
+}
diff --git a/drivers/net/fec_mxc.h b/drivers/net/fec_mxc.h
index e436c22..1a20388 100644
--- a/drivers/net/fec_mxc.h
+++ b/drivers/net/fec_mxc.h
@@ -277,6 +277,7 @@  struct fec_priv {
 	void *base_ptr;
 	int dev_id;
 	int phy_id;
+	int (*mii_postcall)(int);
 };
 
 /**
diff --git a/include/netdev.h b/include/netdev.h
index 6e70341..1e7f5c1 100644
--- a/include/netdev.h
+++ b/include/netdev.h
@@ -184,4 +184,9 @@  struct mv88e61xx_config {
 int mv88e61xx_switch_initialize(struct mv88e61xx_config *swconfig);
 #endif /* CONFIG_MV88E61XX_SWITCH */
 
+/*
+ * Allow FEC to fine-tune MII configuration on boards which require this.
+ */
+int fecmxc_register_mii_postcall(struct eth_device *dev, int (*cb)(int));
+
 #endif /* _NETDEV_H_ */