Commit ded8d7fe authored by Philippe CORNU's avatar Philippe CORNU Committed by Thierry Reding

drm/panel: otm8009a: Add support for the optional power-supply

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: default avatarPhilippe Cornu <philippe.cornu@st.com>
Reviewed-by: default avatarYannick Fertré <yannick.fertre@st.com>
Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180205094532.23547-3-philippe.cornu@st.com
parent 683ad261
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <drm/drm_panel.h> #include <drm/drm_panel.h>
#include <linux/backlight.h> #include <linux/backlight.h>
#include <linux/gpio/consumer.h> #include <linux/gpio/consumer.h>
#include <linux/regulator/consumer.h>
#include <video/mipi_display.h> #include <video/mipi_display.h>
#define DRV_NAME "orisetech_otm8009a" #define DRV_NAME "orisetech_otm8009a"
...@@ -62,6 +63,7 @@ struct otm8009a { ...@@ -62,6 +63,7 @@ struct otm8009a {
struct drm_panel panel; struct drm_panel panel;
struct backlight_device *bl_dev; struct backlight_device *bl_dev;
struct gpio_desc *reset_gpio; struct gpio_desc *reset_gpio;
struct regulator *supply;
bool prepared; bool prepared;
bool enabled; bool enabled;
}; };
...@@ -279,6 +281,8 @@ static int otm8009a_unprepare(struct drm_panel *panel) ...@@ -279,6 +281,8 @@ static int otm8009a_unprepare(struct drm_panel *panel)
msleep(20); msleep(20);
} }
regulator_disable(ctx->supply);
ctx->prepared = false; ctx->prepared = false;
return 0; return 0;
...@@ -292,6 +296,12 @@ static int otm8009a_prepare(struct drm_panel *panel) ...@@ -292,6 +296,12 @@ static int otm8009a_prepare(struct drm_panel *panel)
if (ctx->prepared) if (ctx->prepared)
return 0; 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) { if (ctx->reset_gpio) {
gpiod_set_value_cansleep(ctx->reset_gpio, 0); gpiod_set_value_cansleep(ctx->reset_gpio, 0);
gpiod_set_value_cansleep(ctx->reset_gpio, 1); gpiod_set_value_cansleep(ctx->reset_gpio, 1);
...@@ -414,6 +424,13 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi) ...@@ -414,6 +424,13 @@ static int otm8009a_probe(struct mipi_dsi_device *dsi)
return PTR_ERR(ctx->reset_gpio); 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); mipi_dsi_set_drvdata(dsi, ctx);
ctx->dev = dev; ctx->dev = dev;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment