LCD blinking/glitches on startup

cancel
Showing results for 
Show  only  | Search instead for 
Did you mean: 

LCD blinking/glitches on startup

1,341 Views
Matt_ng9
Contributor III

Hi all,

 

I have a few questions about the LCD and startup...

 

1)  Why does the LCD driver get loaded twice?

 

2)  What causes the LCD to flash a few times while the kernel loads?  We scoped this out and found it to be an issue with the data lines going to the LCD (the dot clock ran fine, but the data lines have a glitch).

 

This is what the power-up sequence looks like...

 

- Screen flashes white, then displays our splashscreen (we replaced Tux with a custom full screen graphic.  The flash seems to be due to the double init of the driver)

- 4 seconds or so later, the screen blinks twice real quick (the blinks seem to be data line issues)

- A second or so later, the screen blinks twice real quick

- Another second, and the screen blinks once

 

I have tried to search, but cannot find any results :(

 

Thanks for any help!

 

- Matt

Labels (1)
4 Replies

943 Views
Matt_ng9
Contributor III

Actually I kind of hacked it for now, but this is what I did...

 

In the file "ltib/rpm/BUILD/linux/drivers/video/mxs/[yourscreen].c"

1. Made a global variable "init_done", and I set it to FALSE in "register_devices()"

2.  In "set_bl_intensity()" I only let the backlight get set to a non-zero value if "init_done == TRUE".  Else I set it to 0

3.  I made a new function...

static void run_panel( void )
{
    init_done = true;
    mxs_lcdif_run();
    struct backlight_device bd;
    bd.props.brightness = bl_data.bl_default_intensity;
    bd.props.power = FB_BLANK_UNBLANK;
    bd.props.fb_blank = FB_BLANK_UNBLANK;
    mdelay(100);
    bl_data.set_bl_intensity(&bl_data, &bd, 0);
}

4.  Update fb_entry variable to point to run_panel rather than mxs_lcdif_run.

 

I purposely left out implementation methods in the previous post because I don't have an elegant solution yet.  And to be honest I will be doing more work on this anyway when I add display support to the bootloader, so I will come up with something better then.  But anyway, this will get you by for now, and only requires one source code file to be modified.

0 Kudos

943 Views
DarioCosta
Contributor II

Great!


With your info I modified my linux video driver and now I have no blink at the startup.


The only problem I have if the white before the start: I cannot find where to move mxs_init_lcdif() for to have no white flash.

 

Could you please help me with more specific info?

Thanks a lot

Dario

 

Matt Buchman said:

Thank you for your reply Robert, I will keep your services in mind.

 

I finally got back to this issue and answered my own questions...

 

1)  the ltib/rpm/BUILD/linux/drivers/video/mxs/mxsfb.c: mxsfb_probe() function of  is responsible for calling the ltib/rpm/BUILD/linux/drivers/video/mxs/[yourscreen].c: init_panel() function twice.

 

2a)  The white flash was due to the display and backlight being turned on before the internal hardware started pumping out data to the display (ltib/rpm/BUILD/linux/drivers/video/mxs/lcdif.c: mxs_init_lcdif() should be called before turning on the backlight, but it was being called after turning on the backlight).

2b)  The blinking is from ltib/rpm/BUILD/linux/drivers/video/mxs/mxsfb.c: mxsfb_notifier() calling the ltib/rpm/BUILD/linux/drivers/video/mxs/[yourscreen].c: blank_panel() function.

0 Kudos

943 Views
Matt_ng9
Contributor III

Thank you for your reply Robert, I will keep your services in mind.

 

I finally got back to this issue and answered my own questions...

 

1)  the ltib/rpm/BUILD/linux/drivers/video/mxs/mxsfb.c: mxsfb_probe() function of  is responsible for calling the ltib/rpm/BUILD/linux/drivers/video/mxs/[yourscreen].c: init_panel() function twice.

 

2a)  The white flash was due to the display and backlight being turned on before the internal hardware started pumping out data to the display (ltib/rpm/BUILD/linux/drivers/video/mxs/lcdif.c: mxs_init_lcdif() should be called before turning on the backlight, but it was being called after turning on the backlight).

2b)  The blinking is from ltib/rpm/BUILD/linux/drivers/video/mxs/mxsfb.c: mxsfb_notifier() calling the ltib/rpm/BUILD/linux/drivers/video/mxs/[yourscreen].c: blank_panel() function.

0 Kudos

943 Views
RobertSchwebel
Contributor IV

Hi Matt,

optimizing a system for flickerfree booting is a matter of initializing the framebuffer from the bootloader and making sure it is not disturbed by memory and clock activities during bootup. Here is an example we have optimized on MX27:

mx27 flickerfree booting

With the MX28, it should be possible to boot into a Qt application running on the plain framebuffer (without x.org) within about 6 seconds after power-good.

However, optimizing a system is more or less a matter of doing the integration right, plus the usual fastboot tricks which are mainly documented in the elinux wiki. Please drop me a note (to sales@pengutronix.de) if you need commercial help.

 

rsc

0 Kudos