diff options
| author | Paulo Zanoni <paulo.r.zanoni@intel.com> | 2012-10-26 19:05:51 -0200 | 
|---|---|---|
| committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2012-11-11 23:51:08 +0100 | 
| commit | bcbc889bc44a781577479939490f6b7452d5b808 (patch) | |
| tree | dac2e6c1913448e347426555a7092c3ddf02bd97 /drivers/gpu/drm/i915/intel_ddi.c | |
| parent | 174edf1f867dc573439675f9b4c2211012d4b563 (diff) | |
| download | olio-linux-3.10-bcbc889bc44a781577479939490f6b7452d5b808.tar.xz olio-linux-3.10-bcbc889bc44a781577479939490f6b7452d5b808.zip  | |
drm/i915: add intel_ddi_connector_get_hw_state
We need this since now on DDI we will have 2 connectors on each
encoder.
Signed-off-by: Paulo Zanoni <paulo.r.zanoni@intel.com>
Reviewed-by: Damien Lespiau <damien.lespiau@intel.com>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ddi.c')
| -rw-r--r-- | drivers/gpu/drm/i915/intel_ddi.c | 40 | 
1 files changed, 40 insertions, 0 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c index a8eda963f2b..58a529d9f1e 100644 --- a/drivers/gpu/drm/i915/intel_ddi.c +++ b/drivers/gpu/drm/i915/intel_ddi.c @@ -1023,6 +1023,46 @@ void intel_ddi_disable_transcoder_func(struct drm_i915_private *dev_priv,  	I915_WRITE(reg, val);  } +bool intel_ddi_connector_get_hw_state(struct intel_connector *intel_connector) +{ +	struct drm_device *dev = intel_connector->base.dev; +	struct drm_i915_private *dev_priv = dev->dev_private; +	struct intel_encoder *intel_encoder = intel_connector->encoder; +	int type = intel_connector->base.connector_type; +	enum port port = intel_ddi_get_encoder_port(intel_encoder); +	enum pipe pipe = 0; +	enum transcoder cpu_transcoder; +	uint32_t tmp; + +	if (!intel_encoder->get_hw_state(intel_encoder, &pipe)) +		return false; + +	if (port == PORT_A) +		cpu_transcoder = TRANSCODER_EDP; +	else +		cpu_transcoder = pipe; + +	tmp = I915_READ(TRANS_DDI_FUNC_CTL(cpu_transcoder)); + +	switch (tmp & TRANS_DDI_MODE_SELECT_MASK) { +	case TRANS_DDI_MODE_SELECT_HDMI: +	case TRANS_DDI_MODE_SELECT_DVI: +		return (type == DRM_MODE_CONNECTOR_HDMIA); + +	case TRANS_DDI_MODE_SELECT_DP_SST: +		if (type == DRM_MODE_CONNECTOR_eDP) +			return true; +	case TRANS_DDI_MODE_SELECT_DP_MST: +		return (type == DRM_MODE_CONNECTOR_DisplayPort); + +	case TRANS_DDI_MODE_SELECT_FDI: +		return (type == DRM_MODE_CONNECTOR_VGA); + +	default: +		return false; +	} +} +  bool intel_ddi_get_hw_state(struct intel_encoder *encoder,  			    enum pipe *pipe)  {  |