diff options
| author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2018-06-28 16:13:10 +0300 | 
|---|---|---|
| committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2018-07-05 16:52:08 +0300 | 
| commit | 98c0e348c09575edccdd63e9d2938f090b0d8739 (patch) | |
| tree | fd62e3a8aa2a0143fe7e64f1a12cfc3264e9861e /drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | |
| parent | 83aefbb887b59df0b3520965c3701e01deacfc52 (diff) | |
| download | blackbird-op-linux-98c0e348c09575edccdd63e9d2938f090b0d8739.tar.gz blackbird-op-linux-98c0e348c09575edccdd63e9d2938f090b0d8739.zip  | |
drm/amdgpu: Use drm_connector_for_each_possible_encoder()
Use drm_connector_for_each_possible_encoder() for iterating
connector->encoder_ids[]. A bit more convenient not having
to deal with the implementation details.
v2: Replace drm_for_each_connector_encoder_ids() with
    drm_connector_for_each_possible_encoder() (Daniel)
Cc: Daniel Vetter <daniel.vetter@ffwll.ch>
Cc: Alex Deucher <alexander.deucher@amd.com>
Cc: "Christian König" <christian.koenig@amd.com>
Cc: "David (ChunMing) Zhou" <David1.Zhou@amd.com>
Cc: Harry Wentland <harry.wentland@amd.com>
Cc: amd-gfx@lists.freedesktop.org
Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180628131315.14156-5-ville.syrjala@linux.intel.com
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c')
| -rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | 81 | 
1 files changed, 21 insertions, 60 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c index 8e66851eb427..881f7cb7ae6e 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c @@ -212,30 +212,21 @@ static void  amdgpu_connector_update_scratch_regs(struct drm_connector *connector,  				      enum drm_connector_status status)  { -	struct drm_encoder *best_encoder = NULL; -	struct drm_encoder *encoder = NULL; +	struct drm_encoder *best_encoder; +	struct drm_encoder *encoder;  	const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;  	bool connected;  	int i;  	best_encoder = connector_funcs->best_encoder(connector); -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -		if (connector->encoder_ids[i] == 0) -			break; - -		encoder = drm_encoder_find(connector->dev, NULL, -					connector->encoder_ids[i]); -		if (!encoder) -			continue; - +	drm_connector_for_each_possible_encoder(connector, encoder, i) {  		if ((encoder == best_encoder) && (status == connector_status_connected))  			connected = true;  		else  			connected = false;  		amdgpu_atombios_encoder_set_bios_scratch_regs(connector, encoder, connected); -  	}  } @@ -246,17 +237,11 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,  	struct drm_encoder *encoder;  	int i; -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -		if (connector->encoder_ids[i] == 0) -			break; -		encoder = drm_encoder_find(connector->dev, NULL, -					connector->encoder_ids[i]); -		if (!encoder) -			continue; - +	drm_connector_for_each_possible_encoder(connector, encoder, i) {  		if (encoder->encoder_type == encoder_type)  			return encoder;  	} +  	return NULL;  } @@ -360,11 +345,13 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector)  static struct drm_encoder *  amdgpu_connector_best_single_encoder(struct drm_connector *connector)  { -	int enc_id = connector->encoder_ids[0]; +	struct drm_encoder *encoder; +	int i; + +	/* pick the first one */ +	drm_connector_for_each_possible_encoder(connector, encoder, i) +		return encoder; -	/* pick the encoder ids */ -	if (enc_id) -		return drm_encoder_find(connector->dev, NULL, enc_id);  	return NULL;  } @@ -985,9 +972,8 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)  	struct drm_device *dev = connector->dev;  	struct amdgpu_device *adev = dev->dev_private;  	struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); -	struct drm_encoder *encoder = NULL;  	const struct drm_encoder_helper_funcs *encoder_funcs; -	int i, r; +	int r;  	enum drm_connector_status ret = connector_status_disconnected;  	bool dret = false, broken_edid = false; @@ -1077,14 +1063,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)  	/* find analog encoder */  	if (amdgpu_connector->dac_load_detect) { -		for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -			if (connector->encoder_ids[i] == 0) -				break; - -			encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); -			if (!encoder) -				continue; +		struct drm_encoder *encoder; +		int i; +		drm_connector_for_each_possible_encoder(connector, encoder, i) {  			if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&  			    encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)  				continue; @@ -1132,18 +1114,11 @@ exit:  static struct drm_encoder *  amdgpu_connector_dvi_encoder(struct drm_connector *connector)  { -	int enc_id = connector->encoder_ids[0];  	struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);  	struct drm_encoder *encoder;  	int i; -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -		if (connector->encoder_ids[i] == 0) -			break; - -		encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); -		if (!encoder) -			continue; +	drm_connector_for_each_possible_encoder(connector, encoder, i) {  		if (amdgpu_connector->use_digital == true) {  			if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)  				return encoder; @@ -1158,8 +1133,9 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector)  	/* then check use digitial */  	/* pick the first one */ -	if (enc_id) -		return drm_encoder_find(connector->dev, NULL, enc_id); +	drm_connector_for_each_possible_encoder(connector, encoder, i) +		return encoder; +  	return NULL;  } @@ -1296,15 +1272,7 @@ u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn  	struct amdgpu_encoder *amdgpu_encoder;  	int i; -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -		if (connector->encoder_ids[i] == 0) -			break; - -		encoder = drm_encoder_find(connector->dev, NULL, -					connector->encoder_ids[i]); -		if (!encoder) -			continue; - +	drm_connector_for_each_possible_encoder(connector, encoder, i) {  		amdgpu_encoder = to_amdgpu_encoder(encoder);  		switch (amdgpu_encoder->encoder_id) { @@ -1326,14 +1294,7 @@ static bool amdgpu_connector_encoder_is_hbr2(struct drm_connector *connector)  	int i;  	bool found = false; -	for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { -		if (connector->encoder_ids[i] == 0) -			break; -		encoder = drm_encoder_find(connector->dev, NULL, -					connector->encoder_ids[i]); -		if (!encoder) -			continue; - +	drm_connector_for_each_possible_encoder(connector, encoder, i) {  		amdgpu_encoder = to_amdgpu_encoder(encoder);  		if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)  			found = true;  | 

