net: ks8851: switch to using gpiod API
authorDmitry Torokhov <dmitry.torokhov@gmail.com>
Tue, 6 Sep 2022 20:49:21 +0000 (13:49 -0700)
committerPaolo Abeni <pabeni@redhat.com>
Thu, 15 Sep 2022 09:43:51 +0000 (11:43 +0200)
This patch switches the driver away from legacy gpio/of_gpio API to
gpiod API, and removes use of of_get_named_gpio_flags() which I want to
make private to gpiolib.

Signed-off-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
Link: https://lore.kernel.org/r/20220906204922.3789922-2-dmitry.torokhov@gmail.com
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/micrel/ks8851.h
drivers/net/ethernet/micrel/ks8851_common.c

index 6f34a61739b6622d86df007767374193528859f9..fecd43754cead10662344962d0e63e359ee27b20 100644 (file)
@@ -403,7 +403,7 @@ struct ks8851_net {
        struct eeprom_93cx6     eeprom;
        struct regulator        *vdd_reg;
        struct regulator        *vdd_io;
-       int                     gpio;
+       struct gpio_desc        *gpio;
        struct mii_bus          *mii_bus;
 
        void                    (*lock)(struct ks8851_net *ks,
index ec8457e61b459280a453b42bcd7a0f3bfa25d8f1..cfbc900d4aeb9ef7763230d7eca9256912c8a00b 100644 (file)
 #include <linux/cache.h>
 #include <linux/crc32.h>
 #include <linux/mii.h>
+#include <linux/gpio/consumer.h>
 #include <linux/regulator/consumer.h>
 
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
 #include <linux/of_mdio.h>
 #include <linux/of_net.h>
 
@@ -1117,24 +1116,23 @@ int ks8851_probe_common(struct net_device *netdev, struct device *dev,
 {
        struct ks8851_net *ks = netdev_priv(netdev);
        unsigned cider;
-       int gpio;
        int ret;
 
        ks->netdev = netdev;
        ks->tx_space = 6144;
 
-       gpio = of_get_named_gpio_flags(dev->of_node, "reset-gpios", 0, NULL);
-       if (gpio == -EPROBE_DEFER)
-               return gpio;
-
-       ks->gpio = gpio;
-       if (gpio_is_valid(gpio)) {
-               ret = devm_gpio_request_one(dev, gpio,
-                                           GPIOF_OUT_INIT_LOW, "ks8851_rst_n");
-               if (ret) {
-                       dev_err(dev, "reset gpio request failed\n");
-                       return ret;
-               }
+       ks->gpio = devm_gpiod_get_optional(dev, "reset", GPIOD_OUT_HIGH);
+       ret = PTR_ERR_OR_ZERO(ks->gpio);
+       if (ret) {
+               if (ret != -EPROBE_DEFER)
+                       dev_err(dev, "reset gpio request failed: %d\n", ret);
+               return ret;
+       }
+
+       ret = gpiod_set_consumer_name(ks->gpio, "ks8851_rst_n");
+       if (ret) {
+               dev_err(dev, "failed to set reset gpio name: %d\n", ret);
+               return ret;
        }
 
        ks->vdd_io = devm_regulator_get(dev, "vdd-io");
@@ -1161,9 +1159,9 @@ int ks8851_probe_common(struct net_device *netdev, struct device *dev,
                goto err_reg;
        }
 
-       if (gpio_is_valid(gpio)) {
+       if (ks->gpio) {
                usleep_range(10000, 11000);
-               gpio_set_value(gpio, 1);
+               gpiod_set_value_cansleep(ks->gpio, 0);
        }
 
        spin_lock_init(&ks->statelock);
@@ -1239,8 +1237,8 @@ int ks8851_probe_common(struct net_device *netdev, struct device *dev,
 err_id:
        ks8851_unregister_mdiobus(ks);
 err_mdio:
-       if (gpio_is_valid(gpio))
-               gpio_set_value(gpio, 0);
+       if (ks->gpio)
+               gpiod_set_value_cansleep(ks->gpio, 1);
        regulator_disable(ks->vdd_reg);
 err_reg:
        regulator_disable(ks->vdd_io);
@@ -1259,8 +1257,8 @@ void ks8851_remove_common(struct device *dev)
                dev_info(dev, "remove\n");
 
        unregister_netdev(priv->netdev);
-       if (gpio_is_valid(priv->gpio))
-               gpio_set_value(priv->gpio, 0);
+       if (priv->gpio)
+               gpiod_set_value_cansleep(priv->gpio, 1);
        regulator_disable(priv->vdd_reg);
        regulator_disable(priv->vdd_io);
 }