]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
net: ethernet: adi: adin1110: add reset GPIO
authorAlexandru Tachici <alexandru.tachici@analog.com>
Wed, 19 Oct 2022 17:13:13 +0000 (20:13 +0300)
committerDavid S. Miller <davem@davemloft.net>
Fri, 21 Oct 2022 12:11:33 +0000 (13:11 +0100)
Add an optional GPIO to be used for a hardware reset of the IC.

Signed-off-by: Alexandru Tachici <alexandru.tachici@analog.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/adi/adin1110.c

index 086aa9c96b31d292ab6560d9259e26fc5dd64882..1c0015b55993bde3b1d97d96d6050ee183455852 100644 (file)
@@ -1082,9 +1082,30 @@ static void adin1110_adjust_link(struct net_device *dev)
  */
 static int adin1110_check_spi(struct adin1110_priv *priv)
 {
+       struct gpio_desc *reset_gpio;
        int ret;
        u32 val;
 
+       reset_gpio = devm_gpiod_get_optional(&priv->spidev->dev, "reset",
+                                            GPIOD_OUT_LOW);
+       if (reset_gpio) {
+               /* MISO pin is used for internal configuration, can't have
+                * anyone else disturbing the SDO line.
+                */
+               spi_bus_lock(priv->spidev->controller);
+
+               gpiod_set_value(reset_gpio, 1);
+               fsleep(10000);
+               gpiod_set_value(reset_gpio, 0);
+
+               /* Need to wait 90 ms before interacting with
+                * the MAC after a HW reset.
+                */
+               fsleep(90000);
+
+               spi_bus_unlock(priv->spidev->controller);
+       }
+
        ret = adin1110_read_reg(priv, ADIN1110_PHY_ID, &val);
        if (ret < 0)
                return ret;