net: dsa: Rename DSA probe function.
[cascardo/linux.git] / drivers / net / dsa / mv88e6060.c
index 0527f48..adb608c 100644 (file)
 
 static int reg_read(struct dsa_switch *ds, int addr, int reg)
 {
-       struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev);
+       struct mv88e6060_priv *priv = ds_to_priv(ds);
 
-       if (bus == NULL)
-               return -EINVAL;
-
-       return mdiobus_read_nested(bus, ds->pd->sw_addr + addr, reg);
+       return mdiobus_read_nested(priv->bus, priv->sw_addr + addr, reg);
 }
 
 #define REG_READ(addr, reg)                                    \
@@ -40,12 +37,9 @@ static int reg_read(struct dsa_switch *ds, int addr, int reg)
 
 static int reg_write(struct dsa_switch *ds, int addr, int reg, u16 val)
 {
-       struct mii_bus *bus = dsa_host_dev_to_mii_bus(ds->master_dev);
-
-       if (bus == NULL)
-               return -EINVAL;
+       struct mv88e6060_priv *priv = ds_to_priv(ds);
 
-       return mdiobus_write_nested(bus, ds->pd->sw_addr + addr, reg, val);
+       return mdiobus_write_nested(priv->bus, priv->sw_addr + addr, reg, val);
 }
 
 #define REG_WRITE(addr, reg, val)                              \
@@ -57,14 +51,10 @@ static int reg_write(struct dsa_switch *ds, int addr, int reg, u16 val)
                        return __ret;                           \
        })
 
-static char *mv88e6060_probe(struct device *host_dev, int sw_addr)
+static char *mv88e6060_get_name(struct mii_bus *bus, int sw_addr)
 {
-       struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev);
        int ret;
 
-       if (bus == NULL)
-               return NULL;
-
        ret = mdiobus_read(bus, sw_addr + REG_PORT(0), PORT_SWITCH_ID);
        if (ret >= 0) {
                if (ret == PORT_SWITCH_ID_6060)
@@ -79,6 +69,27 @@ static char *mv88e6060_probe(struct device *host_dev, int sw_addr)
        return NULL;
 }
 
+static char *mv88e6060_drv_probe(struct device *dsa_dev,
+                                struct device *host_dev,
+                                int sw_addr, void **_priv)
+{
+       struct mii_bus *bus = dsa_host_dev_to_mii_bus(host_dev);
+       struct mv88e6060_priv *priv;
+       char *name;
+
+       name = mv88e6060_get_name(bus, sw_addr);
+       if (name) {
+               priv = devm_kzalloc(dsa_dev, sizeof(*priv), GFP_KERNEL);
+               if (!priv)
+                       return NULL;
+               *_priv = priv;
+               priv->bus = bus;
+               priv->sw_addr = sw_addr;
+       }
+
+       return name;
+}
+
 static int mv88e6060_switch_reset(struct dsa_switch *ds)
 {
        int i;
@@ -174,8 +185,8 @@ static int mv88e6060_setup_port(struct dsa_switch *ds, int p)
 
 static int mv88e6060_setup(struct dsa_switch *ds)
 {
-       int i;
        int ret;
+       int i;
 
        ret = mv88e6060_switch_reset(ds);
        if (ret < 0)
@@ -238,7 +249,7 @@ mv88e6060_phy_write(struct dsa_switch *ds, int port, int regnum, u16 val)
 
 static struct dsa_switch_driver mv88e6060_switch_driver = {
        .tag_protocol   = DSA_TAG_PROTO_TRAILER,
-       .probe          = mv88e6060_probe,
+       .probe          = mv88e6060_drv_probe,
        .setup          = mv88e6060_setup,
        .set_addr       = mv88e6060_set_addr,
        .phy_read       = mv88e6060_phy_read,