aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_sdvo.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sdvo.c')
-rw-r--r--drivers/gpu/drm/i915/intel_sdvo.c58
1 files changed, 28 insertions, 30 deletions
diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
index 02b4a6695528..e378f35365a2 100644
--- a/drivers/gpu/drm/i915/intel_sdvo.c
+++ b/drivers/gpu/drm/i915/intel_sdvo.c
@@ -240,7 +240,7 @@ intel_sdvo_create_enhance_property(struct intel_sdvo *intel_sdvo,
240static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val) 240static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val)
241{ 241{
242 struct drm_device *dev = intel_sdvo->base.base.dev; 242 struct drm_device *dev = intel_sdvo->base.base.dev;
243 struct drm_i915_private *dev_priv = dev->dev_private; 243 struct drm_i915_private *dev_priv = to_i915(dev);
244 u32 bval = val, cval = val; 244 u32 bval = val, cval = val;
245 int i; 245 int i;
246 246
@@ -1195,7 +1195,7 @@ static bool intel_sdvo_compute_config(struct intel_encoder *encoder,
1195static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder) 1195static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder)
1196{ 1196{
1197 struct drm_device *dev = intel_encoder->base.dev; 1197 struct drm_device *dev = intel_encoder->base.dev;
1198 struct drm_i915_private *dev_priv = dev->dev_private; 1198 struct drm_i915_private *dev_priv = to_i915(dev);
1199 struct intel_crtc *crtc = to_intel_crtc(intel_encoder->base.crtc); 1199 struct intel_crtc *crtc = to_intel_crtc(intel_encoder->base.crtc);
1200 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode; 1200 const struct drm_display_mode *adjusted_mode = &crtc->config->base.adjusted_mode;
1201 struct drm_display_mode *mode = &crtc->config->base.mode; 1201 struct drm_display_mode *mode = &crtc->config->base.mode;
@@ -1330,7 +1330,7 @@ static bool intel_sdvo_get_hw_state(struct intel_encoder *encoder,
1330 enum pipe *pipe) 1330 enum pipe *pipe)
1331{ 1331{
1332 struct drm_device *dev = encoder->base.dev; 1332 struct drm_device *dev = encoder->base.dev;
1333 struct drm_i915_private *dev_priv = dev->dev_private; 1333 struct drm_i915_private *dev_priv = to_i915(dev);
1334 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); 1334 struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
1335 u16 active_outputs = 0; 1335 u16 active_outputs = 0;
1336 u32 tmp; 1336 u32 tmp;
@@ -1353,7 +1353,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
1353 struct intel_crtc_state *pipe_config) 1353 struct intel_crtc_state *pipe_config)
1354{ 1354{
1355 struct drm_device *dev = encoder->base.dev; 1355 struct drm_device *dev = encoder->base.dev;
1356 struct drm_i915_private *dev_priv = dev->dev_private; 1356 struct drm_i915_private *dev_priv = to_i915(dev);
1357 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); 1357 struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
1358 struct intel_sdvo_dtd dtd; 1358 struct intel_sdvo_dtd dtd;
1359 int encoder_pixel_multiplier = 0; 1359 int encoder_pixel_multiplier = 0;
@@ -1436,7 +1436,7 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder,
1436 1436
1437static void intel_disable_sdvo(struct intel_encoder *encoder) 1437static void intel_disable_sdvo(struct intel_encoder *encoder)
1438{ 1438{
1439 struct drm_i915_private *dev_priv = encoder->base.dev->dev_private; 1439 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
1440 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); 1440 struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
1441 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc); 1441 struct intel_crtc *crtc = to_intel_crtc(encoder->base.crtc);
1442 u32 temp; 1442 u32 temp;
@@ -1471,7 +1471,7 @@ static void intel_disable_sdvo(struct intel_encoder *encoder)
1471 temp &= ~SDVO_ENABLE; 1471 temp &= ~SDVO_ENABLE;
1472 intel_sdvo_write_sdvox(intel_sdvo, temp); 1472 intel_sdvo_write_sdvox(intel_sdvo, temp);
1473 1473
1474 intel_wait_for_vblank_if_active(dev_priv->dev, PIPE_A); 1474 intel_wait_for_vblank_if_active(&dev_priv->drm, PIPE_A);
1475 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1475 intel_set_cpu_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1476 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true); 1476 intel_set_pch_fifo_underrun_reporting(dev_priv, PIPE_A, true);
1477 } 1477 }
@@ -1489,7 +1489,7 @@ static void pch_post_disable_sdvo(struct intel_encoder *encoder)
1489static void intel_enable_sdvo(struct intel_encoder *encoder) 1489static void intel_enable_sdvo(struct intel_encoder *encoder)
1490{ 1490{
1491 struct drm_device *dev = encoder->base.dev; 1491 struct drm_device *dev = encoder->base.dev;
1492 struct drm_i915_private *dev_priv = dev->dev_private; 1492 struct drm_i915_private *dev_priv = to_i915(dev);
1493 struct intel_sdvo *intel_sdvo = to_sdvo(encoder); 1493 struct intel_sdvo *intel_sdvo = to_sdvo(encoder);
1494 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc); 1494 struct intel_crtc *intel_crtc = to_intel_crtc(encoder->base.crtc);
1495 u32 temp; 1495 u32 temp;
@@ -1633,7 +1633,7 @@ intel_sdvo_get_edid(struct drm_connector *connector)
1633static struct edid * 1633static struct edid *
1634intel_sdvo_get_analog_edid(struct drm_connector *connector) 1634intel_sdvo_get_analog_edid(struct drm_connector *connector)
1635{ 1635{
1636 struct drm_i915_private *dev_priv = connector->dev->dev_private; 1636 struct drm_i915_private *dev_priv = to_i915(connector->dev);
1637 1637
1638 return drm_get_edid(connector, 1638 return drm_get_edid(connector,
1639 intel_gmbus_get_adapter(dev_priv, 1639 intel_gmbus_get_adapter(dev_priv,
@@ -1916,7 +1916,7 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector)
1916static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) 1916static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
1917{ 1917{
1918 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); 1918 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
1919 struct drm_i915_private *dev_priv = connector->dev->dev_private; 1919 struct drm_i915_private *dev_priv = to_i915(connector->dev);
1920 struct drm_display_mode *newmode; 1920 struct drm_display_mode *newmode;
1921 1921
1922 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n", 1922 DRM_DEBUG_KMS("[CONNECTOR:%d:%s]\n",
@@ -2001,7 +2001,7 @@ intel_sdvo_set_property(struct drm_connector *connector,
2001{ 2001{
2002 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector); 2002 struct intel_sdvo *intel_sdvo = intel_attached_sdvo(connector);
2003 struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector); 2003 struct intel_sdvo_connector *intel_sdvo_connector = to_intel_sdvo_connector(connector);
2004 struct drm_i915_private *dev_priv = connector->dev->dev_private; 2004 struct drm_i915_private *dev_priv = to_i915(connector->dev);
2005 uint16_t temp_value; 2005 uint16_t temp_value;
2006 uint8_t cmd; 2006 uint8_t cmd;
2007 int ret; 2007 int ret;
@@ -2177,6 +2177,21 @@ done:
2177#undef CHECK_PROPERTY 2177#undef CHECK_PROPERTY
2178} 2178}
2179 2179
2180static int
2181intel_sdvo_connector_register(struct drm_connector *connector)
2182{
2183 struct intel_sdvo *sdvo = intel_attached_sdvo(connector);
2184 int ret;
2185
2186 ret = intel_connector_register(connector);
2187 if (ret)
2188 return ret;
2189
2190 return sysfs_create_link(&connector->kdev->kobj,
2191 &sdvo->ddc.dev.kobj,
2192 sdvo->ddc.dev.kobj.name);
2193}
2194
2180static void 2195static void
2181intel_sdvo_connector_unregister(struct drm_connector *connector) 2196intel_sdvo_connector_unregister(struct drm_connector *connector)
2182{ 2197{
@@ -2193,6 +2208,7 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
2193 .fill_modes = drm_helper_probe_single_connector_modes, 2208 .fill_modes = drm_helper_probe_single_connector_modes,
2194 .set_property = intel_sdvo_set_property, 2209 .set_property = intel_sdvo_set_property,
2195 .atomic_get_property = intel_connector_atomic_get_property, 2210 .atomic_get_property = intel_connector_atomic_get_property,
2211 .late_register = intel_sdvo_connector_register,
2196 .early_unregister = intel_sdvo_connector_unregister, 2212 .early_unregister = intel_sdvo_connector_unregister,
2197 .destroy = intel_sdvo_destroy, 2213 .destroy = intel_sdvo_destroy,
2198 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state, 2214 .atomic_destroy_state = drm_atomic_helper_connector_destroy_state,
@@ -2322,7 +2338,7 @@ intel_sdvo_is_hdmi_connector(struct intel_sdvo *intel_sdvo, int device)
2322static u8 2338static u8
2323intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo) 2339intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo)
2324{ 2340{
2325 struct drm_i915_private *dev_priv = dev->dev_private; 2341 struct drm_i915_private *dev_priv = to_i915(dev);
2326 struct sdvo_device_mapping *my_mapping, *other_mapping; 2342 struct sdvo_device_mapping *my_mapping, *other_mapping;
2327 2343
2328 if (sdvo->port == PORT_B) { 2344 if (sdvo->port == PORT_B) {
@@ -2380,24 +2396,8 @@ intel_sdvo_connector_init(struct intel_sdvo_connector *connector,
2380 connector->base.get_hw_state = intel_sdvo_connector_get_hw_state; 2396 connector->base.get_hw_state = intel_sdvo_connector_get_hw_state;
2381 2397
2382 intel_connector_attach_encoder(&connector->base, &encoder->base); 2398 intel_connector_attach_encoder(&connector->base, &encoder->base);
2383 ret = drm_connector_register(drm_connector);
2384 if (ret < 0)
2385 goto err1;
2386
2387 ret = sysfs_create_link(&drm_connector->kdev->kobj,
2388 &encoder->ddc.dev.kobj,
2389 encoder->ddc.dev.kobj.name);
2390 if (ret < 0)
2391 goto err2;
2392 2399
2393 return 0; 2400 return 0;
2394
2395err2:
2396 drm_connector_unregister(drm_connector);
2397err1:
2398 drm_connector_cleanup(drm_connector);
2399
2400 return ret;
2401} 2401}
2402 2402
2403static void 2403static void
@@ -2524,7 +2524,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type)
2524 return true; 2524 return true;
2525 2525
2526err: 2526err:
2527 drm_connector_unregister(connector);
2528 intel_sdvo_destroy(connector); 2527 intel_sdvo_destroy(connector);
2529 return false; 2528 return false;
2530} 2529}
@@ -2603,7 +2602,6 @@ intel_sdvo_lvds_init(struct intel_sdvo *intel_sdvo, int device)
2603 return true; 2602 return true;
2604 2603
2605err: 2604err:
2606 drm_connector_unregister(connector);
2607 intel_sdvo_destroy(connector); 2605 intel_sdvo_destroy(connector);
2608 return false; 2606 return false;
2609} 2607}
@@ -2954,7 +2952,7 @@ static void assert_sdvo_port_valid(const struct drm_i915_private *dev_priv,
2954bool intel_sdvo_init(struct drm_device *dev, 2952bool intel_sdvo_init(struct drm_device *dev,
2955 i915_reg_t sdvo_reg, enum port port) 2953 i915_reg_t sdvo_reg, enum port port)
2956{ 2954{
2957 struct drm_i915_private *dev_priv = dev->dev_private; 2955 struct drm_i915_private *dev_priv = to_i915(dev);
2958 struct intel_encoder *intel_encoder; 2956 struct intel_encoder *intel_encoder;
2959 struct intel_sdvo *intel_sdvo; 2957 struct intel_sdvo *intel_sdvo;
2960 int i; 2958 int i;