diff options
author | Dave Airlie <airlied@redhat.com> | 2016-07-14 23:50:58 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-07-14 23:50:58 -0400 |
commit | ff37c05a996bb96eccc21f4fb1b32ba0e24f3443 (patch) | |
tree | c09b09b37521f2f8f3f7a9bb3b0a33a2b3bde1a1 /drivers/gpu/drm/i915/intel_sdvo.c | |
parent | 6c181c82106e12dced317e93a7a396cbb8c64f75 (diff) | |
parent | 0b2c0582f1570bfc95aa9ac1cd340a215d8e8335 (diff) |
Merge tag 'drm-intel-next-2016-07-11' of git://anongit.freedesktop.org/drm-intel into drm-next
- select igt testing depencies for CONFIG_DRM_I915_DEBUG (Chris)
- track outputs in crtc state and clean up all our ad-hoc connector/encoder
walking in modest code (Ville)
- demidlayer drm_device/drm_i915_private (Chris Wilson)
- thundering herd fix from Chris Wilson, with lots of help from Tvrtko Ursulin
- piles of assorted clean and fallout from the thundering herd fix
- documentation and more tuning for waitboosting (Chris)
- pooled EU support on bxt (Arun Siluvery)
- bxt support is no longer considered prelimary!
- ring/engine vfunc cleanup from Tvrtko
- introduce intel_wait_for_register helper (Chris)
- opregion updates (Jani Nukla)
- tuning and fixes for wait_for macros (Tvrkto&Imre)
- more kabylake pci ids (Rodrigo)
- pps cleanup and fixes for bxt (Imre)
- move sink crc support over to atomic state (Maarten)
- fix up async fbdev init ordering (Chris)
- fbc fixes from Paulo and Chris
* tag 'drm-intel-next-2016-07-11' of git://anongit.freedesktop.org/drm-intel: (223 commits)
drm/i915: Update DRIVER_DATE to 20160711
drm/i915: Select DRM_VGEM for igt
drm/i915: Select X86_MSR for igt
drm/i915: Fill unused GGTT with scratch pages for VT-d
drm/i915: Introduce Kabypoint PCH for Kabylake H/DT.
drm/i915:gen9: implement WaMediaPoolStateCmdInWABB
drm/i915: Check for invalid cloning earlier during modeset
drm/i915: Simplify hdmi_12bpc_possible()
drm/i915: Kill has_dsi_encoder
drm/i915: s/INTEL_OUTPUT_DISPLAYPORT/INTEL_OUTPUT_DP/
drm/i915: Replace some open coded intel_crtc_has_dp_encoder()s
drm/i915: Kill has_dp_encoder from pipe_config
drm/i915: Replace manual lvds and sdvo/hdmi counting with intel_crtc_has_type()
drm/i915: Unify intel_pipe_has_type() and intel_pipe_will_have_type()
drm/i915: Add output_types bitmask into the crtc state
drm/i915: Remove encoder type checks from MST suspend/resume
drm/i915: Don't mark eDP encoders as MST capable
drm/i915: avoid wait_for_atomic() in non-atomic host2guc_action()
drm/i915: Group the irq breadcrumb variables into the same cacheline
drm/i915: Wake up the bottom-half if we steal their interrupt
...
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; |