Commit 98c0e348 authored by Ville Syrjälä's avatar Ville Syrjälä

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: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Reviewed-by: default avatarAlex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20180628131315.14156-5-ville.syrjala@linux.intel.com
parent 83aefbb8
...@@ -212,30 +212,21 @@ static void ...@@ -212,30 +212,21 @@ static void
amdgpu_connector_update_scratch_regs(struct drm_connector *connector, amdgpu_connector_update_scratch_regs(struct drm_connector *connector,
enum drm_connector_status status) enum drm_connector_status status)
{ {
struct drm_encoder *best_encoder = NULL; struct drm_encoder *best_encoder;
struct drm_encoder *encoder = NULL; struct drm_encoder *encoder;
const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
bool connected; bool connected;
int i; int i;
best_encoder = connector_funcs->best_encoder(connector); best_encoder = connector_funcs->best_encoder(connector);
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { drm_connector_for_each_possible_encoder(connector, encoder, i) {
if (connector->encoder_ids[i] == 0)
break;
encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]);
if (!encoder)
continue;
if ((encoder == best_encoder) && (status == connector_status_connected)) if ((encoder == best_encoder) && (status == connector_status_connected))
connected = true; connected = true;
else else
connected = false; connected = false;
amdgpu_atombios_encoder_set_bios_scratch_regs(connector, encoder, connected); amdgpu_atombios_encoder_set_bios_scratch_regs(connector, encoder, connected);
} }
} }
...@@ -246,17 +237,11 @@ amdgpu_connector_find_encoder(struct drm_connector *connector, ...@@ -246,17 +237,11 @@ amdgpu_connector_find_encoder(struct drm_connector *connector,
struct drm_encoder *encoder; struct drm_encoder *encoder;
int i; int i;
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { drm_connector_for_each_possible_encoder(connector, encoder, i) {
if (connector->encoder_ids[i] == 0)
break;
encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]);
if (!encoder)
continue;
if (encoder->encoder_type == encoder_type) if (encoder->encoder_type == encoder_type)
return encoder; return encoder;
} }
return NULL; return NULL;
} }
...@@ -360,11 +345,13 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector) ...@@ -360,11 +345,13 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector)
static struct drm_encoder * static struct drm_encoder *
amdgpu_connector_best_single_encoder(struct drm_connector *connector) 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; return NULL;
} }
...@@ -985,9 +972,8 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force) ...@@ -985,9 +972,8 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
struct drm_device *dev = connector->dev; struct drm_device *dev = connector->dev;
struct amdgpu_device *adev = dev->dev_private; struct amdgpu_device *adev = dev->dev_private;
struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
struct drm_encoder *encoder = NULL;
const struct drm_encoder_helper_funcs *encoder_funcs; const struct drm_encoder_helper_funcs *encoder_funcs;
int i, r; int r;
enum drm_connector_status ret = connector_status_disconnected; enum drm_connector_status ret = connector_status_disconnected;
bool dret = false, broken_edid = false; bool dret = false, broken_edid = false;
...@@ -1077,14 +1063,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force) ...@@ -1077,14 +1063,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
/* find analog encoder */ /* find analog encoder */
if (amdgpu_connector->dac_load_detect) { if (amdgpu_connector->dac_load_detect) {
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { struct drm_encoder *encoder;
if (connector->encoder_ids[i] == 0) int i;
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 != DRM_MODE_ENCODER_DAC && if (encoder->encoder_type != DRM_MODE_ENCODER_DAC &&
encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) encoder->encoder_type != DRM_MODE_ENCODER_TVDAC)
continue; continue;
...@@ -1132,18 +1114,11 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force) ...@@ -1132,18 +1114,11 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force)
static struct drm_encoder * static struct drm_encoder *
amdgpu_connector_dvi_encoder(struct drm_connector *connector) 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 amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector);
struct drm_encoder *encoder; struct drm_encoder *encoder;
int i; 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 (amdgpu_connector->use_digital == true) {
if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
return encoder; return encoder;
...@@ -1158,8 +1133,9 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector) ...@@ -1158,8 +1133,9 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector)
/* then check use digitial */ /* then check use digitial */
/* pick the first one */ /* pick the first one */
if (enc_id) drm_connector_for_each_possible_encoder(connector, encoder, i)
return drm_encoder_find(connector->dev, NULL, enc_id); return encoder;
return NULL; return NULL;
} }
...@@ -1296,15 +1272,7 @@ u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn ...@@ -1296,15 +1272,7 @@ u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn
struct amdgpu_encoder *amdgpu_encoder; struct amdgpu_encoder *amdgpu_encoder;
int i; int i;
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { drm_connector_for_each_possible_encoder(connector, encoder, i) {
if (connector->encoder_ids[i] == 0)
break;
encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]);
if (!encoder)
continue;
amdgpu_encoder = to_amdgpu_encoder(encoder); amdgpu_encoder = to_amdgpu_encoder(encoder);
switch (amdgpu_encoder->encoder_id) { switch (amdgpu_encoder->encoder_id) {
...@@ -1326,14 +1294,7 @@ static bool amdgpu_connector_encoder_is_hbr2(struct drm_connector *connector) ...@@ -1326,14 +1294,7 @@ static bool amdgpu_connector_encoder_is_hbr2(struct drm_connector *connector)
int i; int i;
bool found = false; bool found = false;
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { drm_connector_for_each_possible_encoder(connector, encoder, i) {
if (connector->encoder_ids[i] == 0)
break;
encoder = drm_encoder_find(connector->dev, NULL,
connector->encoder_ids[i]);
if (!encoder)
continue;
amdgpu_encoder = to_amdgpu_encoder(encoder); amdgpu_encoder = to_amdgpu_encoder(encoder);
if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2)
found = true; found = true;
......
...@@ -269,25 +269,18 @@ static int dce_virtual_early_init(void *handle) ...@@ -269,25 +269,18 @@ static int dce_virtual_early_init(void *handle)
static struct drm_encoder * static struct drm_encoder *
dce_virtual_encoder(struct drm_connector *connector) dce_virtual_encoder(struct drm_connector *connector)
{ {
int enc_id = connector->encoder_ids[0];
struct drm_encoder *encoder; struct drm_encoder *encoder;
int i; int i;
for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { drm_connector_for_each_possible_encoder(connector, encoder, i) {
if (connector->encoder_ids[i] == 0)
break;
encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]);
if (!encoder)
continue;
if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL) if (encoder->encoder_type == DRM_MODE_ENCODER_VIRTUAL)
return encoder; return encoder;
} }
/* pick the first one */ /* pick the first one */
if (enc_id) drm_connector_for_each_possible_encoder(connector, encoder, i)
return drm_encoder_find(connector->dev, NULL, enc_id); return encoder;
return NULL; return NULL;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment