aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/exynos/exynos_drm_fimd.c
diff options
context:
space:
mode:
authorGustavo Padovan <gustavo.padovan@collabora.co.uk>2015-06-01 11:04:55 -0400
committerInki Dae <daeinki@gmail.com>2015-06-19 11:32:53 -0400
commit3cecda030f03efe5ce064f0263cd8ad2dc1e21ac (patch)
tree808f7dc063944ce9c9c27c7234dba0333ea1883c /drivers/gpu/drm/exynos/exynos_drm_fimd.c
parentc4d96f1689226a2342962f2c70b16b0a3b8343ff (diff)
drm/exynos: split exynos_crtc->dpms in enable() and disable()
To follow more closely the new atomic API we split the dpms() helper into the enable() and disable() helper to get exactly the same semantics. Signed-off-by: Gustavo Padovan <gustavo.padovan@collabora.co.uk> Signed-off-by: Inki Dae <inki.dae@samsung.com>
Diffstat (limited to 'drivers/gpu/drm/exynos/exynos_drm_fimd.c')
-rw-r--r--drivers/gpu/drm/exynos/exynos_drm_fimd.c69
1 files changed, 14 insertions, 55 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
index b326b31725c1..96618534358e 100644
--- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c
+++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c
@@ -805,57 +805,35 @@ static void fimd_apply(struct fimd_context *ctx)
805 fimd_commit(ctx->crtc); 805 fimd_commit(ctx->crtc);
806} 806}
807 807
808static int fimd_poweron(struct fimd_context *ctx) 808static void fimd_enable(struct exynos_drm_crtc *crtc)
809{ 809{
810 int ret; 810 struct fimd_context *ctx = crtc->ctx;
811 811
812 if (!ctx->suspended) 812 if (!ctx->suspended)
813 return 0; 813 return;
814 814
815 ctx->suspended = false; 815 ctx->suspended = false;
816 816
817 pm_runtime_get_sync(ctx->dev); 817 pm_runtime_get_sync(ctx->dev);
818 818
819 ret = clk_prepare_enable(ctx->bus_clk); 819 clk_prepare_enable(ctx->bus_clk);
820 if (ret < 0) { 820 clk_prepare_enable(ctx->lcd_clk);
821 DRM_ERROR("Failed to prepare_enable the bus clk [%d]\n", ret);
822 goto bus_clk_err;
823 }
824
825 ret = clk_prepare_enable(ctx->lcd_clk);
826 if (ret < 0) {
827 DRM_ERROR("Failed to prepare_enable the lcd clk [%d]\n", ret);
828 goto lcd_clk_err;
829 }
830 821
831 /* if vblank was enabled status, enable it again. */ 822 /* if vblank was enabled status, enable it again. */
832 if (test_and_clear_bit(0, &ctx->irq_flags)) { 823 if (test_and_clear_bit(0, &ctx->irq_flags))
833 ret = fimd_enable_vblank(ctx->crtc); 824 fimd_enable_vblank(ctx->crtc);
834 if (ret) {
835 DRM_ERROR("Failed to re-enable vblank [%d]\n", ret);
836 goto enable_vblank_err;
837 }
838 }
839 825
840 fimd_window_resume(ctx); 826 fimd_window_resume(ctx);
841 827
842 fimd_apply(ctx); 828 fimd_apply(ctx);
843
844 return 0;
845
846enable_vblank_err:
847 clk_disable_unprepare(ctx->lcd_clk);
848lcd_clk_err:
849 clk_disable_unprepare(ctx->bus_clk);
850bus_clk_err:
851 ctx->suspended = true;
852 return ret;
853} 829}
854 830
855static int fimd_poweroff(struct fimd_context *ctx) 831static void fimd_disable(struct exynos_drm_crtc *crtc)
856{ 832{
833 struct fimd_context *ctx = crtc->ctx;
834
857 if (ctx->suspended) 835 if (ctx->suspended)
858 return 0; 836 return;
859 837
860 /* 838 /*
861 * We need to make sure that all windows are disabled before we 839 * We need to make sure that all windows are disabled before we
@@ -870,26 +848,6 @@ static int fimd_poweroff(struct fimd_context *ctx)
870 pm_runtime_put_sync(ctx->dev); 848 pm_runtime_put_sync(ctx->dev);
871 849
872 ctx->suspended = true; 850 ctx->suspended = true;
873 return 0;
874}
875
876static void fimd_dpms(struct exynos_drm_crtc *crtc, int mode)
877{
878 DRM_DEBUG_KMS("%s, %d\n", __FILE__, mode);
879
880 switch (mode) {
881 case DRM_MODE_DPMS_ON:
882 fimd_poweron(crtc->ctx);
883 break;
884 case DRM_MODE_DPMS_STANDBY:
885 case DRM_MODE_DPMS_SUSPEND:
886 case DRM_MODE_DPMS_OFF:
887 fimd_poweroff(crtc->ctx);
888 break;
889 default:
890 DRM_DEBUG_KMS("unspecified mode %d\n", mode);
891 break;
892 }
893} 851}
894 852
895static void fimd_trigger(struct device *dev) 853static void fimd_trigger(struct device *dev)
@@ -964,7 +922,8 @@ static void fimd_dp_clock_enable(struct exynos_drm_crtc *crtc, bool enable)
964} 922}
965 923
966static const struct exynos_drm_crtc_ops fimd_crtc_ops = { 924static const struct exynos_drm_crtc_ops fimd_crtc_ops = {
967 .dpms = fimd_dpms, 925 .enable = fimd_enable,
926 .disable = fimd_disable,
968 .mode_fixup = fimd_mode_fixup, 927 .mode_fixup = fimd_mode_fixup,
969 .commit = fimd_commit, 928 .commit = fimd_commit,
970 .enable_vblank = fimd_enable_vblank, 929 .enable_vblank = fimd_enable_vblank,
@@ -1051,7 +1010,7 @@ static void fimd_unbind(struct device *dev, struct device *master,
1051{ 1010{
1052 struct fimd_context *ctx = dev_get_drvdata(dev); 1011 struct fimd_context *ctx = dev_get_drvdata(dev);
1053 1012
1054 fimd_dpms(ctx->crtc, DRM_MODE_DPMS_OFF); 1013 fimd_disable(ctx->crtc);
1055 1014
1056 fimd_iommu_detach_devices(ctx); 1015 fimd_iommu_detach_devices(ctx);
1057 1016