diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_hdmi.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_hdmi.c | 155 | 
1 files changed, 79 insertions, 76 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_hdmi.c b/drivers/gpu/drm/i915/display/intel_hdmi.c index f6f5312205c4..93ac0f296852 100644 --- a/drivers/gpu/drm/i915/display/intel_hdmi.c +++ b/drivers/gpu/drm/i915/display/intel_hdmi.c @@ -85,16 +85,17 @@ assert_hdmi_transcoder_func_disabled(struct drm_i915_private *dev_priv,  	     "HDMI transcoder function enabled, expecting disabled\n");  } -struct intel_hdmi *enc_to_intel_hdmi(struct drm_encoder *encoder) +struct intel_hdmi *enc_to_intel_hdmi(struct intel_encoder *encoder)  {  	struct intel_digital_port *intel_dig_port = -		container_of(encoder, struct intel_digital_port, base.base); +		container_of(&encoder->base, struct intel_digital_port, +			     base.base);  	return &intel_dig_port->hdmi;  } -static struct intel_hdmi *intel_attached_hdmi(struct drm_connector *connector) +static struct intel_hdmi *intel_attached_hdmi(struct intel_connector *connector)  { -	return enc_to_intel_hdmi(&intel_attached_encoder(connector)->base); +	return enc_to_intel_hdmi(intel_attached_encoder(connector));  }  static u32 g4x_infoframe_index(unsigned int type) @@ -285,7 +286,7 @@ static void ibx_write_infoframe(struct intel_encoder *encoder,  {  	const u32 *data = frame;  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc);  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg);  	int i; @@ -321,7 +322,7 @@ static void ibx_read_infoframe(struct intel_encoder *encoder,  			       void *frame, ssize_t len)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);  	u32 val, *data = frame;  	int i; @@ -340,7 +341,7 @@ static u32 ibx_infoframes_enabled(struct intel_encoder *encoder,  				  const struct intel_crtc_state *pipe_config)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	enum pipe pipe = to_intel_crtc(pipe_config->base.crtc)->pipe; +	enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe;  	i915_reg_t reg = TVIDEO_DIP_CTL(pipe);  	u32 val = I915_READ(reg); @@ -362,7 +363,7 @@ static void cpt_write_infoframe(struct intel_encoder *encoder,  {  	const u32 *data = frame;  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc);  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg);  	int i; @@ -401,7 +402,7 @@ static void cpt_read_infoframe(struct intel_encoder *encoder,  			       void *frame, ssize_t len)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);  	u32 val, *data = frame;  	int i; @@ -420,7 +421,7 @@ static u32 cpt_infoframes_enabled(struct intel_encoder *encoder,  				  const struct intel_crtc_state *pipe_config)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	enum pipe pipe = to_intel_crtc(pipe_config->base.crtc)->pipe; +	enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe;  	u32 val = I915_READ(TVIDEO_DIP_CTL(pipe));  	if ((val & VIDEO_DIP_ENABLE) == 0) @@ -438,7 +439,7 @@ static void vlv_write_infoframe(struct intel_encoder *encoder,  {  	const u32 *data = frame;  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc);  	i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg);  	int i; @@ -474,7 +475,7 @@ static void vlv_read_infoframe(struct intel_encoder *encoder,  			       void *frame, ssize_t len)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);  	u32 val, *data = frame;  	int i; @@ -493,7 +494,7 @@ static u32 vlv_infoframes_enabled(struct intel_encoder *encoder,  				  const struct intel_crtc_state *pipe_config)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	enum pipe pipe = to_intel_crtc(pipe_config->base.crtc)->pipe; +	enum pipe pipe = to_intel_crtc(pipe_config->uapi.crtc)->pipe;  	u32 val = I915_READ(VLV_TVIDEO_DIP_CTL(pipe));  	if ((val & VIDEO_DIP_ENABLE) == 0) @@ -602,7 +603,7 @@ u32 intel_hdmi_infoframes_enabled(struct intel_encoder *encoder,  				  const struct intel_crtc_state *crtc_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_digital_port *dig_port = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *dig_port = enc_to_dig_port(encoder);  	u32 val, ret = 0;  	int i; @@ -646,7 +647,7 @@ static void intel_write_infoframe(struct intel_encoder *encoder,  				  enum hdmi_infoframe_type type,  				  const union hdmi_infoframe *frame)  { -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);  	u8 buffer[VIDEO_DIP_DATA_SIZE];  	ssize_t len; @@ -675,7 +676,7 @@ void intel_read_infoframe(struct intel_encoder *encoder,  			  enum hdmi_infoframe_type type,  			  union hdmi_infoframe *frame)  { -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);  	u8 buffer[VIDEO_DIP_DATA_SIZE];  	int ret; @@ -708,7 +709,7 @@ intel_hdmi_compute_avi_infoframe(struct intel_encoder *encoder,  {  	struct hdmi_avi_infoframe *frame = &crtc_state->infoframes.avi.avi;  	const struct drm_display_mode *adjusted_mode = -		&crtc_state->base.adjusted_mode; +		&crtc_state->hw.adjusted_mode;  	struct drm_connector *connector = conn_state->connector;  	int ret; @@ -804,7 +805,7 @@ intel_hdmi_compute_hdmi_infoframe(struct intel_encoder *encoder,  	ret = drm_hdmi_vendor_infoframe_from_display_mode(frame,  							  conn_state->connector, -							  &crtc_state->base.adjusted_mode); +							  &crtc_state->hw.adjusted_mode);  	if (WARN_ON(ret))  		return false; @@ -855,7 +856,7 @@ static void g4x_set_infoframes(struct intel_encoder *encoder,  			       const struct drm_connector_state *conn_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;  	i915_reg_t reg = VIDEO_DIP_CTL;  	u32 val = I915_READ(reg); @@ -965,7 +966,7 @@ static bool intel_hdmi_set_gcp_infoframe(struct intel_encoder *encoder,  					 const struct drm_connector_state *conn_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);  	i915_reg_t reg;  	if ((crtc_state->infoframes.enable & @@ -990,7 +991,7 @@ void intel_hdmi_read_gcp_infoframe(struct intel_encoder *encoder,  				   struct intel_crtc_state *crtc_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);  	i915_reg_t reg;  	if ((crtc_state->infoframes.enable & @@ -1027,7 +1028,7 @@ static void intel_hdmi_compute_gcp_infoframe(struct intel_encoder *encoder,  	/* Enable default_phase whenever the display mode is suitably aligned */  	if (gcp_default_phase_possible(crtc_state->pipe_bpp, -				       &crtc_state->base.adjusted_mode)) +				       &crtc_state->hw.adjusted_mode))  		crtc_state->infoframes.gcp |= GCP_DEFAULT_PHASE_ENABLE;  } @@ -1037,8 +1038,8 @@ static void ibx_set_infoframes(struct intel_encoder *encoder,  			       const struct drm_connector_state *conn_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); -	struct intel_digital_port *intel_dig_port = enc_to_dig_port(&encoder->base); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); +	struct intel_digital_port *intel_dig_port = enc_to_dig_port(encoder);  	struct intel_hdmi *intel_hdmi = &intel_dig_port->hdmi;  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg); @@ -1096,8 +1097,8 @@ static void cpt_set_infoframes(struct intel_encoder *encoder,  			       const struct drm_connector_state *conn_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	i915_reg_t reg = TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg); @@ -1145,8 +1146,8 @@ static void vlv_set_infoframes(struct intel_encoder *encoder,  			       const struct drm_connector_state *conn_state)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->base.crtc); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_crtc *intel_crtc = to_intel_crtc(crtc_state->uapi.crtc); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	i915_reg_t reg = VLV_TVIDEO_DIP_CTL(intel_crtc->pipe);  	u32 val = I915_READ(reg);  	u32 port = VIDEO_DIP_PORT(encoder->port); @@ -1736,9 +1737,9 @@ static void intel_hdmi_prepare(struct intel_encoder *encoder,  {  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	struct intel_crtc *crtc = to_intel_crtc(crtc_state->base.crtc); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); -	const struct drm_display_mode *adjusted_mode = &crtc_state->base.adjusted_mode; +	struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder); +	const struct drm_display_mode *adjusted_mode = &crtc_state->hw.adjusted_mode;  	u32 hdmi_val;  	intel_dp_dual_mode_set_tmds_output(intel_hdmi, true); @@ -1774,7 +1775,7 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder,  				    enum pipe *pipe)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	intel_wakeref_t wakeref;  	bool ret; @@ -1793,7 +1794,7 @@ static bool intel_hdmi_get_hw_state(struct intel_encoder *encoder,  static void intel_hdmi_get_config(struct intel_encoder *encoder,  				  struct intel_crtc_state *pipe_config)  { -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev);  	u32 tmp, flags = 0; @@ -1829,7 +1830,7 @@ static void intel_hdmi_get_config(struct intel_encoder *encoder,  	    tmp & HDMI_COLOR_RANGE_16_235)  		pipe_config->limited_color_range = true; -	pipe_config->base.adjusted_mode.flags |= flags; +	pipe_config->hw.adjusted_mode.flags |= flags;  	if ((tmp & SDVO_COLOR_FORMAT_MASK) == HDMI_COLOR_FORMAT_12bpc)  		dotclock = pipe_config->port_clock * 2 / 3; @@ -1839,7 +1840,7 @@ static void intel_hdmi_get_config(struct intel_encoder *encoder,  	if (pipe_config->pixel_multiplier)  		dotclock /= pipe_config->pixel_multiplier; -	pipe_config->base.adjusted_mode.crtc_clock = dotclock; +	pipe_config->hw.adjusted_mode.crtc_clock = dotclock;  	pipe_config->lane_count = 4; @@ -1860,7 +1861,7 @@ static void intel_enable_hdmi_audio(struct intel_encoder *encoder,  				    const struct intel_crtc_state *pipe_config,  				    const struct drm_connector_state *conn_state)  { -	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc);  	WARN_ON(!pipe_config->has_hdmi_sink);  	DRM_DEBUG_DRIVER("Enabling HDMI audio on pipe %c\n", @@ -1874,7 +1875,7 @@ static void g4x_enable_hdmi(struct intel_encoder *encoder,  {  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	u32 temp;  	temp = I915_READ(intel_hdmi->hdmi_reg); @@ -1896,7 +1897,7 @@ static void ibx_enable_hdmi(struct intel_encoder *encoder,  {  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	u32 temp;  	temp = I915_READ(intel_hdmi->hdmi_reg); @@ -1946,8 +1947,8 @@ static void cpt_enable_hdmi(struct intel_encoder *encoder,  {  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	struct intel_crtc *crtc = to_intel_crtc(pipe_config->base.crtc); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_crtc *crtc = to_intel_crtc(pipe_config->uapi.crtc); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	enum pipe pipe = crtc->pipe;  	u32 temp; @@ -2007,10 +2008,10 @@ static void intel_disable_hdmi(struct intel_encoder *encoder,  {  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	struct intel_digital_port *intel_dig_port =  		hdmi_to_dig_port(intel_hdmi); -	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->base.crtc); +	struct intel_crtc *crtc = to_intel_crtc(old_crtc_state->uapi.crtc);  	u32 temp;  	temp = I915_READ(intel_hdmi->hdmi_reg); @@ -2160,7 +2161,7 @@ static enum drm_mode_status  intel_hdmi_mode_valid(struct drm_connector *connector,  		      struct drm_display_mode *mode)  { -	struct intel_hdmi *hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));  	struct drm_device *dev = intel_hdmi_to_dev(hdmi);  	struct drm_i915_private *dev_priv = to_i915(dev);  	enum drm_mode_status status; @@ -2210,12 +2211,12 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,  				     int bpc)  {  	struct drm_i915_private *dev_priv = -		to_i915(crtc_state->base.crtc->dev); -	struct drm_atomic_state *state = crtc_state->base.state; +		to_i915(crtc_state->uapi.crtc->dev); +	struct drm_atomic_state *state = crtc_state->uapi.state;  	struct drm_connector_state *connector_state;  	struct drm_connector *connector;  	const struct drm_display_mode *adjusted_mode = -		&crtc_state->base.adjusted_mode; +		&crtc_state->hw.adjusted_mode;  	int i;  	if (HAS_GMCH(dev_priv)) @@ -2240,7 +2241,7 @@ static bool hdmi_deep_color_possible(const struct intel_crtc_state *crtc_state,  	for_each_new_connector_in_state(state, connector, connector_state, i) {  		const struct drm_display_info *info = &connector->display_info; -		if (connector_state->crtc != crtc_state->base.crtc) +		if (connector_state->crtc != crtc_state->uapi.crtc)  			continue;  		if (crtc_state->output_format == INTEL_OUTPUT_FORMAT_YCBCR420) { @@ -2281,7 +2282,7 @@ static bool  intel_hdmi_ycbcr420_config(struct drm_connector *connector,  			   struct intel_crtc_state *config)  { -	struct intel_crtc *intel_crtc = to_intel_crtc(config->base.crtc); +	struct intel_crtc *intel_crtc = to_intel_crtc(config->uapi.crtc);  	if (!connector->ycbcr_420_allowed) {  		DRM_ERROR("Platform doesn't support YCBCR420 output\n"); @@ -2316,7 +2317,7 @@ static int intel_hdmi_compute_bpc(struct intel_encoder *encoder,  				  struct intel_crtc_state *crtc_state,  				  int clock, bool force_dvi)  { -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	int bpc;  	for (bpc = 12; bpc >= 10; bpc -= 2) { @@ -2334,9 +2335,9 @@ static int intel_hdmi_compute_clock(struct intel_encoder *encoder,  				    struct intel_crtc_state *crtc_state,  				    bool force_dvi)  { -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	const struct drm_display_mode *adjusted_mode = -		&crtc_state->base.adjusted_mode; +		&crtc_state->hw.adjusted_mode;  	int bpc, clock = adjusted_mode->crtc_clock;  	if (adjusted_mode->flags & DRM_MODE_FLAG_DBLCLK) @@ -2378,7 +2379,7 @@ static bool intel_hdmi_limited_color_range(const struct intel_crtc_state *crtc_s  	const struct intel_digital_connector_state *intel_conn_state =  		to_intel_digital_connector_state(conn_state);  	const struct drm_display_mode *adjusted_mode = -		&crtc_state->base.adjusted_mode; +		&crtc_state->hw.adjusted_mode;  	/*  	 * Our YCbCr output is always limited range. @@ -2404,9 +2405,9 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,  			      struct intel_crtc_state *pipe_config,  			      struct drm_connector_state *conn_state)  { -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct drm_display_mode *adjusted_mode = &pipe_config->base.adjusted_mode; +	struct drm_display_mode *adjusted_mode = &pipe_config->hw.adjusted_mode;  	struct drm_connector *connector = conn_state->connector;  	struct drm_scdc *scdc = &connector->display_info.hdmi.scdc;  	struct intel_digital_connector_state *intel_conn_state = @@ -2451,8 +2452,9 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,  	if (ret)  		return ret; -	/* Set user selected PAR to incoming mode's member */ -	adjusted_mode->picture_aspect_ratio = conn_state->picture_aspect_ratio; +	if (conn_state->picture_aspect_ratio) +		adjusted_mode->picture_aspect_ratio = +			conn_state->picture_aspect_ratio;  	pipe_config->lane_count = 4; @@ -2489,16 +2491,13 @@ int intel_hdmi_compute_config(struct intel_encoder *encoder,  		return -EINVAL;  	} -	intel_hdcp_transcoder_config(intel_hdmi->attached_connector, -				     pipe_config->cpu_transcoder); -  	return 0;  }  static void  intel_hdmi_unset_edid(struct drm_connector *connector)  { -	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));  	intel_hdmi->has_hdmi_sink = false;  	intel_hdmi->has_audio = false; @@ -2514,7 +2513,7 @@ static void  intel_hdmi_dp_dual_mode_detect(struct drm_connector *connector, bool has_edid)  {  	struct drm_i915_private *dev_priv = to_i915(connector->dev); -	struct intel_hdmi *hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *hdmi = intel_attached_hdmi(to_intel_connector(connector));  	enum port port = hdmi_to_dig_port(hdmi)->base.port;  	struct i2c_adapter *adapter =  		intel_gmbus_get_adapter(dev_priv, hdmi->ddc_bus); @@ -2561,7 +2560,7 @@ static bool  intel_hdmi_set_edid(struct drm_connector *connector)  {  	struct drm_i915_private *dev_priv = to_i915(connector->dev); -	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));  	intel_wakeref_t wakeref;  	struct edid *edid;  	bool connected = false; @@ -2602,7 +2601,7 @@ intel_hdmi_detect(struct drm_connector *connector, bool force)  {  	enum drm_connector_status status = connector_status_disconnected;  	struct drm_i915_private *dev_priv = to_i915(connector->dev); -	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));  	struct intel_encoder *encoder = &hdmi_to_dig_port(intel_hdmi)->base;  	intel_wakeref_t wakeref; @@ -2665,7 +2664,7 @@ static void intel_hdmi_pre_enable(struct intel_encoder *encoder,  				  const struct drm_connector_state *conn_state)  {  	struct intel_digital_port *intel_dig_port = -		enc_to_dig_port(&encoder->base); +		enc_to_dig_port(encoder);  	intel_hdmi_prepare(encoder, pipe_config); @@ -2678,7 +2677,7 @@ static void vlv_hdmi_pre_enable(struct intel_encoder *encoder,  				const struct intel_crtc_state *pipe_config,  				const struct drm_connector_state *conn_state)  { -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *dport = enc_to_dig_port(encoder);  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);  	vlv_phy_pre_encoder_enable(encoder, pipe_config); @@ -2748,7 +2747,7 @@ static void chv_hdmi_pre_enable(struct intel_encoder *encoder,  				const struct intel_crtc_state *pipe_config,  				const struct drm_connector_state *conn_state)  { -	struct intel_digital_port *dport = enc_to_dig_port(&encoder->base); +	struct intel_digital_port *dport = enc_to_dig_port(encoder);  	struct drm_device *dev = encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); @@ -2774,7 +2773,7 @@ static struct i2c_adapter *  intel_hdmi_get_i2c_adapter(struct drm_connector *connector)  {  	struct drm_i915_private *dev_priv = to_i915(connector->dev); -	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(connector); +	struct intel_hdmi *intel_hdmi = intel_attached_hdmi(to_intel_connector(connector));  	return intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus);  } @@ -2818,7 +2817,7 @@ intel_hdmi_connector_register(struct drm_connector *connector)  static void intel_hdmi_destroy(struct drm_connector *connector)  { -	struct cec_notifier *n = intel_attached_hdmi(connector)->cec_notifier; +	struct cec_notifier *n = intel_attached_hdmi(to_intel_connector(connector))->cec_notifier;  	cec_notifier_conn_unregister(n); @@ -2875,7 +2874,6 @@ intel_hdmi_add_properties(struct intel_hdmi *intel_hdmi, struct drm_connector *c  		intel_attach_colorspace_property(connector);  	drm_connector_attach_content_type_property(connector); -	connector->state->picture_aspect_ratio = HDMI_PICTURE_ASPECT_NONE;  	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))  		drm_object_attach_property(&connector->base, @@ -2909,7 +2907,7 @@ bool intel_hdmi_handle_sink_scrambling(struct intel_encoder *encoder,  				       bool scrambling)  {  	struct drm_i915_private *dev_priv = to_i915(encoder->base.dev); -	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(&encoder->base); +	struct intel_hdmi *intel_hdmi = enc_to_intel_hdmi(encoder);  	struct drm_scrambling *sink_scrambling =  		&connector->display_info.hdmi.scdc.scrambling;  	struct i2c_adapter *adapter = @@ -3134,20 +3132,29 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,  	struct intel_encoder *intel_encoder = &intel_dig_port->base;  	struct drm_device *dev = intel_encoder->base.dev;  	struct drm_i915_private *dev_priv = to_i915(dev); +	struct i2c_adapter *ddc;  	enum port port = intel_encoder->port;  	struct cec_connector_info conn_info;  	DRM_DEBUG_KMS("Adding HDMI connector on [ENCODER:%d:%s]\n",  		      intel_encoder->base.base.id, intel_encoder->base.name); +	if (INTEL_GEN(dev_priv) < 12 && WARN_ON(port == PORT_A)) +		return; +  	if (WARN(intel_dig_port->max_lanes < 4,  		 "Not enough lanes (%d) for HDMI on [ENCODER:%d:%s]\n",  		 intel_dig_port->max_lanes, intel_encoder->base.base.id,  		 intel_encoder->base.name))  		return; -	drm_connector_init(dev, connector, &intel_hdmi_connector_funcs, -			   DRM_MODE_CONNECTOR_HDMIA); +	intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port); +	ddc = intel_gmbus_get_adapter(dev_priv, intel_hdmi->ddc_bus); + +	drm_connector_init_with_ddc(dev, connector, +				    &intel_hdmi_connector_funcs, +				    DRM_MODE_CONNECTOR_HDMIA, +				    ddc);  	drm_connector_helper_add(connector, &intel_hdmi_connector_helper_funcs);  	connector->interlace_allowed = 1; @@ -3157,10 +3164,6 @@ void intel_hdmi_init_connector(struct intel_digital_port *intel_dig_port,  	if (INTEL_GEN(dev_priv) >= 10 || IS_GEMINILAKE(dev_priv))  		connector->ycbcr_420_allowed = true; -	intel_hdmi->ddc_bus = intel_hdmi_ddc_pin(dev_priv, port); - -	if (WARN_ON(port == PORT_A)) -		return;  	intel_encoder->hpd_pin = intel_hpd_pin_default(dev_priv, port);  	if (HAS_DDI(dev_priv))  |