drm/exynos: fix dpms operation for mode set
When we do mode set, the dpms mode should be ON. Don't control dpms in crtc commit function. Signed-off-by: Joonyoung Shim <jy0922.shim@samsung.com> Signed-off-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Inki Dae <inki.dae@samsung.com>
This commit is contained in:
Родитель
00ae67cf26
Коммит
bebab8ff31
|
@ -105,28 +105,6 @@ static void exynos_drm_crtc_commit(struct drm_crtc *crtc)
|
|||
|
||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||
|
||||
/*
|
||||
* when set_crtc is requested from user or at booting time,
|
||||
* crtc->commit would be called without dpms call so if dpms is
|
||||
* no power on then crtc->dpms should be called
|
||||
* with DRM_MODE_DPMS_ON for the hardware power to be on.
|
||||
*/
|
||||
if (exynos_crtc->dpms != DRM_MODE_DPMS_ON) {
|
||||
int mode = DRM_MODE_DPMS_ON;
|
||||
|
||||
/*
|
||||
* enable hardware(power on) to all encoders hdmi connected
|
||||
* to current crtc.
|
||||
*/
|
||||
exynos_drm_crtc_dpms(crtc, mode);
|
||||
/*
|
||||
* enable dma to all encoders connected to current crtc and
|
||||
* lcd panel.
|
||||
*/
|
||||
exynos_drm_fn_encoder(crtc, &mode,
|
||||
exynos_drm_encoder_dpms_from_crtc);
|
||||
}
|
||||
|
||||
exynos_plane_commit(exynos_crtc->plane);
|
||||
}
|
||||
|
||||
|
@ -155,6 +133,8 @@ exynos_drm_crtc_mode_set(struct drm_crtc *crtc, struct drm_display_mode *mode,
|
|||
|
||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||
|
||||
exynos_drm_crtc_dpms(crtc, DRM_MODE_DPMS_ON);
|
||||
|
||||
/*
|
||||
* copy the mode data adjusted by mode_fixup() into crtc->mode
|
||||
* so that hardware can be seet to proper mode.
|
||||
|
@ -196,7 +176,7 @@ static int exynos_drm_crtc_mode_set_base(struct drm_crtc *crtc, int x, int y,
|
|||
if (ret)
|
||||
return ret;
|
||||
|
||||
exynos_plane_commit(exynos_crtc->plane);
|
||||
exynos_drm_crtc_commit(crtc);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -138,6 +138,8 @@ static void exynos_drm_encoder_mode_set(struct drm_encoder *encoder,
|
|||
|
||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||
|
||||
exynos_drm_encoder_dpms(encoder, DRM_MODE_DPMS_ON);
|
||||
|
||||
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
|
||||
if (connector->encoder == encoder)
|
||||
if (manager_ops && manager_ops->mode_set)
|
||||
|
@ -323,18 +325,6 @@ void exynos_drm_disable_vblank(struct drm_encoder *encoder, void *data)
|
|||
manager_ops->disable_vblank(manager->dev);
|
||||
}
|
||||
|
||||
void exynos_drm_encoder_dpms_from_crtc(struct drm_encoder *encoder, void *data)
|
||||
{
|
||||
struct exynos_drm_encoder *exynos_encoder = to_exynos_encoder(encoder);
|
||||
int mode = *(int *)data;
|
||||
|
||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
||||
|
||||
exynos_drm_encoder_dpms(encoder, mode);
|
||||
|
||||
exynos_encoder->dpms = mode;
|
||||
}
|
||||
|
||||
void exynos_drm_encoder_crtc_dpms(struct drm_encoder *encoder, void *data)
|
||||
{
|
||||
struct drm_device *dev = encoder->dev;
|
||||
|
|
|
@ -40,8 +40,6 @@ void exynos_drm_fn_encoder(struct drm_crtc *crtc, void *data,
|
|||
void (*fn)(struct drm_encoder *, void *));
|
||||
void exynos_drm_enable_vblank(struct drm_encoder *encoder, void *data);
|
||||
void exynos_drm_disable_vblank(struct drm_encoder *encoder, void *data);
|
||||
void exynos_drm_encoder_dpms_from_crtc(struct drm_encoder *encoder,
|
||||
void *data);
|
||||
void exynos_drm_encoder_crtc_dpms(struct drm_encoder *encoder, void *data);
|
||||
void exynos_drm_encoder_crtc_pipe(struct drm_encoder *encoder, void *data);
|
||||
void exynos_drm_encoder_plane_mode_set(struct drm_encoder *encoder, void *data);
|
||||
|
|
Загрузка…
Ссылка в новой задаче