mirror of
https://github.com/torvalds/linux.git
synced 2026-06-08 14:42:37 +02:00
drm: support loader protect for panel
Change-Id: Ie9330e3380a4925a4b7603e7206f1e0d186d2156 Signed-off-by: Mark Yao <mark.yao@rock-chips.com>
This commit is contained in:
parent
8079a0e4f9
commit
7330eff972
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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,
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user