int type)
 {
        struct drm_atomic_state *state = crtc_state->base.state;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        struct intel_encoder *encoder;
        int i, num_connectors = 0;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != crtc_state->base.crtc)
                        continue;
 
        struct intel_encoder *encoder;
        const intel_limit_t *limit;
        struct drm_atomic_state *state = crtc_state->base.state;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        int i;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != &crtc->base)
                        continue;
 
        struct drm_device *dev = crtc_state->base.crtc->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct drm_atomic_state *state = crtc_state->base.state;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        struct intel_encoder *encoder;
        int num_connectors = 0, i;
        bool is_lvds = false;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != crtc_state->base.crtc)
                        continue;
 
        struct drm_device *dev = crtc->dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
        struct drm_atomic_state *state = crtc_state->base.state;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        struct intel_encoder *encoder;
        uint32_t dpll;
        int factor, num_connectors = 0, i;
        bool is_lvds = false, is_sdvo = false;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != crtc_state->base.crtc)
                        continue;
 
 {
        struct drm_device *dev = crtc->base.dev;
        struct drm_atomic_state *state;
-       struct intel_connector *connector;
+       struct drm_connector *connector;
+       struct drm_connector_state *connector_state;
        int bpp, i;
 
        if ((IS_G4X(dev) || IS_VALLEYVIEW(dev)))
        state = pipe_config->base.state;
 
        /* Clamp display bpp to EDID value */
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector = to_intel_connector(state->connectors[i]);
-               if (state->connector_states[i]->crtc != &crtc->base)
+       for_each_connector_in_state(state, connector, connector_state, i) {
+               if (connector_state->crtc != &crtc->base)
                        continue;
 
-               connected_sink_compute_bpp(connector, pipe_config);
+               connected_sink_compute_bpp(to_intel_connector(connector),
+                                          pipe_config);
        }
 
        return bpp;
                                         struct intel_encoder *encoder)
 {
        struct intel_encoder *source_encoder;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        int i;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != &crtc->base)
                        continue;
 
                                  struct intel_crtc *crtc)
 {
        struct intel_encoder *encoder;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        int i;
 
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != &crtc->base)
                        continue;
 
 {
        struct drm_device *dev = state->dev;
        struct intel_encoder *encoder;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        unsigned int used_ports = 0;
        int i;
         * list to detect the problem on ddi platforms
         * where there's just one encoder per digital port.
         */
-       for (i = 0; i < state->num_connector; i++) {
-               if (!state->connectors[i])
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (!connector_state->best_encoder)
                        continue;
 
                          struct drm_atomic_state *state)
 {
        struct intel_encoder *encoder;
-       struct intel_connector *connector;
+       struct drm_connector *connector;
        struct drm_connector_state *connector_state;
        struct intel_crtc_state *pipe_config;
        int base_bpp, ret = -EINVAL;
         * adjust it according to limitations or connector properties, and also
         * a chance to reject the mode entirely.
         */
-       for (i = 0; i < state->num_connector; i++) {
-               connector = to_intel_connector(state->connectors[i]);
-               if (!connector)
-                       continue;
-
-               connector_state = state->connector_states[i];
+       for_each_connector_in_state(state, connector, connector_state, i) {
                if (connector_state->crtc != crtc)
                        continue;