Wrong display color (WinCE7)

Customer is using custom carrier board with LVDS display connected via TI DS90C385A LVDS transmitter.

Display works fine with Linux but customer wants a WinCE. I was able to make it wok under WinCE but colors are wrong. Haw it can be fixed? I did try different BPP / LDDS combinations but color always the same.

Linux Settings:

xrandr: Failed to get size of gamma for output default
Screen 0: minimum 1280 x 800, current 1280 x 800, maximum 1280 x 800
default connected 1280x800+0+0 (0x4f) normal (normal) 0mm x 0mm
        Identifier: 0x4e
        Timestamp:  10895
        Subpixel:   unknown
        Clones:
        CRTC:       0
        CRTCs:      0
        Transform:  1.000000 0.000000 0.000000
                    0.000000 1.000000 0.000000
                    0.000000 0.000000 1.000000
                   filter:
  1280x800 (0x4f) 61.440MHz *current
        h: width  1280 start    0 end    0 total 1280 skew    0 clock  48.00KHz
        v: height  800 start    0 end    0 total  800           clock  60.00Hz

mode "1280x800-60"
    # D: 83.500 MHz, H: 49.703 kHz, V: 59.811 Hz
    geometry 1280 800 1280 800 32
    timings 11976 200 72 22 3 128 6
    vsync high
    rgba 8/16,8/8,8/0,0/0
endmode

WinCE (EBoot settings)

ss.fileaddr:    0x0     (FlashAddress with SplashScreen Data)
ss.filesize:    0               (Size of SplashScreen Data)
ss.enable:      1               (Enable SplashScreen)
ss.dbginfo:     1               (Enable DebugInfos)
ss.res: 0x0     (Reserved Flags)
ss.width:       1280            (Display Width)
ss.height:      800             (Display Height)
ss.bpp: 16              (BitsPerPixel)
ss.ldds:        24              (LCD Lines Used)
ss.type:        1               (Display Type (0=Passive, 1=Active))
ss.color:       1               (0=Mono, 1=Color)
ss.dual:        0               (0=SinglePanel, 1=DualPanel)
ss.overlay:     0               (Overlay Enable)
ss.dpc: 0               (Double Pixel Clock)
ss.pcp: 0               (Pixel Clock Polarity)
ss.oep: 0               (Output Enable Polarity)
ss.hsp: 0               (Horizontal Sync Polarity)
ss.vsp: 0               (Vertical Sync Polarity)
ss.bs:  5               (LCD Buffer Strength)
ss.pclk:        49703000                (PixelClock (in Hz))
ss.hsw: 128             (Horizontal Sync Width)
ss.vsw: 6               (Vertical Sync Width)
ss.blw: 200             (Begin of Line Width)
ss.elw: 72              (End of Line Width)
ss.bfw: 22              (Begin of Frame Width)
ss.efw: 3               (End of Frame Width)
ss.acb: 0               (AC Bias Frequency)
ss.disp_gpio:   44              (SODIMM used to turn display On/Off(0 means no pin is used))
ss.bl_gpio:     59              (SODIMM used to turn On/Off Backlight(0 means no pin is used))
ss.dispondelay: 0               (Display On Delay (ms))
ss.disp_pol:    1               (Display On/Off polarity)
ss.bl_pol:      1               (BackLight On/Off polarity)
ss.pcddiv:      1               (Enable Pixel Clock PreDivider)
ss.res: 0x1F80  (Reserved Flags)
ss.fbaddr:      0x0     (Phys FrameBuffer,Palette and Descr Address (0=Auto))
ss.edidaddr:    0x0     (i2c address of the EDID EEPROM (0..0x7f))
ss.edidenable:  0               (enable read from EDID EEPROM)

screenshot

I don’t have the solution yet for the problem. But I have some ideas and also suggestions how to proceed:

  • You are using a pixel clock of 49.703MHz, which leads to a refresh rate lower than 40Hz. However, this doesn’t explain the color shift.
  • Try to invert the pixel clock polarity ( ss.pcp )

Next steps:

It might also help to know the wiring between the Colibri and the LVDS converter.

Regards, Andy

Looks like Red color is missing . alt text

PCP doesn’t change a picture at all. On Linux gradient looks OK See Attached Pictures

Display schematic attached here

Hi Andy,

Red color is missing. Client is using 24 bits mode instead of Toradex standard 18 bits. I did set ss.ldds to 24 but looks like still only 18 bits are transferred. Could it be due to wrong pix muxing or 24 bits mode not really supported by iMX7 display driver?

Dear @alex,

Could you configure the BPP is 16 bit and LDDS to 24-bit using Display tool and after reboot verify below pin is set to lcdif signals, if not could you set and verify the display output result?

Could you please verify the module is programmed with WinCE 7 1.2b4 image by looking into bootloader output or using UpdateTool. We are having a problem with Tezi, if you choose 1.2B4 it programs v1.1 image.

Dear @raja.tx

I did try to use Display tool as you suggested and got the same result. Why should I get different result using Display tool? Does it do something else on top of registry settings?

And yes I double check - my version is 1.2B4 (by checking EBoot output and Update tool)

I did check an LCD_CTRL register at address 0x30730000 - the result is 0x040b0821
meaning interface still set to 18 bits width while EBoot and registry configured to 25 bits. Definitely a bug.
I modified LCD_DATABUS_WIDTH fields at that register using EBoot command and it fix colors. But upon WinCE boot colors was broken again.

Dear @alex.tx,

Display tool doesn’t make any difference. Just for make sure with display tool I wrote that. So, you mean setting LCD_DATABUS_WIDTH to 24bits is solving the problem and similar thing not done in the WinCE display driver?

Yes, setting LCD_DATABUS_WIDTH to 24 and WORD_LENGTH to 16 when BPP was set to 16 as well make that display works as expected. Plus I have to redefine function for extra 6 LCD lines from GPIO. Attempts to set BBP to 24 or 18 (along with WORD_LENGTH) failed.

Dear @raja.tx

Could you please share a RedMIne ticket N? I wasn’t able to find it.

Dear @alex.tx,

The ticket is here : http://redmine.toradex.int/issues/47297