adjusted_mode->flags |= (DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC);
        }
 
+       /*
+        * When using video sync pulses, the HFP, HBP, and HSA are divided between
+        * the available lanes if there is more than one lane.  For certain
+        * timings and lane configurations, the HFP may not be evenly divisible.
+        * If the HFP is rounded down, it ends up being too small which can cause
+        * some monitors to not sync properly. In these instances, adjust htotal
+        * and hsync to round the HFP up, and recalculate the htotal. Through trial
+        * and error, it appears that the HBP and HSA do not appearto need the same
+        * correction that HFP does.
+        */
+       if (dsi->lanes > 1) {
+               int hfp = adjusted_mode->hsync_start - adjusted_mode->hdisplay;
+               int remainder = hfp % dsi->lanes;
+
+               if (remainder) {
+                       adjusted_mode->hsync_start += remainder;
+                       adjusted_mode->hsync_end   += remainder;
+                       adjusted_mode->htotal      += remainder;
+               }
+       }
+
        return 0;
 }