drm: support loader protect for panel

Change-Id: Ie9330e3380a4925a4b7603e7206f1e0d186d2156
Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
This commit is contained in:
Mark Yao
2017-06-05 18:05:42 +08:00
committed by Huang, Tao
parent 8079a0e4f9
commit 7330eff972
4 changed files with 34 additions and 0 deletions

View File

@@ -966,6 +966,8 @@ static int analogix_dp_loader_protect(struct drm_connector *connector, bool on)
{
struct analogix_dp_device *dp = to_dp(connector);
if (dp->plat_data->panel)
drm_panel_loader_protect(dp->plat_data->panel, on);
if (on)
pm_runtime_get_sync(dp->dev);
else

View File

@@ -330,6 +330,25 @@ static int panel_simple_of_get_native_mode(struct panel_simple *panel)
return 1;
}
static int panel_simple_loader_protect(struct drm_panel *panel, bool on)
{
struct panel_simple *p = to_panel_simple(panel);
int err;
if (on) {
err = regulator_enable(p->supply);
if (err < 0) {
dev_err(panel->dev, "failed to enable supply: %d\n",
err);
return err;
}
} else {
regulator_disable(p->supply);
}
return 0;
}
static int panel_simple_disable(struct drm_panel *panel)
{
struct panel_simple *p = to_panel_simple(panel);
@@ -486,6 +505,7 @@ static int panel_simple_get_timings(struct drm_panel *panel,
}
static const struct drm_panel_funcs panel_simple_funcs = {
.loader_protect = panel_simple_loader_protect,
.disable = panel_simple_disable,
.unprepare = panel_simple_unprepare,
.prepare = panel_simple_prepare,

View File

@@ -1057,6 +1057,8 @@ static int dw_mipi_loader_protect(struct drm_connector *connector, bool on)
{
struct dw_mipi_dsi *dsi = con_to_dsi(connector);
if (dsi->panel)
drm_panel_loader_protect(dsi->panel, on);
if (on)
pm_runtime_get_sync(dsi->dev);
else

View File

@@ -33,6 +33,7 @@ struct display_timing;
/**
* struct drm_panel_funcs - perform operations on a given panel
* @loader_protect: protect loader logo panel's power
* @disable: disable panel (turn off back light, etc.)
* @unprepare: turn off panel
* @prepare: turn on panel and perform set up
@@ -66,6 +67,7 @@ struct display_timing;
* the panel. This is the job of the .unprepare() function.
*/
struct drm_panel_funcs {
int (*loader_protect)(struct drm_panel *panel, bool on);
int (*disable)(struct drm_panel *panel);
int (*unprepare)(struct drm_panel *panel);
int (*prepare)(struct drm_panel *panel);
@@ -101,6 +103,14 @@ static inline int drm_panel_disable(struct drm_panel *panel)
return panel ? -ENOSYS : -EINVAL;
}
static inline int drm_panel_loader_protect(struct drm_panel *panel, bool on)
{
if (panel && panel->funcs && panel->funcs->loader_protect)
return panel->funcs->loader_protect(panel, on);
return panel ? -ENOSYS : -EINVAL;
}
static inline int drm_panel_prepare(struct drm_panel *panel)
{
if (panel && panel->funcs && panel->funcs->prepare)