static void intel_suspend_encoders(struct drm_i915_private *dev_priv)
 {
        struct drm_device *dev = dev_priv->dev;
-       struct drm_encoder *encoder;
+       struct intel_encoder *encoder;
 
        drm_modeset_lock_all(dev);
-       list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
-               struct intel_encoder *intel_encoder = to_intel_encoder(encoder);
-
-               if (intel_encoder->suspend)
-                       intel_encoder->suspend(intel_encoder);
-       }
+       for_each_intel_encoder(dev, encoder)
+               if (encoder->suspend)
+                       encoder->suspend(encoder);
        drm_modeset_unlock_all(dev);
 }
 
 
 void intel_modeset_cleanup(struct drm_device *dev)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct drm_connector *connector;
+       struct intel_connector *connector;
 
        intel_disable_gt_powersave(dev);
 
        flush_scheduled_work();
 
        /* destroy the backlight and sysfs files before encoders/connectors */
-       list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
-               struct intel_connector *intel_connector;
-
-               intel_connector = to_intel_connector(connector);
-               intel_connector->unregister(intel_connector);
-       }
+       for_each_intel_connector(dev, connector)
+               connector->unregister(connector);
 
        drm_mode_config_cleanup(dev);
 
 
         * We don't have power sequencer currently.
         * Pick one that's not used by other ports.
         */
-       list_for_each_entry(encoder, &dev->mode_config.encoder_list,
-                           base.head) {
+       for_each_intel_encoder(dev, encoder) {
                struct intel_dp *tmp;
 
                if (encoder->type != INTEL_OUTPUT_EDP)
         * should use them always.
         */
 
-       list_for_each_entry(encoder, &dev->mode_config.encoder_list, base.head) {
+       for_each_intel_encoder(dev, encoder) {
                struct intel_dp *intel_dp;
 
                if (encoder->type != INTEL_OUTPUT_EDP)
        if (WARN_ON(pipe != PIPE_A && pipe != PIPE_B))
                return;
 
-       list_for_each_entry(encoder, &dev->mode_config.encoder_list,
-                           base.head) {
+       for_each_intel_encoder(dev, encoder) {
                struct intel_dp *intel_dp;
                enum port port;
 
 
 static u32 asle_set_backlight(struct drm_device *dev, u32 bclp)
 {
        struct drm_i915_private *dev_priv = dev->dev_private;
-       struct intel_connector *intel_connector;
+       struct intel_connector *connector;
        struct opregion_asle *asle = dev_priv->opregion.asle;
 
        DRM_DEBUG_DRIVER("bclp = 0x%08x\n", bclp);
         * only one).
         */
        DRM_DEBUG_KMS("updating opregion backlight %d/255\n", bclp);
-       list_for_each_entry(intel_connector, &dev->mode_config.connector_list, base.head)
-               intel_panel_set_backlight_acpi(intel_connector, bclp, 255);
+       for_each_intel_connector(dev, connector)
+               intel_panel_set_backlight_acpi(connector, bclp, 255);
        asle->cblv = DIV_ROUND_UP(bclp * 100, 255) | ASLE_CBLV_VALID;
 
        drm_modeset_unlock(&dev->mode_config.connection_mutex);
 
 {
        struct intel_connector *connector;
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
+       for_each_intel_connector(dev, connector)
                intel_backlight_device_register(connector);
 }
 
 {
        struct intel_connector *connector;
 
-       list_for_each_entry(connector, &dev->mode_config.connector_list, base.head)
+       for_each_intel_connector(dev, connector)
                intel_backlight_device_unregister(connector);
 }
 
        struct drm_device *dev = dev_priv->dev;
        struct intel_crtc *crtc;
 
-       list_for_each_entry(crtc, &dev->mode_config.crtc_list, base.head) {
+       for_each_intel_crtc(dev, crtc) {
                int i, level, max_level = ilk_wm_max_level(dev);
                enum pipe pipe = crtc->pipe;
 
         * Otherwise, because of this_crtc being freshly enabled/disabled, the
         * other active pipes need new DDB allocation and WM values.
         */
-       list_for_each_entry(intel_crtc, &dev->mode_config.crtc_list,
-                               base.head) {
+       for_each_intel_crtc(dev, intel_crtc) {
                struct skl_pipe_wm pipe_wm = {};
                bool wm_changed;