drm/exynos: Remove apply manager callback
This patch removes the apply() manager callback in favor of putting the relevant commits in the individual drivers. This will mitigate some of the difference between the suspend/resume path and the dpms path Signed-off-by: Sean Paul <seanpaul@chromium.org> Reviewed-by: Tomasz Figa <t.figa@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
parent
bb7704d6a6
commit
87244fa604
|
@ -146,7 +146,6 @@ struct exynos_drm_display_ops {
|
||||||
*
|
*
|
||||||
* @initialize: initializes the manager with drm_dev
|
* @initialize: initializes the manager with drm_dev
|
||||||
* @dpms: control device power.
|
* @dpms: control device power.
|
||||||
* @apply: set timing, vblank and overlay data to registers.
|
|
||||||
* @mode_fixup: fix mode data comparing to hw specific display mode.
|
* @mode_fixup: fix mode data comparing to hw specific display mode.
|
||||||
* @mode_set: convert drm_display_mode to hw specific display mode and
|
* @mode_set: convert drm_display_mode to hw specific display mode and
|
||||||
* would be called by encoder->mode_set().
|
* would be called by encoder->mode_set().
|
||||||
|
@ -166,7 +165,6 @@ struct exynos_drm_manager_ops {
|
||||||
int (*initialize)(struct exynos_drm_manager *mgr,
|
int (*initialize)(struct exynos_drm_manager *mgr,
|
||||||
struct drm_device *drm_dev);
|
struct drm_device *drm_dev);
|
||||||
void (*dpms)(struct exynos_drm_manager *mgr, int mode);
|
void (*dpms)(struct exynos_drm_manager *mgr, int mode);
|
||||||
void (*apply)(struct exynos_drm_manager *mgr);
|
|
||||||
void (*mode_fixup)(struct exynos_drm_manager *mgr,
|
void (*mode_fixup)(struct exynos_drm_manager *mgr,
|
||||||
struct drm_connector *connector,
|
struct drm_connector *connector,
|
||||||
const struct drm_display_mode *mode,
|
const struct drm_display_mode *mode,
|
||||||
|
|
|
@ -57,8 +57,6 @@ static void exynos_drm_connector_power(struct drm_encoder *encoder, int mode)
|
||||||
static void exynos_drm_encoder_dpms(struct drm_encoder *encoder, int mode)
|
static void exynos_drm_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = encoder->dev;
|
struct drm_device *dev = encoder->dev;
|
||||||
struct exynos_drm_manager *manager = exynos_drm_get_manager(encoder);
|
|
||||||
struct exynos_drm_manager_ops *manager_ops = manager->ops;
|
|
||||||
struct exynos_drm_encoder *exynos_encoder = to_exynos_encoder(encoder);
|
struct exynos_drm_encoder *exynos_encoder = to_exynos_encoder(encoder);
|
||||||
|
|
||||||
DRM_DEBUG_KMS("encoder dpms: %d\n", mode);
|
DRM_DEBUG_KMS("encoder dpms: %d\n", mode);
|
||||||
|
@ -72,10 +70,6 @@ static void exynos_drm_encoder_dpms(struct drm_encoder *encoder, int mode)
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case DRM_MODE_DPMS_ON:
|
case DRM_MODE_DPMS_ON:
|
||||||
if (manager_ops && manager_ops->apply)
|
|
||||||
if (!exynos_encoder->updated)
|
|
||||||
manager_ops->apply(manager);
|
|
||||||
|
|
||||||
exynos_drm_connector_power(encoder, mode);
|
exynos_drm_connector_power(encoder, mode);
|
||||||
exynos_encoder->dpms = mode;
|
exynos_encoder->dpms = mode;
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -672,7 +672,6 @@ static void fimd_win_disable(struct exynos_drm_manager *mgr, int zpos)
|
||||||
static struct exynos_drm_manager_ops fimd_manager_ops = {
|
static struct exynos_drm_manager_ops fimd_manager_ops = {
|
||||||
.initialize = fimd_mgr_initialize,
|
.initialize = fimd_mgr_initialize,
|
||||||
.dpms = fimd_dpms,
|
.dpms = fimd_dpms,
|
||||||
.apply = fimd_apply,
|
|
||||||
.commit = fimd_commit,
|
.commit = fimd_commit,
|
||||||
.enable_vblank = fimd_enable_vblank,
|
.enable_vblank = fimd_enable_vblank,
|
||||||
.disable_vblank = fimd_disable_vblank,
|
.disable_vblank = fimd_disable_vblank,
|
||||||
|
@ -883,6 +882,8 @@ static int fimd_activate(struct exynos_drm_manager *mgr, bool enable)
|
||||||
fimd_enable_vblank(mgr);
|
fimd_enable_vblank(mgr);
|
||||||
|
|
||||||
fimd_window_resume(dev);
|
fimd_window_resume(dev);
|
||||||
|
|
||||||
|
fimd_apply(mgr);
|
||||||
} else {
|
} else {
|
||||||
fimd_window_suspend(dev);
|
fimd_window_suspend(dev);
|
||||||
|
|
||||||
|
@ -1037,23 +1038,10 @@ static int fimd_resume(struct device *dev)
|
||||||
* of pm runtime would still be 1 so in this case, fimd driver
|
* of pm runtime would still be 1 so in this case, fimd driver
|
||||||
* should be on directly not drawing on pm runtime interface.
|
* should be on directly not drawing on pm runtime interface.
|
||||||
*/
|
*/
|
||||||
if (!pm_runtime_suspended(dev)) {
|
if (pm_runtime_suspended(dev))
|
||||||
int ret;
|
return 0;
|
||||||
|
|
||||||
ret = fimd_activate(mgr, true);
|
return fimd_activate(mgr, true);
|
||||||
if (ret < 0)
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* in case of dpms on(standby), fimd_apply function will
|
|
||||||
* be called by encoder's dpms callback to update fimd's
|
|
||||||
* registers but in case of sleep wakeup, it's not.
|
|
||||||
* so fimd_apply function should be called at here.
|
|
||||||
*/
|
|
||||||
fimd_apply(mgr);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -302,22 +302,6 @@ static void drm_hdmi_dpms(struct exynos_drm_manager *mgr, int mode)
|
||||||
hdmi_ops->dpms(ctx->hdmi_ctx->ctx, mode);
|
hdmi_ops->dpms(ctx->hdmi_ctx->ctx, mode);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void drm_hdmi_apply(struct exynos_drm_manager *mgr)
|
|
||||||
{
|
|
||||||
struct drm_hdmi_context *ctx = mgr->ctx;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
for (i = 0; i < MIXER_WIN_NR; i++) {
|
|
||||||
if (!ctx->enabled[i])
|
|
||||||
continue;
|
|
||||||
if (mixer_ops && mixer_ops->win_commit)
|
|
||||||
mixer_ops->win_commit(ctx->mixer_ctx->ctx, i);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (hdmi_ops && hdmi_ops->commit)
|
|
||||||
hdmi_ops->commit(ctx->hdmi_ctx->ctx);
|
|
||||||
}
|
|
||||||
|
|
||||||
static void drm_mixer_win_mode_set(struct exynos_drm_manager *mgr,
|
static void drm_mixer_win_mode_set(struct exynos_drm_manager *mgr,
|
||||||
struct exynos_drm_overlay *overlay)
|
struct exynos_drm_overlay *overlay)
|
||||||
{
|
{
|
||||||
|
@ -362,7 +346,6 @@ static void drm_mixer_win_disable(struct exynos_drm_manager *mgr, int zpos)
|
||||||
static struct exynos_drm_manager_ops drm_hdmi_manager_ops = {
|
static struct exynos_drm_manager_ops drm_hdmi_manager_ops = {
|
||||||
.initialize = drm_hdmi_mgr_initialize,
|
.initialize = drm_hdmi_mgr_initialize,
|
||||||
.dpms = drm_hdmi_dpms,
|
.dpms = drm_hdmi_dpms,
|
||||||
.apply = drm_hdmi_apply,
|
|
||||||
.enable_vblank = drm_hdmi_enable_vblank,
|
.enable_vblank = drm_hdmi_enable_vblank,
|
||||||
.disable_vblank = drm_hdmi_disable_vblank,
|
.disable_vblank = drm_hdmi_disable_vblank,
|
||||||
.wait_for_vblank = drm_hdmi_wait_for_vblank,
|
.wait_for_vblank = drm_hdmi_wait_for_vblank,
|
||||||
|
|
|
@ -333,7 +333,6 @@ static void vidi_win_disable(struct exynos_drm_manager *mgr, int zpos)
|
||||||
|
|
||||||
static struct exynos_drm_manager_ops vidi_manager_ops = {
|
static struct exynos_drm_manager_ops vidi_manager_ops = {
|
||||||
.dpms = vidi_dpms,
|
.dpms = vidi_dpms,
|
||||||
.apply = vidi_apply,
|
|
||||||
.commit = vidi_commit,
|
.commit = vidi_commit,
|
||||||
.enable_vblank = vidi_enable_vblank,
|
.enable_vblank = vidi_enable_vblank,
|
||||||
.disable_vblank = vidi_disable_vblank,
|
.disable_vblank = vidi_disable_vblank,
|
||||||
|
|
|
@ -1752,6 +1752,7 @@ static void hdmi_poweron(struct hdmi_context *hdata)
|
||||||
clk_prepare_enable(res->sclk_hdmi);
|
clk_prepare_enable(res->sclk_hdmi);
|
||||||
|
|
||||||
hdmiphy_poweron(hdata);
|
hdmiphy_poweron(hdata);
|
||||||
|
hdmi_commit(hdata);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void hdmi_poweroff(struct hdmi_context *hdata)
|
static void hdmi_poweroff(struct hdmi_context *hdata)
|
||||||
|
|
|
@ -1058,6 +1058,8 @@ static void mixer_window_resume(struct mixer_context *ctx)
|
||||||
win_data = &ctx->win_data[i];
|
win_data = &ctx->win_data[i];
|
||||||
win_data->enabled = win_data->resume;
|
win_data->enabled = win_data->resume;
|
||||||
win_data->resume = false;
|
win_data->resume = false;
|
||||||
|
if (win_data->enabled)
|
||||||
|
mixer_win_commit(ctx, i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue