net: ti: cpsw: Move cpsw_phy_sel() to _probe()
authorFaiz Abbas <faiz_abbas@ti.com>
Mon, 18 Mar 2019 08:24:32 +0000 (13:54 +0530)
committerTom Rini <trini@konsulko.com>
Fri, 12 Apr 2019 12:05:52 +0000 (08:05 -0400)
cpsw_phy_sel() is a configuration step that should not be in
ofdata_to_platdata(). Add phy_sel_compat to the cpsw_platform_data
structure so that it is accessible in _probe. Then move the call of
cpsw_phy_sel() to _probe.

Signed-off-by: Faiz Abbas <faiz_abbas@ti.com>
drivers/net/ti/cpsw.c
include/cpsw.h

index f5fd02efe1af47b398f684e6e1c5b9577b0656c6..bd33d80ab4b0b42c1c6ff10645feeed970575637 100644 (file)
@@ -1048,16 +1048,6 @@ static void cpsw_eth_stop(struct udevice *dev)
        return _cpsw_halt(priv);
 }
 
-
-static int cpsw_eth_probe(struct udevice *dev)
-{
-       struct cpsw_priv *priv = dev_get_priv(dev);
-
-       priv->dev = dev;
-
-       return _cpsw_register(priv);
-}
-
 static const struct eth_ops cpsw_eth_ops = {
        .start          = cpsw_eth_start,
        .send           = cpsw_eth_send,
@@ -1188,13 +1178,25 @@ static void cpsw_phy_sel(struct cpsw_priv *priv, const char *compat,
                cpsw_gmii_sel_dra7xx(priv, phy_mode);
 }
 
+static int cpsw_eth_probe(struct udevice *dev)
+{
+       struct cpsw_priv *priv = dev_get_priv(dev);
+       struct eth_pdata *pdata = dev_get_platdata(dev);
+
+       priv->dev = dev;
+       /* Select phy interface in control module */
+       cpsw_phy_sel(priv, priv->data.phy_sel_compat,
+                    pdata->phy_interface);
+
+       return _cpsw_register(priv);
+}
+
 static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
 {
        struct eth_pdata *pdata = dev_get_platdata(dev);
        struct cpsw_priv *priv = dev_get_priv(dev);
        struct gpio_desc *mode_gpios;
        const char *phy_mode;
-       const char *phy_sel_compat = NULL;
        const void *fdt = gd->fdt_blob;
        int node = dev_of_offset(dev);
        int subnode;
@@ -1315,9 +1317,9 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
                                             NULL))
                                priv->data.rmii_clock_external = true;
 
-                       phy_sel_compat = fdt_getprop(fdt, subnode, "compatible",
-                                                    NULL);
-                       if (!phy_sel_compat) {
+                       priv->data.phy_sel_compat = fdt_getprop(fdt, subnode,
+                                                               "compatible", NULL);
+                       if (!priv->data.phy_sel_compat) {
                                pr_err("Not able to get gmii_sel compatible\n");
                                return -ENOENT;
                        }
@@ -1344,9 +1346,6 @@ static int cpsw_eth_ofdata_to_platdata(struct udevice *dev)
                return -EINVAL;
        }
 
-       /* Select phy interface in control module */
-       cpsw_phy_sel(priv, phy_sel_compat, pdata->phy_interface);
-
        return 0;
 }
 
index 9f8ce8850f51d1958596a76edf5f2c1c06fb3def..55db277e73d33f067fd2dc7854c4190acef7fa01 100644 (file)
@@ -50,6 +50,7 @@ struct cpsw_platform_data {
        u32     active_slave;
        bool    rmii_clock_external;
        u8      version;
+       const char *phy_sel_compat;
 };
 
 int cpsw_register(struct cpsw_platform_data *data);