struct nouveau_encoder *
 find_encoder(struct drm_connector *connector, int type)
 {
-       struct drm_device *dev = connector->dev;
        struct nouveau_encoder *nv_encoder;
        struct drm_encoder *enc;
-       int i, id;
-
-       for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-               id = connector->encoder_ids[i];
-               if (!id)
-                       break;
+       int i;
 
-               enc = drm_encoder_find(dev, NULL, id);
-               if (!enc)
-                       continue;
+       drm_connector_for_each_possible_encoder(connector, enc, i) {
                nv_encoder = nouveau_encoder(enc);
 
                if (type == DCB_OUTPUT_ANY ||
        struct nouveau_connector *nv_connector = nouveau_connector(connector);
        struct nouveau_drm *drm = nouveau_drm(dev);
        struct nvkm_gpio *gpio = nvxx_gpio(&drm->client.device);
-       struct nouveau_encoder *nv_encoder;
+       struct nouveau_encoder *nv_encoder = NULL;
        struct drm_encoder *encoder;
        int i, panel = -ENODEV;
 
                }
        }
 
-       for (i = 0; nv_encoder = NULL, i < DRM_CONNECTOR_MAX_ENCODER; i++) {
-               int id = connector->encoder_ids[i];
-               if (id == 0)
-                       break;
-
-               encoder = drm_encoder_find(dev, NULL, id);
-               if (!encoder)
-                       continue;
+       drm_connector_for_each_possible_encoder(connector, encoder, i) {
                nv_encoder = nouveau_encoder(encoder);
 
                if (nv_encoder->dcb->type == DCB_OUTPUT_DP) {