mirror of
https://github.com/torvalds/linux
synced 2024-10-26 21:29:56 +00:00
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:
parent
00ae67cf26
commit
bebab8ff31
|
@ -105,28 +105,6 @@ static void exynos_drm_crtc_commit(struct drm_crtc *crtc)
|
||||||
|
|
||||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
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);
|
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__);
|
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
|
* copy the mode data adjusted by mode_fixup() into crtc->mode
|
||||||
* so that hardware can be seet to proper 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)
|
if (ret)
|
||||||
return ret;
|
return ret;
|
||||||
|
|
||||||
exynos_plane_commit(exynos_crtc->plane);
|
exynos_drm_crtc_commit(crtc);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -138,6 +138,8 @@ static void exynos_drm_encoder_mode_set(struct drm_encoder *encoder,
|
||||||
|
|
||||||
DRM_DEBUG_KMS("%s\n", __FILE__);
|
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) {
|
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
|
||||||
if (connector->encoder == encoder)
|
if (connector->encoder == encoder)
|
||||||
if (manager_ops && manager_ops->mode_set)
|
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);
|
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)
|
void exynos_drm_encoder_crtc_dpms(struct drm_encoder *encoder, void *data)
|
||||||
{
|
{
|
||||||
struct drm_device *dev = encoder->dev;
|
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 (*fn)(struct drm_encoder *, void *));
|
||||||
void exynos_drm_enable_vblank(struct drm_encoder *encoder, void *data);
|
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_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_dpms(struct drm_encoder *encoder, void *data);
|
||||||
void exynos_drm_encoder_crtc_pipe(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);
|
void exynos_drm_encoder_plane_mode_set(struct drm_encoder *encoder, void *data);
|
||||||
|
|
Loading…
Reference in a new issue