drm/omap: panel-dsi-cm: switch to gpiod
authorSebastian Reichel <sebastian.reichel@collabora.co.uk>
Mon, 24 Jul 2017 17:33:09 +0000 (19:33 +0200)
committerTomi Valkeinen <tomi.valkeinen@ti.com>
Tue, 19 Dec 2017 08:32:00 +0000 (10:32 +0200)
Use the new descriptor based GPIO API instead of
the legacy one, which results in cleaner code
with less lines of code.

Signed-off-by: Sebastian Reichel <sebastian.reichel@collabora.co.uk>
Signed-off-by: Tomi Valkeinen <tomi.valkeinen@ti.com>
drivers/gpu/drm/omapdrm/displays/panel-dsi-cm.c

index d139bb70a5e7db29fdbad6812df28281b3387912..996991de674b2f56fa6eedeee6e4fa25c3751310 100644 (file)
@@ -22,7 +22,6 @@
 #include <linux/slab.h>
 #include <linux/workqueue.h>
 #include <linux/of_device.h>
-#include <linux/of_gpio.h>
 #include <linux/regulator/consumer.h>
 
 #include <video/mipi_display.h>
@@ -59,8 +58,8 @@ struct panel_drv_data {
        unsigned long   hw_guard_wait;  /* max guard time in jiffies */
 
        /* panel HW configuration from DT or platform data */
-       int reset_gpio;
-       int ext_te_gpio;
+       struct gpio_desc *reset_gpio;
+       struct gpio_desc *ext_te_gpio;
 
        struct regulator *vpnl;
        struct regulator *vddi;
@@ -288,8 +287,8 @@ static int dsicm_enter_ulps(struct panel_drv_data *ddata)
        if (r)
                goto err;
 
-       if (gpio_is_valid(ddata->ext_te_gpio))
-               disable_irq(gpio_to_irq(ddata->ext_te_gpio));
+       if (ddata->ext_te_gpio)
+               disable_irq(gpiod_to_irq(ddata->ext_te_gpio));
 
        in->ops.dsi->disable(in, false, true);
 
@@ -330,8 +329,8 @@ static int dsicm_exit_ulps(struct panel_drv_data *ddata)
                goto err2;
        }
 
-       if (gpio_is_valid(ddata->ext_te_gpio))
-               enable_irq(gpio_to_irq(ddata->ext_te_gpio));
+       if (ddata->ext_te_gpio)
+               enable_irq(gpiod_to_irq(ddata->ext_te_gpio));
 
        dsicm_queue_ulps_work(ddata);
 
@@ -344,8 +343,8 @@ err2:
 
        r = dsicm_panel_reset(ddata);
        if (!r) {
-               if (gpio_is_valid(ddata->ext_te_gpio))
-                       enable_irq(gpio_to_irq(ddata->ext_te_gpio));
+               if (ddata->ext_te_gpio)
+                       enable_irq(gpiod_to_irq(ddata->ext_te_gpio));
                ddata->ulps_enabled = false;
        }
 err1:
@@ -591,16 +590,13 @@ static const struct attribute_group dsicm_attr_group = {
 
 static void dsicm_hw_reset(struct panel_drv_data *ddata)
 {
-       if (!gpio_is_valid(ddata->reset_gpio))
-               return;
-
-       gpio_set_value(ddata->reset_gpio, 1);
+       gpiod_set_value(ddata->reset_gpio, 1);
        udelay(10);
        /* reset the panel */
-       gpio_set_value(ddata->reset_gpio, 0);
+       gpiod_set_value(ddata->reset_gpio, 0);
        /* assert reset */
        udelay(10);
-       gpio_set_value(ddata->reset_gpio, 1);
+       gpiod_set_value(ddata->reset_gpio, 1);
        /* wait after releasing reset */
        usleep_range(5000, 10000);
 }
@@ -954,7 +950,7 @@ static int dsicm_update(struct omap_dss_device *dssdev,
        if (r)
                goto err;
 
-       if (ddata->te_enabled && gpio_is_valid(ddata->ext_te_gpio)) {
+       if (ddata->te_enabled && ddata->ext_te_gpio) {
                schedule_delayed_work(&ddata->te_timeout_work,
                                msecs_to_jiffies(250));
                atomic_set(&ddata->do_update, 1);
@@ -1001,7 +997,7 @@ static int _dsicm_enable_te(struct panel_drv_data *ddata, bool enable)
        else
                r = dsicm_dcs_write_0(ddata, MIPI_DCS_SET_TEAR_OFF);
 
-       if (!gpio_is_valid(ddata->ext_te_gpio))
+       if (!ddata->ext_te_gpio)
                in->ops.dsi->enable_te(in, enable);
 
        /* possible panel bug */
@@ -1229,21 +1225,21 @@ static int dsicm_probe_of(struct platform_device *pdev)
        struct panel_drv_data *ddata = platform_get_drvdata(pdev);
        struct omap_dss_device *in;
        struct display_timing timing;
-       int gpio, err;
+       int err;
 
-       gpio = of_get_named_gpio(node, "reset-gpios", 0);
-       if (!gpio_is_valid(gpio)) {
-               dev_err(&pdev->dev, "failed to parse reset gpio\n");
-               return gpio;
+       ddata->reset_gpio = devm_gpiod_get(&pdev->dev, "reset", GPIOD_OUT_LOW);
+       if (IS_ERR(ddata->reset_gpio)) {
+               err = PTR_ERR(ddata->reset_gpio);
+               dev_err(&pdev->dev, "reset gpio request failed: %d", err);
+               return err;
        }
-       ddata->reset_gpio = gpio;
 
-       gpio = of_get_named_gpio(node, "te-gpios", 0);
-       if (gpio_is_valid(gpio) || gpio == -ENOENT) {
-               ddata->ext_te_gpio = gpio;
-       } else {
-               dev_err(&pdev->dev, "failed to parse TE gpio\n");
-               return gpio;
+       ddata->ext_te_gpio = devm_gpiod_get_optional(&pdev->dev, "te",
+                                                    GPIOD_IN);
+       if (IS_ERR(ddata->ext_te_gpio)) {
+               err = PTR_ERR(ddata->ext_te_gpio);
+               dev_err(&pdev->dev, "TE gpio request failed: %d", err);
+               return err;
        }
 
        err = of_get_display_timing(node, "panel-timing", &timing);
@@ -1353,24 +1349,8 @@ static int dsicm_probe(struct platform_device *pdev)
 
        atomic_set(&ddata->do_update, 0);
 
-       if (gpio_is_valid(ddata->reset_gpio)) {
-               r = devm_gpio_request_one(dev, ddata->reset_gpio,
-                               GPIOF_OUT_INIT_LOW, "taal rst");
-               if (r) {
-                       dev_err(dev, "failed to request reset gpio\n");
-                       goto err_reg;
-               }
-       }
-
-       if (gpio_is_valid(ddata->ext_te_gpio)) {
-               r = devm_gpio_request_one(dev, ddata->ext_te_gpio,
-                               GPIOF_IN, "taal irq");
-               if (r) {
-                       dev_err(dev, "GPIO request failed\n");
-                       goto err_reg;
-               }
-
-               r = devm_request_irq(dev, gpio_to_irq(ddata->ext_te_gpio),
+       if (ddata->ext_te_gpio) {
+               r = devm_request_irq(dev, gpiod_to_irq(ddata->ext_te_gpio),
                                dsicm_te_isr,
                                IRQF_TRIGGER_RISING,
                                "taal vsync", ddata);