]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
ENGR00229290 EPDC: MX6: Adjust number of LUTs for 5-bit waveform
authorMichael Minnick <michael.minnick@freescale.com>
Tue, 9 Oct 2012 23:06:31 +0000 (18:06 -0500)
committerLothar Waßmann <LW@KARO-electronics.de>
Fri, 24 May 2013 06:35:33 +0000 (08:35 +0200)
When a 5-bit waveform is loaded, the maximum number of available
LUTs is 16. The LUT allocator must account for this.

Note that 5-bit waveform loading is currently not supported in the
driver. However, this fix makes sure the LUT allocator is correct
when 5-bit support is added.

Signed-off-by: Michael Minnick <michael.minnick@freescale.com>
drivers/video/mxc/mxc_epdc_fb.c

index b702788ae8233da775345b695ce7ae5a6df11f3c..38a183c8d861a17a55a88e84cba773db7f4b032e 100644 (file)
@@ -735,18 +735,24 @@ static int epdc_choose_next_lut(int rev, int *next_lut)
 {
        u64 luts_status, unprocessed_luts;
        bool next_lut_found = false;
+       /* Available LUTs are reduced to 16 in 5-bit waveform mode */
+       u32 format_p5n = __raw_readl(EPDC_FORMAT) &
+               EPDC_FORMAT_BUF_PIXEL_FORMAT_P5N;
 
        luts_status = __raw_readl(EPDC_STATUS_LUTS);
-       if (rev < 20)
+       if ((rev < 20) || format_p5n)
                luts_status &= 0xFFFF;
        else
                luts_status |= ((u64)__raw_readl(EPDC_STATUS_LUTS2) << 32);
 
-       if (rev < 20)
+       if (rev < 20) {
                unprocessed_luts = __raw_readl(EPDC_IRQ) & 0xFFFF;
-       else
+       } else {
                unprocessed_luts = __raw_readl(EPDC_IRQ1) |
                        ((u64)__raw_readl(EPDC_IRQ2) << 32);
+               if (format_p5n)
+                       unprocessed_luts &= 0xFFFF;
+       }
 
        while (!next_lut_found) {
                /*
@@ -762,7 +768,7 @@ static int epdc_choose_next_lut(int rev, int *next_lut)
                 */
                *next_lut = fls64(luts_status);
 
-               if (rev < 20) {
+               if ((rev < 20) || format_p5n) {
                        if (*next_lut > 15)
                                *next_lut = ffz(luts_status);
                } else {