The minimum values for timing parameters such as left margin,
right margin etc are different for STN and TFT dispalys.
This commit fixes a check that does not account for
this difference.

Reviewed-by: Ray Jui <r...@broadcom.com>
Reviewed-by: Scott Branden <sbran...@broadcom.com>
Signed-off-by: Arun Ramamurthy <arun.ramamur...@broadcom.com>
---
 include/linux/amba/clcd.h | 32 ++++++++++++++++++++++----------
 1 file changed, 22 insertions(+), 10 deletions(-)

diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
index 6a3bc2d..0fe8a17 100644
--- a/include/linux/amba/clcd.h
+++ b/include/linux/amba/clcd.h
@@ -288,16 +288,28 @@ static inline int clcdfb_check(struct clcd_fb *fb, struct 
fb_var_screeninfo *var
        var->xres_virtual = var->xres = (var->xres + 15) & ~15;
        var->yres_virtual = var->yres = (var->yres + 1) & ~1;
 
-#define CHECK(e,l,h) (var->e < l || var->e > h)
-       if (CHECK(right_margin, (5+1), 256) ||  /* back porch */
-           CHECK(left_margin, (5+1), 256) ||   /* front porch */
-           CHECK(hsync_len, (5+1), 256) ||
-           var->xres > 4096 ||
-           var->lower_margin > 255 ||          /* back porch */
-           var->upper_margin > 255 ||          /* front porch */
-           var->vsync_len > 32 ||
-           var->yres > 1024)
-               return -EINVAL;
+#define CHECK(e, l, h) (var->e < l || var->e > h)
+       if (!(fb->panel->cntl & CNTL_LCDTFT)) {
+               if (CHECK(right_margin, (5+1), 256) ||  /* back porch */
+               CHECK(left_margin, (5+1), 256) ||       /* front porch */
+               CHECK(hsync_len, (5+1), 256) ||
+               var->xres > 4096 ||
+               var->lower_margin > 255 ||      /* back porch */
+               var->upper_margin > 255 ||      /* front porch */
+               var->vsync_len > 32 ||
+               var->yres > 1024)
+                       return -EINVAL;
+       } else {
+               if (CHECK(right_margin, 1, 256) ||      /* back porch */
+               CHECK(left_margin, 1, 256) ||   /* front porch */
+               CHECK(hsync_len, 1, 256) ||
+               var->xres > 4096 ||
+               var->lower_margin > 255 ||      /* back porch */
+               var->upper_margin > 255 ||      /* front porch */
+               var->vsync_len > 32 ||
+               var->yres > 1024)
+                       return -EINVAL;
+       }
 #undef CHECK
 
        /* single panel mode: PCD = max(PCD, 1) */
-- 
2.3.0

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

Reply via email to