diff options
author | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2018-06-28 09:13:10 -0400 |
---|---|---|
committer | Ville Syrjälä <ville.syrjala@linux.intel.com> | 2018-07-05 09:52:08 -0400 |
commit | 98c0e348c09575edccdd63e9d2938f090b0d8739 (patch) | |
tree | fd62e3a8aa2a0143fe7e64f1a12cfc3264e9861e /drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c | |
parent | 83aefbb887b59df0b3520965c3701e01deacfc52 (diff) |
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 | |||
212 | amdgpu_connector_update_scratch_regs(struct drm_connector *connector, | 212 | amdgpu_connector_update_scratch_regs(struct drm_connector *connector, |
213 | enum drm_connector_status status) | 213 | enum drm_connector_status status) |
214 | { | 214 | { |
215 | struct drm_encoder *best_encoder = NULL; | 215 | struct drm_encoder *best_encoder; |
216 | struct drm_encoder *encoder = NULL; | 216 | struct drm_encoder *encoder; |
217 | const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; | 217 | const struct drm_connector_helper_funcs *connector_funcs = connector->helper_private; |
218 | bool connected; | 218 | bool connected; |
219 | int i; | 219 | int i; |
220 | 220 | ||
221 | best_encoder = connector_funcs->best_encoder(connector); | 221 | best_encoder = connector_funcs->best_encoder(connector); |
222 | 222 | ||
223 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 223 | drm_connector_for_each_possible_encoder(connector, encoder, i) { |
224 | if (connector->encoder_ids[i] == 0) | ||
225 | break; | ||
226 | |||
227 | encoder = drm_encoder_find(connector->dev, NULL, | ||
228 | connector->encoder_ids[i]); | ||
229 | if (!encoder) | ||
230 | continue; | ||
231 | |||
232 | if ((encoder == best_encoder) && (status == connector_status_connected)) | 224 | if ((encoder == best_encoder) && (status == connector_status_connected)) |
233 | connected = true; | 225 | connected = true; |
234 | else | 226 | else |
235 | connected = false; | 227 | connected = false; |
236 | 228 | ||
237 | amdgpu_atombios_encoder_set_bios_scratch_regs(connector, encoder, connected); | 229 | amdgpu_atombios_encoder_set_bios_scratch_regs(connector, encoder, connected); |
238 | |||
239 | } | 230 | } |
240 | } | 231 | } |
241 | 232 | ||
@@ -246,17 +237,11 @@ amdgpu_connector_find_encoder(struct drm_connector *connector, | |||
246 | struct drm_encoder *encoder; | 237 | struct drm_encoder *encoder; |
247 | int i; | 238 | int i; |
248 | 239 | ||
249 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 240 | drm_connector_for_each_possible_encoder(connector, encoder, i) { |
250 | if (connector->encoder_ids[i] == 0) | ||
251 | break; | ||
252 | encoder = drm_encoder_find(connector->dev, NULL, | ||
253 | connector->encoder_ids[i]); | ||
254 | if (!encoder) | ||
255 | continue; | ||
256 | |||
257 | if (encoder->encoder_type == encoder_type) | 241 | if (encoder->encoder_type == encoder_type) |
258 | return encoder; | 242 | return encoder; |
259 | } | 243 | } |
244 | |||
260 | return NULL; | 245 | return NULL; |
261 | } | 246 | } |
262 | 247 | ||
@@ -360,11 +345,13 @@ static int amdgpu_connector_ddc_get_modes(struct drm_connector *connector) | |||
360 | static struct drm_encoder * | 345 | static struct drm_encoder * |
361 | amdgpu_connector_best_single_encoder(struct drm_connector *connector) | 346 | amdgpu_connector_best_single_encoder(struct drm_connector *connector) |
362 | { | 347 | { |
363 | int enc_id = connector->encoder_ids[0]; | 348 | struct drm_encoder *encoder; |
349 | int i; | ||
350 | |||
351 | /* pick the first one */ | ||
352 | drm_connector_for_each_possible_encoder(connector, encoder, i) | ||
353 | return encoder; | ||
364 | 354 | ||
365 | /* pick the encoder ids */ | ||
366 | if (enc_id) | ||
367 | return drm_encoder_find(connector->dev, NULL, enc_id); | ||
368 | return NULL; | 355 | return NULL; |
369 | } | 356 | } |
370 | 357 | ||
@@ -985,9 +972,8 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force) | |||
985 | struct drm_device *dev = connector->dev; | 972 | struct drm_device *dev = connector->dev; |
986 | struct amdgpu_device *adev = dev->dev_private; | 973 | struct amdgpu_device *adev = dev->dev_private; |
987 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); | 974 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); |
988 | struct drm_encoder *encoder = NULL; | ||
989 | const struct drm_encoder_helper_funcs *encoder_funcs; | 975 | const struct drm_encoder_helper_funcs *encoder_funcs; |
990 | int i, r; | 976 | int r; |
991 | enum drm_connector_status ret = connector_status_disconnected; | 977 | enum drm_connector_status ret = connector_status_disconnected; |
992 | bool dret = false, broken_edid = false; | 978 | bool dret = false, broken_edid = false; |
993 | 979 | ||
@@ -1077,14 +1063,10 @@ amdgpu_connector_dvi_detect(struct drm_connector *connector, bool force) | |||
1077 | 1063 | ||
1078 | /* find analog encoder */ | 1064 | /* find analog encoder */ |
1079 | if (amdgpu_connector->dac_load_detect) { | 1065 | if (amdgpu_connector->dac_load_detect) { |
1080 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 1066 | struct drm_encoder *encoder; |
1081 | if (connector->encoder_ids[i] == 0) | 1067 | int i; |
1082 | break; | ||
1083 | |||
1084 | encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); | ||
1085 | if (!encoder) | ||
1086 | continue; | ||
1087 | 1068 | ||
1069 | drm_connector_for_each_possible_encoder(connector, encoder, i) { | ||
1088 | if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && | 1070 | if (encoder->encoder_type != DRM_MODE_ENCODER_DAC && |
1089 | encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) | 1071 | encoder->encoder_type != DRM_MODE_ENCODER_TVDAC) |
1090 | continue; | 1072 | continue; |
@@ -1132,18 +1114,11 @@ exit: | |||
1132 | static struct drm_encoder * | 1114 | static struct drm_encoder * |
1133 | amdgpu_connector_dvi_encoder(struct drm_connector *connector) | 1115 | amdgpu_connector_dvi_encoder(struct drm_connector *connector) |
1134 | { | 1116 | { |
1135 | int enc_id = connector->encoder_ids[0]; | ||
1136 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); | 1117 | struct amdgpu_connector *amdgpu_connector = to_amdgpu_connector(connector); |
1137 | struct drm_encoder *encoder; | 1118 | struct drm_encoder *encoder; |
1138 | int i; | 1119 | int i; |
1139 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | ||
1140 | if (connector->encoder_ids[i] == 0) | ||
1141 | break; | ||
1142 | |||
1143 | encoder = drm_encoder_find(connector->dev, NULL, connector->encoder_ids[i]); | ||
1144 | if (!encoder) | ||
1145 | continue; | ||
1146 | 1120 | ||
1121 | drm_connector_for_each_possible_encoder(connector, encoder, i) { | ||
1147 | if (amdgpu_connector->use_digital == true) { | 1122 | if (amdgpu_connector->use_digital == true) { |
1148 | if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) | 1123 | if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS) |
1149 | return encoder; | 1124 | return encoder; |
@@ -1158,8 +1133,9 @@ amdgpu_connector_dvi_encoder(struct drm_connector *connector) | |||
1158 | 1133 | ||
1159 | /* then check use digitial */ | 1134 | /* then check use digitial */ |
1160 | /* pick the first one */ | 1135 | /* pick the first one */ |
1161 | if (enc_id) | 1136 | drm_connector_for_each_possible_encoder(connector, encoder, i) |
1162 | return drm_encoder_find(connector->dev, NULL, enc_id); | 1137 | return encoder; |
1138 | |||
1163 | return NULL; | 1139 | return NULL; |
1164 | } | 1140 | } |
1165 | 1141 | ||
@@ -1296,15 +1272,7 @@ u16 amdgpu_connector_encoder_get_dp_bridge_encoder_id(struct drm_connector *conn | |||
1296 | struct amdgpu_encoder *amdgpu_encoder; | 1272 | struct amdgpu_encoder *amdgpu_encoder; |
1297 | int i; | 1273 | int i; |
1298 | 1274 | ||
1299 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 1275 | drm_connector_for_each_possible_encoder(connector, encoder, i) { |
1300 | if (connector->encoder_ids[i] == 0) | ||
1301 | break; | ||
1302 | |||
1303 | encoder = drm_encoder_find(connector->dev, NULL, | ||
1304 | connector->encoder_ids[i]); | ||
1305 | if (!encoder) | ||
1306 | continue; | ||
1307 | |||
1308 | amdgpu_encoder = to_amdgpu_encoder(encoder); | 1276 | amdgpu_encoder = to_amdgpu_encoder(encoder); |
1309 | 1277 | ||
1310 | switch (amdgpu_encoder->encoder_id) { | 1278 | switch (amdgpu_encoder->encoder_id) { |
@@ -1326,14 +1294,7 @@ static bool amdgpu_connector_encoder_is_hbr2(struct drm_connector *connector) | |||
1326 | int i; | 1294 | int i; |
1327 | bool found = false; | 1295 | bool found = false; |
1328 | 1296 | ||
1329 | for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) { | 1297 | drm_connector_for_each_possible_encoder(connector, encoder, i) { |
1330 | if (connector->encoder_ids[i] == 0) | ||
1331 | break; | ||
1332 | encoder = drm_encoder_find(connector->dev, NULL, | ||
1333 | connector->encoder_ids[i]); | ||
1334 | if (!encoder) | ||
1335 | continue; | ||
1336 | |||
1337 | amdgpu_encoder = to_amdgpu_encoder(encoder); | 1298 | amdgpu_encoder = to_amdgpu_encoder(encoder); |
1338 | if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) | 1299 | if (amdgpu_encoder->caps & ATOM_ENCODER_CAP_RECORD_HBR2) |
1339 | found = true; | 1300 | found = true; |