smc911x MII made available
authorHelmut Raiger <helmut.raiger@hale.at>
Wed, 29 Jun 2011 00:12:14 +0000 (00:12 +0000)
committerWolfgang Denk <wd@denx.de>
Wed, 7 Sep 2011 21:49:58 +0000 (23:49 +0200)
The driver already had the MII functions, but they have not been
registered using miiphy_register().

Signed-off-by: Helmut Raiger <helmut.raiger@hale.at>
drivers/net/smc911x.c

index aeafeba44cb22d6d07ac829a12914bfff722df6a..6cc236ce79d6290911d468b23f040c69a154ead6 100644 (file)
@@ -50,7 +50,7 @@ static void smc911x_handle_mac_address(struct eth_device *dev)
        printf(DRIVERNAME ": MAC %pM\n", m);
 }
 
-static int smc911x_miiphy_read(struct eth_device *dev,
+static int smc911x_eth_phy_read(struct eth_device *dev,
                                u8 phy, u8 reg, u16 *val)
 {
        while (smc911x_get_mac_csr(dev, MII_ACC) & MII_ACC_MII_BUSY)
@@ -67,7 +67,7 @@ static int smc911x_miiphy_read(struct eth_device *dev,
        return 0;
 }
 
-static int smc911x_miiphy_write(struct eth_device *dev,
+static int smc911x_eth_phy_write(struct eth_device *dev,
                                u8 phy, u8 reg, u16  val)
 {
        while (smc911x_get_mac_csr(dev, MII_ACC) & MII_ACC_MII_BUSY)
@@ -103,10 +103,10 @@ static void smc911x_phy_configure(struct eth_device *dev)
 
        smc911x_phy_reset(dev);
 
-       smc911x_miiphy_write(dev, 1, MII_BMCR, BMCR_RESET);
+       smc911x_eth_phy_write(dev, 1, MII_BMCR, BMCR_RESET);
        mdelay(1);
-       smc911x_miiphy_write(dev, 1, MII_ADVERTISE, 0x01e1);
-       smc911x_miiphy_write(dev, 1, MII_BMCR, BMCR_ANENABLE |
+       smc911x_eth_phy_write(dev, 1, MII_ADVERTISE, 0x01e1);
+       smc911x_eth_phy_write(dev, 1, MII_BMCR, BMCR_ANENABLE |
                                BMCR_ANRESTART);
 
        timeout = 5000;
@@ -115,7 +115,7 @@ static void smc911x_phy_configure(struct eth_device *dev)
                if ((timeout--) == 0)
                        goto err_out;
 
-               if (smc911x_miiphy_read(dev, 1, MII_BMSR, &status) != 0)
+               if (smc911x_eth_phy_read(dev, 1, MII_BMSR, &status) != 0)
                        goto err_out;
        } while (!(status & BMSR_LSTATUS));
 
@@ -235,6 +235,25 @@ static int smc911x_rx(struct eth_device *dev)
        return 0;
 }
 
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+/* wrapper for smc911x_eth_phy_read */
+static int smc911x_miiphy_read(char *devname, u8 phy, u8 reg, u16 *val)
+{
+       struct eth_device *dev = eth_get_dev_by_name(devname);
+       if (dev)
+               return smc911x_eth_phy_read(dev, phy, reg, val);
+       return -1;
+}
+/* wrapper for smc911x_eth_phy_write */
+static int smc911x_miiphy_write(char *devname, u8 phy, u8 reg, u16 val)
+{
+       struct eth_device *dev = eth_get_dev_by_name(devname);
+       if (dev)
+               return smc911x_eth_phy_write(dev, phy, reg, val);
+       return -1;
+}
+#endif
+
 int smc911x_initialize(u8 dev_num, int base_addr)
 {
        unsigned long addrl, addrh;
@@ -273,5 +292,10 @@ int smc911x_initialize(u8 dev_num, int base_addr)
        sprintf(dev->name, "%s-%hu", DRIVERNAME, dev_num);
 
        eth_register(dev);
+
+#if defined(CONFIG_MII) || defined(CONFIG_CMD_MII)
+       miiphy_register(dev->name, smc911x_miiphy_read, smc911x_miiphy_write);
+#endif
+
        return 1;
 }