{
        struct drm_device *dev = encoder->base.dev;
        struct drm_i915_private *dev_priv = dev->dev_private;
-       u32 lvds_reg, tmp, flags = 0;
+       struct intel_lvds_encoder *lvds_encoder = to_lvds_encoder(&encoder->base);
+       u32 tmp, flags = 0;
        int dotclock;
 
-       if (HAS_PCH_SPLIT(dev))
-               lvds_reg = PCH_LVDS;
-       else
-               lvds_reg = LVDS;
-
-       tmp = I915_READ(lvds_reg);
+       tmp = I915_READ(lvds_encoder->reg);
        if (tmp & LVDS_HSYNC_POLARITY)
                flags |= DRM_MODE_FLAG_NHSYNC;
        else
        struct drm_display_mode *downclock_mode = NULL;
        struct edid *edid;
        struct drm_crtc *crtc;
+       u32 lvds_reg;
        u32 lvds;
        int pipe;
        u8 pin;
        if (dmi_check_system(intel_no_lvds))
                return;
 
+       if (HAS_PCH_SPLIT(dev))
+               lvds_reg = PCH_LVDS;
+       else
+               lvds_reg = LVDS;
+
+       lvds = I915_READ(lvds_reg);
+
        if (HAS_PCH_SPLIT(dev)) {
-               if ((I915_READ(PCH_LVDS) & LVDS_DETECTED) == 0)
+               if ((lvds & LVDS_DETECTED) == 0)
                        return;
                if (dev_priv->vbt.edp_support) {
                        DRM_DEBUG_KMS("disable LVDS for eDP support\n");
 
        pin = GMBUS_PIN_PANEL;
        if (!lvds_is_present_in_vbt(dev, &pin)) {
-               u32 reg = HAS_PCH_SPLIT(dev) ? PCH_LVDS : LVDS;
-               if ((I915_READ(reg) & LVDS_PORT_EN) == 0) {
+               if ((lvds & LVDS_PORT_EN) == 0) {
                        DRM_DEBUG_KMS("LVDS is not present in VBT\n");
                        return;
                }
        connector->interlace_allowed = false;
        connector->doublescan_allowed = false;
 
-       if (HAS_PCH_SPLIT(dev)) {
-               lvds_encoder->reg = PCH_LVDS;
-       } else {
-               lvds_encoder->reg = LVDS;
-       }
+       lvds_encoder->reg = lvds_reg;
 
        /* create the scaling mode property */
        drm_mode_create_scaling_mode_property(dev);
        if (HAS_PCH_SPLIT(dev))
                goto failed;
 
-       lvds = I915_READ(LVDS);
        pipe = (lvds & LVDS_PIPEB_SELECT) ? 1 : 0;
        crtc = intel_get_crtc_for_pipe(dev, pipe);