FEC: Allow registering MII postconfiguration callback
authorMarek Vasut <marek.vasut@gmail.com>
Sun, 11 Sep 2011 18:05:36 +0000 (18:05 +0000)
committerAlbert ARIBAUD <albert.u.boot@aribaud.net>
Fri, 30 Sep 2011 20:01:02 +0000 (22:01 +0200)
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
drivers/net/fec_mxc.h
include/netdev.h

index 3c593aaaf50cf446c19e1e46fbc30c49c1419ee4..3aaec374ad29dc6d60c2b24832ee758c04c8e49a 100644 (file)
@@ -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;
+}
index e436c22fa32876d753b0dcb042355d9e79c296cb..1a203888bf16535e48c4e3a551d306c5abad2073 100644 (file)
@@ -277,6 +277,7 @@ struct fec_priv {
        void *base_ptr;
        int dev_id;
        int phy_id;
+       int (*mii_postcall)(int);
 };
 
 /**
index e979cbd32457beb07afbf8a756befd3f0a8bf311..480453e51d7394777f2a301ecc80023425262521 100644 (file)
@@ -186,4 +186,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_ */