Move the reset gpio dt parse and request to stmmac_mdio_register(),
thus makes the mdio code straightforward.

This patch also replace stack var mdio_bus_data with data to simplify
the code.

Signed-off-by: Jisheng Zhang <jisheng.zh...@synaptics.com>
---
Since v1:
 - rebase on the latest net-next tree

 .../net/ethernet/stmicro/stmmac/stmmac_mdio.c | 58 ++++++++-----------
 1 file changed, 25 insertions(+), 33 deletions(-)

diff --git a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c 
b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
index 093a223fe408..7d1562ec1149 100644
--- a/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
+++ b/drivers/net/ethernet/stmicro/stmmac/stmmac_mdio.c
@@ -250,28 +250,7 @@ int stmmac_mdio_reset(struct mii_bus *bus)
        struct stmmac_mdio_bus_data *data = priv->plat->mdio_bus_data;
 
 #ifdef CONFIG_OF
-       if (priv->device->of_node) {
-               if (data->reset_gpio < 0) {
-                       struct device_node *np = priv->device->of_node;
-
-                       if (!np)
-                               return 0;
-
-                       data->reset_gpio = of_get_named_gpio(np,
-                                               "snps,reset-gpio", 0);
-                       if (data->reset_gpio < 0)
-                               return 0;
-
-                       data->active_low = of_property_read_bool(np,
-                                               "snps,reset-active-low");
-                       of_property_read_u32_array(np,
-                               "snps,reset-delays-us", data->delays, 3);
-
-                       if (devm_gpio_request(priv->device, data->reset_gpio,
-                                             "mdio-reset"))
-                               return 0;
-               }
-
+       if (gpio_is_valid(data->reset_gpio)) {
                gpio_direction_output(data->reset_gpio,
                                      data->active_low ? 1 : 0);
                if (data->delays[0])
@@ -313,24 +292,38 @@ int stmmac_mdio_register(struct net_device *ndev)
        int err = 0;
        struct mii_bus *new_bus;
        struct stmmac_priv *priv = netdev_priv(ndev);
-       struct stmmac_mdio_bus_data *mdio_bus_data = priv->plat->mdio_bus_data;
+       struct stmmac_mdio_bus_data *data = priv->plat->mdio_bus_data;
        struct device_node *mdio_node = priv->plat->mdio_node;
        struct device *dev = ndev->dev.parent;
        int addr, found, max_addr;
 
-       if (!mdio_bus_data)
+       if (!data)
                return 0;
 
        new_bus = mdiobus_alloc();
        if (!new_bus)
                return -ENOMEM;
 
-       if (mdio_bus_data->irqs)
-               memcpy(new_bus->irq, mdio_bus_data->irqs, sizeof(new_bus->irq));
+       if (data->irqs)
+               memcpy(new_bus->irq, data->irqs, sizeof(new_bus->irq));
 
 #ifdef CONFIG_OF
-       if (priv->device->of_node)
-               mdio_bus_data->reset_gpio = -1;
+       if (priv->device->of_node) {
+               struct device_node *np = priv->device->of_node;
+
+               data->reset_gpio = of_get_named_gpio(np, "snps,reset-gpio", 0);
+               if (gpio_is_valid(data->reset_gpio)) {
+                       data->active_low = of_property_read_bool(np,
+                                               "snps,reset-active-low");
+                       of_property_read_u32_array(np,
+                               "snps,reset-delays-us", data->delays, 3);
+
+                       devm_gpio_request(priv->device, data->reset_gpio,
+                                         "mdio-reset");
+               }
+       } else {
+               data->reset_gpio = -1;
+       }
 #endif
 
        new_bus->name = "stmmac";
@@ -356,7 +349,7 @@ int stmmac_mdio_register(struct net_device *ndev)
        snprintf(new_bus->id, MII_BUS_ID_SIZE, "%s-%x",
                 new_bus->name, priv->plat->bus_id);
        new_bus->priv = ndev;
-       new_bus->phy_mask = mdio_bus_data->phy_mask;
+       new_bus->phy_mask = data->phy_mask;
        new_bus->parent = priv->device;
 
        err = of_mdiobus_register(new_bus, mdio_node);
@@ -379,10 +372,9 @@ int stmmac_mdio_register(struct net_device *ndev)
                 * If an IRQ was provided to be assigned after
                 * the bus probe, do it here.
                 */
-               if (!mdio_bus_data->irqs &&
-                   (mdio_bus_data->probed_phy_irq > 0)) {
-                       new_bus->irq[addr] = mdio_bus_data->probed_phy_irq;
-                       phydev->irq = mdio_bus_data->probed_phy_irq;
+               if (!data->irqs && (data->probed_phy_irq > 0)) {
+                       new_bus->irq[addr] = data->probed_phy_irq;
+                       phydev->irq = data->probed_phy_irq;
                }
 
                /*
-- 
2.20.1

Reply via email to