Add support for the optional power-supply.

Note: A "dummy regulator" is returned by devm_regulator_get()
if the optional regulator is not present in the device tree,
simplifying the source code when enabling/disabling the regulator.

Signed-off-by: Philippe Cornu <philippe.co...@st.com>
---
 drivers/gpu/drm/panel/panel-orisetech-otm8009a.c | 17 +++++++++++++++++
 1 file changed, 17 insertions(+)

diff --git a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c 
b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
index 72530983d55d..90f1ae4af93c 100644
--- a/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
+++ b/drivers/gpu/drm/panel/panel-orisetech-otm8009a.c
@@ -11,6 +11,7 @@
 #include <drm/drm_panel.h>
 #include <linux/backlight.h>
 #include <linux/gpio/consumer.h>
+#include <linux/regulator/consumer.h>
 #include <video/mipi_display.h>
 
 #define DRV_NAME "orisetech_otm8009a"
@@ -62,6 +63,7 @@ struct otm8009a {
        struct drm_panel panel;
        struct backlight_device *bl_dev;
        struct gpio_desc *reset_gpio;
+       struct regulator *supply;
        bool prepared;
        bool enabled;
 };
@@ -279,6 +281,8 @@ static int otm8009a_unprepare(struct drm_panel *panel)
                msleep(20);
        }
 
+       regulator_disable(ctx->supply);
+
        ctx->prepared = false;
 
        return 0;
@@ -292,6 +296,12 @@ static int otm8009a_prepare(struct drm_panel *panel)
        if (ctx->prepared)
                return 0;
 
+       ret = regulator_enable(ctx->supply);
+       if (ret < 0) {
+               DRM_ERROR("failed to enable supply: %d\n", ret);
+               return ret;
+       }
+
        if (ctx->reset_gpio) {
                gpiod_set_value_cansleep(ctx->reset_gpio, 0);
                gpiod_set_value_cansleep(ctx->reset_gpio, 1);
@@ -414,6 +424,13 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
                return PTR_ERR(ctx->reset_gpio);
        }
 
+       ctx->supply = devm_regulator_get(dev, "power");
+       if (IS_ERR(ctx->supply)) {
+               ret = PTR_ERR(ctx->supply);
+               dev_err(dev, "failed to request regulator: %d\n", ret);
+               return ret;
+       }
+
        mipi_dsi_set_drvdata(dsi, ctx);
 
        ctx->dev = dev;
-- 
2.15.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to