viaparinfo->tmds_setting_info->h_active = hres;
                viaparinfo->tmds_setting_info->v_active = vres;
 
-               viaparinfo->lvds_setting_info->h_active = hres;
-               viaparinfo->lvds_setting_info->v_active = vres;
                viaparinfo->lvds_setting_info->bpp = bpp;
-               viaparinfo->lvds_setting_info2->h_active = hres;
-               viaparinfo->lvds_setting_info2->v_active = vres;
                viaparinfo->lvds_setting_info2->bpp = bpp;
        } else {
 
                        viaparinfo->tmds_setting_info->v_active = vres;
                }
 
-               if (viaparinfo->lvds_setting_info->iga_path == IGA2) {
-                       viaparinfo->lvds_setting_info->h_active = hres;
-                       viaparinfo->lvds_setting_info->v_active = vres;
+               if (viaparinfo->lvds_setting_info->iga_path == IGA2)
                        viaparinfo->lvds_setting_info->bpp = bpp;
-               }
-               if (IGA2 == viaparinfo->lvds_setting_info2->iga_path) {
-                       viaparinfo->lvds_setting_info2->h_active = hres;
-                       viaparinfo->lvds_setting_info2->v_active = vres;
+
+               if (IGA2 == viaparinfo->lvds_setting_info2->iga_path)
                        viaparinfo->lvds_setting_info2->bpp = bpp;
-               }
        }
 }
 
                if (viafb_SAMM_ON &&
                        (viaparinfo->lvds_setting_info->iga_path == IGA2)) {
                        viaparinfo->lvds_setting_info->bpp = video_bpp1;
-                       viafb_lcd_set_mode(viaparinfo->lvds_setting_info,
+                       viafb_lcd_set_mode(&var2, cxres, cyres,
+                               viaparinfo->lvds_setting_info,
                                &viaparinfo->chip_info->lvds_chip_info);
                } else {
                        /* IGA1 doesn't have LCD scaling, so set it center. */
                                    LCD_CENTERING;
                        }
                        viaparinfo->lvds_setting_info->bpp = video_bpp;
-                       viafb_lcd_set_mode(viaparinfo->lvds_setting_info,
+                       viafb_lcd_set_mode(&viafbinfo->var, 0, 0,
+                               viaparinfo->lvds_setting_info,
                                &viaparinfo->chip_info->lvds_chip_info);
                }
        }
                if (viafb_SAMM_ON &&
                        (viaparinfo->lvds_setting_info2->iga_path == IGA2)) {
                        viaparinfo->lvds_setting_info2->bpp = video_bpp1;
-                       viafb_lcd_set_mode(viaparinfo->lvds_setting_info2,
+                       viafb_lcd_set_mode(&var2, cxres, cyres,
+                               viaparinfo->lvds_setting_info2,
                                &viaparinfo->chip_info->lvds_chip_info2);
                } else {
                        /* IGA1 doesn't have LCD scaling, so set it center. */
                                    LCD_CENTERING;
                        }
                        viaparinfo->lvds_setting_info2->bpp = video_bpp;
-                       viafb_lcd_set_mode(viaparinfo->lvds_setting_info2,
+                       viafb_lcd_set_mode(&viafbinfo->var, 0, 0,
+                               viaparinfo->lvds_setting_info2,
                                &viaparinfo->chip_info->lvds_chip_info2);
                }
        }
 
                      int panel_vres);
 static void via_pitch_alignment_patch_lcd(
        struct lvds_setting_information *plvds_setting_info,
-                                  struct lvds_chip_information
-                                  *plvds_chip_info);
+       struct lvds_chip_information *plvds_chip_info, int hres);
 static void lcd_patch_skew_dvp0(struct lvds_setting_information
                         *plvds_setting_info,
                         struct lvds_chip_information *plvds_chip_info);
 
 static void via_pitch_alignment_patch_lcd(
        struct lvds_setting_information *plvds_setting_info,
-                                  struct lvds_chip_information
-                                  *plvds_chip_info)
+       struct lvds_chip_information *plvds_chip_info, int hres)
 {
        unsigned char cr13, cr35, cr65, cr66, cr67;
        unsigned long dwScreenPitch = 0;
        unsigned long dwPitch;
 
-       dwPitch = plvds_setting_info->h_active * (plvds_setting_info->bpp >> 3);
+       dwPitch = hres * (plvds_setting_info->bpp >> 3);
        if (dwPitch & 0x1F) {
                dwScreenPitch = ((dwPitch + 31) & ~31) >> 3;
                if (plvds_setting_info->iga_path == IGA2) {
 }
 
 /* LCD Set Mode */
-void viafb_lcd_set_mode(struct lvds_setting_information *plvds_setting_info,
+void viafb_lcd_set_mode(const struct fb_var_screeninfo *var, u16 cxres,
+       u16 cyres, struct lvds_setting_information *plvds_setting_info,
        struct lvds_chip_information *plvds_chip_info)
 {
        int set_iga = plvds_setting_info->iga_path;
        int mode_bpp = plvds_setting_info->bpp;
-       int set_hres = plvds_setting_info->h_active;
-       int set_vres = plvds_setting_info->v_active;
+       int set_hres = cxres ? cxres : var->xres;
+       int set_vres = cyres ? cyres : var->yres;
        int panel_hres = plvds_setting_info->lcd_panel_hres;
        int panel_vres = plvds_setting_info->lcd_panel_vres;
        u32 clock;
                viafb_write_reg_mask(CR6A, VIACR, 0x01, BIT0);
 
        /* Patch for non 32bit alignment mode */
-       via_pitch_alignment_patch_lcd(plvds_setting_info, plvds_chip_info);
+       via_pitch_alignment_patch_lcd(plvds_setting_info, plvds_chip_info,
+               set_hres);
 }
 
 static void integrated_lvds_disable(struct lvds_setting_information