Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 84c86116 authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge branch 'drm-fixes' of git://people.freedesktop.org/~airlied/linux

* 'drm-fixes' of git://people.freedesktop.org/~airlied/linux:
  drm/radeon/kms: use hardcoded dig encoder to transmitter mapping for DCE4.1
  drm/radeon/kms: fix dp_detect handling for DP bridge chips
  drm/radeon/kms: retry aux transactions if there are status flags
parents 746fb63c cb7cf419
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -129,7 +129,9 @@ static int radeon_dp_aux_native_write(struct radeon_connector *radeon_connector,
	for (retry = 0; retry < 4; retry++) {
		ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus,
					    msg, msg_bytes, NULL, 0, delay, &ack);
		if (ret < 0)
		if (ret == -EBUSY)
			continue;
		else if (ret < 0)
			return ret;
		if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
			return send_bytes;
@@ -160,7 +162,9 @@ static int radeon_dp_aux_native_read(struct radeon_connector *radeon_connector,
	for (retry = 0; retry < 4; retry++) {
		ret = radeon_process_aux_ch(dig_connector->dp_i2c_bus,
					    msg, msg_bytes, recv, recv_bytes, delay, &ack);
		if (ret < 0)
		if (ret == -EBUSY)
			continue;
		else if (ret < 0)
			return ret;
		if ((ack & AUX_NATIVE_REPLY_MASK) == AUX_NATIVE_REPLY_ACK)
			return ret;
@@ -236,7 +240,9 @@ int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
	for (retry = 0; retry < 4; retry++) {
		ret = radeon_process_aux_ch(auxch,
					    msg, msg_bytes, reply, reply_bytes, 0, &ack);
		if (ret < 0) {
		if (ret == -EBUSY)
			continue;
		else if (ret < 0) {
			DRM_DEBUG_KMS("aux_ch failed %d\n", ret);
			return ret;
		}
+6 −15
Original line number Diff line number Diff line
@@ -1303,23 +1303,14 @@ radeon_dp_detect(struct drm_connector *connector, bool force)
		/* get the DPCD from the bridge */
		radeon_dp_getdpcd(radeon_connector);

		if (radeon_hpd_sense(rdev, radeon_connector->hpd.hpd))
			ret = connector_status_connected;
		else {
			/* need to setup ddc on the bridge */
			if (encoder)
		if (encoder) {
			/* setup ddc on the bridge */
			radeon_atom_ext_encoder_setup_ddc(encoder);
			if (radeon_ddc_probe(radeon_connector,
					     radeon_connector->requires_extended_probe))
					     radeon_connector->requires_extended_probe)) /* try DDC */
				ret = connector_status_connected;
		}

		if ((ret == connector_status_disconnected) &&
		    radeon_connector->dac_load_detect) {
			struct drm_encoder *encoder = radeon_best_single_encoder(connector);
			struct drm_encoder_helper_funcs *encoder_funcs;
			if (encoder) {
				encoder_funcs = encoder->helper_private;
			else if (radeon_connector->dac_load_detect) { /* try load detection */
				struct drm_encoder_helper_funcs *encoder_funcs = encoder->helper_private;
				ret = encoder_funcs->detect(encoder, connector);
			}
		}
+6 −3
Original line number Diff line number Diff line
@@ -1755,9 +1755,12 @@ static int radeon_atom_pick_dig_encoder(struct drm_encoder *encoder)
	/* DCE4/5 */
	if (ASIC_IS_DCE4(rdev)) {
		dig = radeon_encoder->enc_priv;
		if (ASIC_IS_DCE41(rdev))
			return radeon_crtc->crtc_id;
		else {
		if (ASIC_IS_DCE41(rdev)) {
			if (dig->linkb)
				return 1;
			else
				return 0;
		} else {
			switch (radeon_encoder->encoder_id) {
			case ENCODER_OBJECT_ID_INTERNAL_UNIPHY:
				if (dig->linkb)