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

Commit 4143e919 authored by Alex Deucher's avatar Alex Deucher Committed by Dave Airlie
Browse files

drm/radeon/kms: store sink type in atom dig connector



This will be used laster when the encoder and transmitters
are set up.

Signed-off-by: default avatarAlex Deucher <alexdeucher@gmail.com>
Signed-off-by: default avatarDave Airlie <airlied@redhat.com>
parent 6a93cb25
Loading
Loading
Loading
Loading
+3 −3
Original line number Diff line number Diff line
@@ -78,7 +78,7 @@ bool radeon_process_aux_ch(struct radeon_i2c_chan *chan, u8 *req_bytes,
	return true;
}

int radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clock,
static u8 radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clock,
				    uint8_t ucconfig, uint8_t lane_num)
{
	DP_ENCODER_SERVICE_PARAMETERS args;
@@ -95,7 +95,7 @@ int radeon_dp_encoder_service(struct radeon_device *rdev, int action, int dp_clo
	return args.ucStatus;
}

int radeon_dp_getsinktype(struct radeon_connector *radeon_connector)
u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector)
{
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
	struct drm_device *dev = radeon_connector->base.dev;
+11 −6
Original line number Diff line number Diff line
@@ -908,13 +908,9 @@ static int radeon_dp_get_modes(struct drm_connector *connector)
static enum drm_connector_status radeon_dp_detect(struct drm_connector *connector)
{
	struct radeon_connector *radeon_connector = to_radeon_connector(connector);
	struct drm_encoder *encoder = NULL;
	struct drm_encoder_helper_funcs *encoder_funcs;
	struct drm_mode_object *obj;
	int i;
	enum drm_connector_status ret = connector_status_disconnected;
	int sink_type;
	bool dret;
	struct radeon_connector_atom_dig *radeon_dig_connector = radeon_connector->con_priv;
	u8 sink_type;

	if (radeon_connector->edid) {
		kfree(radeon_connector->edid);
@@ -924,8 +920,17 @@ static enum drm_connector_status radeon_dp_detect(struct drm_connector *connecto
	sink_type = radeon_dp_getsinktype(radeon_connector);
	if (sink_type == CONNECTOR_OBJECT_ID_DISPLAYPORT) {
		radeon_dp_getdpcd(radeon_connector);
		radeon_dig_connector->dp_sink_type = sink_type;
		ret = connector_status_connected;
	} else {
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 1);
		if (radeon_ddc_probe(radeon_connector)) {
			radeon_dig_connector->dp_sink_type = sink_type;
			ret = connector_status_connected;
		}
		radeon_i2c_do_lock(radeon_connector->ddc_bus, 0);
	}

	return ret;
}

+3 −1
Original line number Diff line number Diff line
@@ -339,8 +339,10 @@ struct radeon_encoder {
struct radeon_connector_atom_dig {
	uint32_t igp_lane_info;
	bool linkb;
	/* displayport */
	struct radeon_i2c_chan *dp_i2c_bus;
	u8 dpcd[8];
	u8 dp_sink_type;
};

struct radeon_connector {
@@ -364,7 +366,7 @@ struct radeon_framebuffer {
	struct drm_gem_object *obj;
};

extern int radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
extern u8 radeon_dp_getsinktype(struct radeon_connector *radeon_connector);
extern void radeon_dp_getdpcd(struct radeon_connector *radeon_connector);
extern int radeon_dp_i2c_aux_ch(struct i2c_adapter *adapter, int mode,
				uint8_t write_byte, uint8_t *read_byte);