aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
diff options
context:
space:
mode:
authorVille Syrjälä <ville.syrjala@linux.intel.com>2018-06-28 09:13:10 -0400
committerVille Syrjälä <ville.syrjala@linux.intel.com>2018-07-05 09:52:08 -0400
commit98c0e348c09575edccdd63e9d2938f090b0d8739 (patch)
treefd62e3a8aa2a0143fe7e64f1a12cfc3264e9861e /drivers/gpu/drm/amd/amdgpu/amdgpu_connectors.c
parent83aefbb887b59df0b3520965c3701e01deacfc52 (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.c81
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
212amdgpu_connector_update_scratch_regs(struct drm_connector *connector, 212amdgpu_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)
360static struct drm_encoder * 345static struct drm_encoder *
361amdgpu_connector_best_single_encoder(struct drm_connector *connector) 346amdgpu_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:
1132static struct drm_encoder * 1114static struct drm_encoder *
1133amdgpu_connector_dvi_encoder(struct drm_connector *connector) 1115amdgpu_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;