#define CAL_MODULE_NAME "cal"
 
-#define MAX_WIDTH 1920
-#define MAX_HEIGHT 1200
+#define MAX_WIDTH_BYTES (8192 * 8)
+#define MAX_HEIGHT_LINES 16383
 
 #define CAL_VERSION "0.1.0"
 
                                const struct cal_fmt *fmt,
                                struct v4l2_format *f)
 {
-       u32 bpl;
+       u32 bpl, max_width;
 
        if (!fmt) {
                ctx_dbg(3, ctx, "No cal_fmt provided!\n");
                return -EINVAL;
        }
 
-       v4l_bound_align_image(&f->fmt.pix.width, 48, MAX_WIDTH, 2,
-                             &f->fmt.pix.height, 32, MAX_HEIGHT, 0, 0);
+       /*
+        * Maximum width is bound by the DMA max width in bytes.
+        * We need to recalculate the actual maxi width depending on the
+        * number of bytes per pixels required.
+        */
+       max_width = MAX_WIDTH_BYTES / (ALIGN(fmt->bpp, 8) >> 3);
+       v4l_bound_align_image(&f->fmt.pix.width, 48, max_width, 2,
+                             &f->fmt.pix.height, 32, MAX_HEIGHT_LINES, 0, 0);
 
        bpl = (f->fmt.pix.width * ALIGN(fmt->bpp, 8)) >> 3;
        f->fmt.pix.bytesperline = ALIGN(bpl, 16);