diff options
author | Ajay Kumar <ajaykumar.rs@samsung.com> | 2014-07-31 13:42:13 -0400 |
---|---|---|
committer | Thierry Reding <treding@nvidia.com> | 2014-08-06 10:44:15 -0400 |
commit | 4deabfa00049465cc1e4ed6fe0b5082bcff98d57 (patch) | |
tree | 3e5943b138c9b9d543be152e8c96c446c67622b8 | |
parent | 3e51d609321601627fb571bdc403c330f416d1af (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.c | 24 |
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) | |||
875 | static void exynos_dp_hotplug(struct work_struct *work) | 875 | static 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 | |||
885 | static 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 | ||
1053 | static void exynos_dp_poweron(struct exynos_dp_device *dp) | 1061 | static 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 | ||
1064 | static void exynos_dp_poweroff(struct exynos_dp_device *dp) | 1075 | static 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) | |||
1094 | static struct exynos_drm_display_ops exynos_dp_display_ops = { | 1107 | static 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 | ||
1099 | static struct exynos_drm_display exynos_dp_display = { | 1113 | static struct exynos_drm_display exynos_dp_display = { |