]> git.proxmox.com Git - mirror_ubuntu-focal-kernel.git/blobdiff - drivers/iio/humidity/dht11.c
Merge tag 'staging-5.3-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/gregkh...
[mirror_ubuntu-focal-kernel.git] / drivers / iio / humidity / dht11.c
index 4e22b3c3e488e65a3f3d34188d48019e77c5045d..b459600e1a337e70c5ad88e7c07fc7457d5f1ac6 100644 (file)
@@ -22,8 +22,7 @@
 #include <linux/completion.h>
 #include <linux/mutex.h>
 #include <linux/delay.h>
-#include <linux/gpio.h>
-#include <linux/of_gpio.h>
+#include <linux/gpio/consumer.h>
 #include <linux/timekeeping.h>
 
 #include <linux/iio/iio.h>
@@ -72,7 +71,7 @@
 struct dht11 {
        struct device                   *dev;
 
-       int                             gpio;
+       struct gpio_desc                *gpiod;
        int                             irq;
 
        struct completion               completion;
@@ -179,7 +178,7 @@ static irqreturn_t dht11_handle_irq(int irq, void *data)
        if (dht11->num_edges < DHT11_EDGES_PER_READ && dht11->num_edges >= 0) {
                dht11->edges[dht11->num_edges].ts = ktime_get_boottime_ns();
                dht11->edges[dht11->num_edges++].value =
-                                               gpio_get_value(dht11->gpio);
+                                               gpiod_get_value(dht11->gpiod);
 
                if (dht11->num_edges >= DHT11_EDGES_PER_READ)
                        complete(&dht11->completion);
@@ -217,12 +216,12 @@ static int dht11_read_raw(struct iio_dev *iio_dev,
                reinit_completion(&dht11->completion);
 
                dht11->num_edges = 0;
-               ret = gpio_direction_output(dht11->gpio, 0);
+               ret = gpiod_direction_output(dht11->gpiod, 0);
                if (ret)
                        goto err;
                usleep_range(DHT11_START_TRANSMISSION_MIN,
                             DHT11_START_TRANSMISSION_MAX);
-               ret = gpio_direction_input(dht11->gpio);
+               ret = gpiod_direction_input(dht11->gpiod);
                if (ret)
                        goto err;
 
@@ -294,10 +293,8 @@ MODULE_DEVICE_TABLE(of, dht11_dt_ids);
 static int dht11_probe(struct platform_device *pdev)
 {
        struct device *dev = &pdev->dev;
-       struct device_node *node = dev->of_node;
        struct dht11 *dht11;
        struct iio_dev *iio;
-       int ret;
 
        iio = devm_iio_device_alloc(dev, sizeof(*dht11));
        if (!iio) {
@@ -307,18 +304,13 @@ static int dht11_probe(struct platform_device *pdev)
 
        dht11 = iio_priv(iio);
        dht11->dev = dev;
+       dht11->gpiod = devm_gpiod_get(dev, NULL, GPIOD_IN);
+       if (IS_ERR(dht11->gpiod))
+               return PTR_ERR(dht11->gpiod);
 
-       ret = of_get_gpio(node, 0);
-       if (ret < 0)
-               return ret;
-       dht11->gpio = ret;
-       ret = devm_gpio_request_one(dev, dht11->gpio, GPIOF_IN, pdev->name);
-       if (ret)
-               return ret;
-
-       dht11->irq = gpio_to_irq(dht11->gpio);
+       dht11->irq = gpiod_to_irq(dht11->gpiod);
        if (dht11->irq < 0) {
-               dev_err(dev, "GPIO %d has no interrupt\n", dht11->gpio);
+               dev_err(dev, "GPIO %d has no interrupt\n", desc_to_gpio(dht11->gpiod));
                return -EINVAL;
        }