mirror of https://gitee.com/openkylin/linux.git
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: Philippe Cornu <philippe.cornu@st.com> Reviewed-by: Yannick Fertré <yannick.fertre@st.com> Signed-off-by: Thierry Reding <treding@nvidia.com> Link: https://patchwork.freedesktop.org/patch/msgid/20180205094532.23547-3-philippe.cornu@st.com
This commit is contained in:
parent
683ad26121
commit
ded8d7fe8d
|
@ -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;
|
||||
|
|
Loading…
Reference in New Issue