aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAjay Kumar <ajaykumar.rs@samsung.com>2014-07-31 13:42:13 -0400
committerThierry Reding <treding@nvidia.com>2014-08-06 10:44:15 -0400
commit4deabfa00049465cc1e4ed6fe0b5082bcff98d57 (patch)
tree3e5943b138c9b9d543be152e8c96c446c67622b8
parent3e51d609321601627fb571bdc403c330f416d1af (diff)
drm/exynos: Move DP setup into commit()
Add commit callback for exynos_dp, and move the DP link training, video configuration code from the hotplug handler into commit(). Signed-off-by: Sean Paul <seanpaul@chromium.org> Signed-off-by: Ajay Kumar <ajaykumar.rs@samsung.com> Acked-by: Inki Dae <inki.dae@samsung.com> Signed-off-by: Thierry Reding <treding@nvidia.com>
-rw-r--r--drivers/gpu/drm/exynos/exynos_dp_core.c24
1 files changed, 19 insertions, 5 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_dp_core.c b/drivers/gpu/drm/exynos/exynos_dp_core.c
index a8ffc8c1477b..c33a9d0a87c1 100644
--- a/drivers/gpu/drm/exynos/exynos_dp_core.c
+++ b/drivers/gpu/drm/exynos/exynos_dp_core.c
@@ -875,10 +875,18 @@ static irqreturn_t exynos_dp_irq_handler(int irq, void *arg)
875static void exynos_dp_hotplug(struct work_struct *work) 875static void exynos_dp_hotplug(struct work_struct *work)
876{ 876{
877 struct exynos_dp_device *dp; 877 struct exynos_dp_device *dp;
878 int ret;
879 878
880 dp = container_of(work, struct exynos_dp_device, hotplug_work); 879 dp = container_of(work, struct exynos_dp_device, hotplug_work);
881 880
881 if (dp->drm_dev)
882 drm_helper_hpd_irq_event(dp->drm_dev);
883}
884
885static void exynos_dp_commit(struct exynos_drm_display *display)
886{
887 struct exynos_dp_device *dp = display->ctx;
888 int ret;
889
882 ret = exynos_dp_detect_hpd(dp); 890 ret = exynos_dp_detect_hpd(dp);
883 if (ret) { 891 if (ret) {
884 /* Cable has been disconnected, we're done */ 892 /* Cable has been disconnected, we're done */
@@ -1050,8 +1058,10 @@ static void exynos_dp_phy_exit(struct exynos_dp_device *dp)
1050 } 1058 }
1051} 1059}
1052 1060
1053static void exynos_dp_poweron(struct exynos_dp_device *dp) 1061static void exynos_dp_poweron(struct exynos_drm_display *display)
1054{ 1062{
1063 struct exynos_dp_device *dp = display->ctx;
1064
1055 if (dp->dpms_mode == DRM_MODE_DPMS_ON) 1065 if (dp->dpms_mode == DRM_MODE_DPMS_ON)
1056 return; 1066 return;
1057 1067
@@ -1059,10 +1069,13 @@ static void exynos_dp_poweron(struct exynos_dp_device *dp)
1059 exynos_dp_phy_init(dp); 1069 exynos_dp_phy_init(dp);
1060 exynos_dp_init_dp(dp); 1070 exynos_dp_init_dp(dp);
1061 enable_irq(dp->irq); 1071 enable_irq(dp->irq);
1072 exynos_dp_commit(display);
1062} 1073}
1063 1074
1064static void exynos_dp_poweroff(struct exynos_dp_device *dp) 1075static void exynos_dp_poweroff(struct exynos_drm_display *display)
1065{ 1076{
1077 struct exynos_dp_device *dp = display->ctx;
1078
1066 if (dp->dpms_mode != DRM_MODE_DPMS_ON) 1079 if (dp->dpms_mode != DRM_MODE_DPMS_ON)
1067 return; 1080 return;
1068 1081
@@ -1078,12 +1091,12 @@ static void exynos_dp_dpms(struct exynos_drm_display *display, int mode)
1078 1091
1079 switch (mode) { 1092 switch (mode) {
1080 case DRM_MODE_DPMS_ON: 1093 case DRM_MODE_DPMS_ON:
1081 exynos_dp_poweron(dp); 1094 exynos_dp_poweron(display);
1082 break; 1095 break;
1083 case DRM_MODE_DPMS_STANDBY: 1096 case DRM_MODE_DPMS_STANDBY:
1084 case DRM_MODE_DPMS_SUSPEND: 1097 case DRM_MODE_DPMS_SUSPEND:
1085 case DRM_MODE_DPMS_OFF: 1098 case DRM_MODE_DPMS_OFF:
1086 exynos_dp_poweroff(dp); 1099 exynos_dp_poweroff(display);
1087 break; 1100 break;
1088 default: 1101 default:
1089 break; 1102 break;
@@ -1094,6 +1107,7 @@ static void exynos_dp_dpms(struct exynos_drm_display *display, int mode)
1094static struct exynos_drm_display_ops exynos_dp_display_ops = { 1107static struct exynos_drm_display_ops exynos_dp_display_ops = {
1095 .create_connector = exynos_dp_create_connector, 1108 .create_connector = exynos_dp_create_connector,
1096 .dpms = exynos_dp_dpms, 1109 .dpms = exynos_dp_dpms,
1110 .commit = exynos_dp_commit,
1097}; 1111};
1098 1112
1099static struct exynos_drm_display exynos_dp_display = { 1113static struct exynos_drm_display exynos_dp_display = {