diff options
Diffstat (limited to 'drivers/gpu/drm/i915/intel_sdvo.c')
-rw-r--r-- | drivers/gpu/drm/i915/intel_sdvo.c | 58 |
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, | |||
240 | static void intel_sdvo_write_sdvox(struct intel_sdvo *intel_sdvo, u32 val) | 240 | static 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, | |||
1195 | static void intel_sdvo_pre_enable(struct intel_encoder *intel_encoder) | 1195 | static 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 | ||
1437 | static void intel_disable_sdvo(struct intel_encoder *encoder) | 1437 | static 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) | |||
1489 | static void intel_enable_sdvo(struct intel_encoder *encoder) | 1489 | static 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) | |||
1633 | static struct edid * | 1633 | static struct edid * |
1634 | intel_sdvo_get_analog_edid(struct drm_connector *connector) | 1634 | intel_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) | |||
1916 | static void intel_sdvo_get_lvds_modes(struct drm_connector *connector) | 1916 | static 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 | ||
2180 | static int | ||
2181 | intel_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 | |||
2180 | static void | 2195 | static void |
2181 | intel_sdvo_connector_unregister(struct drm_connector *connector) | 2196 | intel_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) | |||
2322 | static u8 | 2338 | static u8 |
2323 | intel_sdvo_get_slave_addr(struct drm_device *dev, struct intel_sdvo *sdvo) | 2339 | intel_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 | |||
2395 | err2: | ||
2396 | drm_connector_unregister(drm_connector); | ||
2397 | err1: | ||
2398 | drm_connector_cleanup(drm_connector); | ||
2399 | |||
2400 | return ret; | ||
2401 | } | 2401 | } |
2402 | 2402 | ||
2403 | static void | 2403 | static void |
@@ -2524,7 +2524,6 @@ intel_sdvo_tv_init(struct intel_sdvo *intel_sdvo, int type) | |||
2524 | return true; | 2524 | return true; |
2525 | 2525 | ||
2526 | err: | 2526 | err: |
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 | ||
2605 | err: | 2604 | err: |
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, | |||
2954 | bool intel_sdvo_init(struct drm_device *dev, | 2952 | bool 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; |