aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_dp.c
diff options
context:
space:
mode:
authorPaulo Zanoni <paulo.r.zanoni@intel.com>2012-10-26 17:05:45 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2012-11-11 17:51:05 -0500
commit30add22d8459f8ac28d7ead366129224e0d17c43 (patch)
tree15d6c36c5a8bec4c971e82aa6454125ef16d78a5 /drivers/gpu/drm/i915/intel_dp.c
parentfa90ecefdc656b1e25af18251707907dbc1e7609 (diff)
drm/i915: add intel_dp_to_dev and intel_hdmi_to_dev
When we add struct intel_digital_port, there will be no direct way of going from intel_{dp,hdmi} to drm_device: we will need to call container_of(). This patch adds functions to go from intel_{dp,hdmi} to drm_device. The main goal here is to greatly reduce the size of the next patch, where we will change the implementation of the functions we just added here (among other things). Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com> Reviewed-by: Damien Lespiau <damien.lespiau@gmail.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_dp.c')
-rw-r--r--drivers/gpu/drm/i915/intel_dp.c48
1 files changed, 27 insertions, 21 deletions
diff --git a/drivers/gpu/drm/i915/intel_dp.c b/drivers/gpu/drm/i915/intel_dp.c
index 5c03e66f5ffa..6cc6a5c81dc6 100644
--- a/drivers/gpu/drm/i915/intel_dp.c
+++ b/drivers/gpu/drm/i915/intel_dp.c
@@ -74,6 +74,11 @@ static bool is_cpu_edp(struct intel_dp *intel_dp)
74 return is_edp(intel_dp) && !is_pch_edp(intel_dp); 74 return is_edp(intel_dp) && !is_pch_edp(intel_dp);
75} 75}
76 76
77static struct drm_device *intel_dp_to_dev(struct intel_dp *intel_dp)
78{
79 return intel_dp->base.base.dev;
80}
81
77static struct intel_dp *intel_attached_dp(struct drm_connector *connector) 82static struct intel_dp *intel_attached_dp(struct drm_connector *connector)
78{ 83{
79 return enc_to_intel_dp(&intel_attached_encoder(connector)->base); 84 return enc_to_intel_dp(&intel_attached_encoder(connector)->base);
@@ -291,7 +296,7 @@ intel_hrawclk(struct drm_device *dev)
291 296
292static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp) 297static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
293{ 298{
294 struct drm_device *dev = intel_dp->base.base.dev; 299 struct drm_device *dev = intel_dp_to_dev(intel_dp);
295 struct drm_i915_private *dev_priv = dev->dev_private; 300 struct drm_i915_private *dev_priv = dev->dev_private;
296 301
297 return (I915_READ(PCH_PP_STATUS) & PP_ON) != 0; 302 return (I915_READ(PCH_PP_STATUS) & PP_ON) != 0;
@@ -299,7 +304,7 @@ static bool ironlake_edp_have_panel_power(struct intel_dp *intel_dp)
299 304
300static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp) 305static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
301{ 306{
302 struct drm_device *dev = intel_dp->base.base.dev; 307 struct drm_device *dev = intel_dp_to_dev(intel_dp);
303 struct drm_i915_private *dev_priv = dev->dev_private; 308 struct drm_i915_private *dev_priv = dev->dev_private;
304 309
305 return (I915_READ(PCH_PP_CONTROL) & EDP_FORCE_VDD) != 0; 310 return (I915_READ(PCH_PP_CONTROL) & EDP_FORCE_VDD) != 0;
@@ -308,7 +313,7 @@ static bool ironlake_edp_have_panel_vdd(struct intel_dp *intel_dp)
308static void 313static void
309intel_dp_check_edp(struct intel_dp *intel_dp) 314intel_dp_check_edp(struct intel_dp *intel_dp)
310{ 315{
311 struct drm_device *dev = intel_dp->base.base.dev; 316 struct drm_device *dev = intel_dp_to_dev(intel_dp);
312 struct drm_i915_private *dev_priv = dev->dev_private; 317 struct drm_i915_private *dev_priv = dev->dev_private;
313 318
314 if (!is_edp(intel_dp)) 319 if (!is_edp(intel_dp))
@@ -327,7 +332,7 @@ intel_dp_aux_ch(struct intel_dp *intel_dp,
327 uint8_t *recv, int recv_size) 332 uint8_t *recv, int recv_size)
328{ 333{
329 uint32_t output_reg = intel_dp->output_reg; 334 uint32_t output_reg = intel_dp->output_reg;
330 struct drm_device *dev = intel_dp->base.base.dev; 335 struct drm_device *dev = intel_dp_to_dev(intel_dp);
331 struct drm_i915_private *dev_priv = dev->dev_private; 336 struct drm_i915_private *dev_priv = dev->dev_private;
332 uint32_t ch_ctl = output_reg + 0x10; 337 uint32_t ch_ctl = output_reg + 0x10;
333 uint32_t ch_data = ch_ctl + 4; 338 uint32_t ch_data = ch_ctl + 4;
@@ -955,7 +960,7 @@ static void ironlake_wait_panel_status(struct intel_dp *intel_dp,
955 u32 mask, 960 u32 mask,
956 u32 value) 961 u32 value)
957{ 962{
958 struct drm_device *dev = intel_dp->base.base.dev; 963 struct drm_device *dev = intel_dp_to_dev(intel_dp);
959 struct drm_i915_private *dev_priv = dev->dev_private; 964 struct drm_i915_private *dev_priv = dev->dev_private;
960 965
961 DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n", 966 DRM_DEBUG_KMS("mask %08x value %08x status %08x control %08x\n",
@@ -1004,7 +1009,7 @@ static u32 ironlake_get_pp_control(struct drm_i915_private *dev_priv)
1004 1009
1005void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp) 1010void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
1006{ 1011{
1007 struct drm_device *dev = intel_dp->base.base.dev; 1012 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1008 struct drm_i915_private *dev_priv = dev->dev_private; 1013 struct drm_i915_private *dev_priv = dev->dev_private;
1009 u32 pp; 1014 u32 pp;
1010 1015
@@ -1043,7 +1048,7 @@ void ironlake_edp_panel_vdd_on(struct intel_dp *intel_dp)
1043 1048
1044static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp) 1049static void ironlake_panel_vdd_off_sync(struct intel_dp *intel_dp)
1045{ 1050{
1046 struct drm_device *dev = intel_dp->base.base.dev; 1051 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1047 struct drm_i915_private *dev_priv = dev->dev_private; 1052 struct drm_i915_private *dev_priv = dev->dev_private;
1048 u32 pp; 1053 u32 pp;
1049 1054
@@ -1065,7 +1070,7 @@ static void ironlake_panel_vdd_work(struct work_struct *__work)
1065{ 1070{
1066 struct intel_dp *intel_dp = container_of(to_delayed_work(__work), 1071 struct intel_dp *intel_dp = container_of(to_delayed_work(__work),
1067 struct intel_dp, panel_vdd_work); 1072 struct intel_dp, panel_vdd_work);
1068 struct drm_device *dev = intel_dp->base.base.dev; 1073 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1069 1074
1070 mutex_lock(&dev->mode_config.mutex); 1075 mutex_lock(&dev->mode_config.mutex);
1071 ironlake_panel_vdd_off_sync(intel_dp); 1076 ironlake_panel_vdd_off_sync(intel_dp);
@@ -1097,7 +1102,7 @@ void ironlake_edp_panel_vdd_off(struct intel_dp *intel_dp, bool sync)
1097 1102
1098void ironlake_edp_panel_on(struct intel_dp *intel_dp) 1103void ironlake_edp_panel_on(struct intel_dp *intel_dp)
1099{ 1104{
1100 struct drm_device *dev = intel_dp->base.base.dev; 1105 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1101 struct drm_i915_private *dev_priv = dev->dev_private; 1106 struct drm_i915_private *dev_priv = dev->dev_private;
1102 u32 pp; 1107 u32 pp;
1103 1108
@@ -1139,7 +1144,7 @@ void ironlake_edp_panel_on(struct intel_dp *intel_dp)
1139 1144
1140void ironlake_edp_panel_off(struct intel_dp *intel_dp) 1145void ironlake_edp_panel_off(struct intel_dp *intel_dp)
1141{ 1146{
1142 struct drm_device *dev = intel_dp->base.base.dev; 1147 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1143 struct drm_i915_private *dev_priv = dev->dev_private; 1148 struct drm_i915_private *dev_priv = dev->dev_private;
1144 u32 pp; 1149 u32 pp;
1145 1150
@@ -1164,7 +1169,7 @@ void ironlake_edp_panel_off(struct intel_dp *intel_dp)
1164 1169
1165void ironlake_edp_backlight_on(struct intel_dp *intel_dp) 1170void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
1166{ 1171{
1167 struct drm_device *dev = intel_dp->base.base.dev; 1172 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1168 struct drm_i915_private *dev_priv = dev->dev_private; 1173 struct drm_i915_private *dev_priv = dev->dev_private;
1169 int pipe = to_intel_crtc(intel_dp->base.base.crtc)->pipe; 1174 int pipe = to_intel_crtc(intel_dp->base.base.crtc)->pipe;
1170 u32 pp; 1175 u32 pp;
@@ -1190,7 +1195,7 @@ void ironlake_edp_backlight_on(struct intel_dp *intel_dp)
1190 1195
1191void ironlake_edp_backlight_off(struct intel_dp *intel_dp) 1196void ironlake_edp_backlight_off(struct intel_dp *intel_dp)
1192{ 1197{
1193 struct drm_device *dev = intel_dp->base.base.dev; 1198 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1194 struct drm_i915_private *dev_priv = dev->dev_private; 1199 struct drm_i915_private *dev_priv = dev->dev_private;
1195 u32 pp; 1200 u32 pp;
1196 1201
@@ -1209,7 +1214,7 @@ void ironlake_edp_backlight_off(struct intel_dp *intel_dp)
1209 1214
1210static void ironlake_edp_pll_on(struct intel_dp *intel_dp) 1215static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
1211{ 1216{
1212 struct drm_device *dev = intel_dp->base.base.dev; 1217 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1213 struct drm_crtc *crtc = intel_dp->base.base.crtc; 1218 struct drm_crtc *crtc = intel_dp->base.base.crtc;
1214 struct drm_i915_private *dev_priv = dev->dev_private; 1219 struct drm_i915_private *dev_priv = dev->dev_private;
1215 u32 dpa_ctl; 1220 u32 dpa_ctl;
@@ -1234,7 +1239,7 @@ static void ironlake_edp_pll_on(struct intel_dp *intel_dp)
1234 1239
1235static void ironlake_edp_pll_off(struct intel_dp *intel_dp) 1240static void ironlake_edp_pll_off(struct intel_dp *intel_dp)
1236{ 1241{
1237 struct drm_device *dev = intel_dp->base.base.dev; 1242 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1238 struct drm_crtc *crtc = intel_dp->base.base.crtc; 1243 struct drm_crtc *crtc = intel_dp->base.base.crtc;
1239 struct drm_i915_private *dev_priv = dev->dev_private; 1244 struct drm_i915_private *dev_priv = dev->dev_private;
1240 u32 dpa_ctl; 1245 u32 dpa_ctl;
@@ -1446,7 +1451,7 @@ static char *link_train_names[] = {
1446static uint8_t 1451static uint8_t
1447intel_dp_voltage_max(struct intel_dp *intel_dp) 1452intel_dp_voltage_max(struct intel_dp *intel_dp)
1448{ 1453{
1449 struct drm_device *dev = intel_dp->base.base.dev; 1454 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1450 1455
1451 if (IS_GEN7(dev) && is_cpu_edp(intel_dp)) 1456 if (IS_GEN7(dev) && is_cpu_edp(intel_dp))
1452 return DP_TRAIN_VOLTAGE_SWING_800; 1457 return DP_TRAIN_VOLTAGE_SWING_800;
@@ -1459,7 +1464,7 @@ intel_dp_voltage_max(struct intel_dp *intel_dp)
1459static uint8_t 1464static uint8_t
1460intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing) 1465intel_dp_pre_emphasis_max(struct intel_dp *intel_dp, uint8_t voltage_swing)
1461{ 1466{
1462 struct drm_device *dev = intel_dp->base.base.dev; 1467 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1463 1468
1464 if (IS_HASWELL(dev)) { 1469 if (IS_HASWELL(dev)) {
1465 switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) { 1470 switch (voltage_swing & DP_TRAIN_VOLTAGE_SWING_MASK) {
@@ -1665,7 +1670,7 @@ intel_dp_set_link_train(struct intel_dp *intel_dp,
1665 uint32_t dp_reg_value, 1670 uint32_t dp_reg_value,
1666 uint8_t dp_train_pat) 1671 uint8_t dp_train_pat)
1667{ 1672{
1668 struct drm_device *dev = intel_dp->base.base.dev; 1673 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1669 struct drm_i915_private *dev_priv = dev->dev_private; 1674 struct drm_i915_private *dev_priv = dev->dev_private;
1670 int ret; 1675 int ret;
1671 uint32_t temp; 1676 uint32_t temp;
@@ -1862,7 +1867,7 @@ intel_dp_start_link_train(struct intel_dp *intel_dp)
1862void 1867void
1863intel_dp_complete_link_train(struct intel_dp *intel_dp) 1868intel_dp_complete_link_train(struct intel_dp *intel_dp)
1864{ 1869{
1865 struct drm_device *dev = intel_dp->base.base.dev; 1870 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1866 bool channel_eq = false; 1871 bool channel_eq = false;
1867 int tries, cr_tries; 1872 int tries, cr_tries;
1868 uint32_t DP = intel_dp->DP; 1873 uint32_t DP = intel_dp->DP;
@@ -1941,7 +1946,7 @@ intel_dp_complete_link_train(struct intel_dp *intel_dp)
1941static void 1946static void
1942intel_dp_link_down(struct intel_dp *intel_dp) 1947intel_dp_link_down(struct intel_dp *intel_dp)
1943{ 1948{
1944 struct drm_device *dev = intel_dp->base.base.dev; 1949 struct drm_device *dev = intel_dp_to_dev(intel_dp);
1945 struct drm_i915_private *dev_priv = dev->dev_private; 1950 struct drm_i915_private *dev_priv = dev->dev_private;
1946 uint32_t DP = intel_dp->DP; 1951 uint32_t DP = intel_dp->DP;
1947 1952
@@ -2183,11 +2188,12 @@ intel_dp_detect_dpcd(struct intel_dp *intel_dp)
2183static enum drm_connector_status 2188static enum drm_connector_status
2184ironlake_dp_detect(struct intel_dp *intel_dp) 2189ironlake_dp_detect(struct intel_dp *intel_dp)
2185{ 2190{
2191 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2186 enum drm_connector_status status; 2192 enum drm_connector_status status;
2187 2193
2188 /* Can't disconnect eDP, but you can close the lid... */ 2194 /* Can't disconnect eDP, but you can close the lid... */
2189 if (is_edp(intel_dp)) { 2195 if (is_edp(intel_dp)) {
2190 status = intel_panel_detect(intel_dp->base.base.dev); 2196 status = intel_panel_detect(dev);
2191 if (status == connector_status_unknown) 2197 if (status == connector_status_unknown)
2192 status = connector_status_connected; 2198 status = connector_status_connected;
2193 return status; 2199 return status;
@@ -2199,7 +2205,7 @@ ironlake_dp_detect(struct intel_dp *intel_dp)
2199static enum drm_connector_status 2205static enum drm_connector_status
2200g4x_dp_detect(struct intel_dp *intel_dp) 2206g4x_dp_detect(struct intel_dp *intel_dp)
2201{ 2207{
2202 struct drm_device *dev = intel_dp->base.base.dev; 2208 struct drm_device *dev = intel_dp_to_dev(intel_dp);
2203 struct drm_i915_private *dev_priv = dev->dev_private; 2209 struct drm_i915_private *dev_priv = dev->dev_private;
2204 uint32_t bit; 2210 uint32_t bit;
2205 2211