fusee: don't flicker as we turn the display on

Defers backlight init until the framebuffer's fully set up.
This commit is contained in:
Kate J. Temkin 2018-04-03 03:56:50 -06:00
parent 2d8812ac6e
commit 3f40a89316
3 changed files with 15 additions and 3 deletions

View file

@ -28,6 +28,9 @@ void display_color_screen(u32 color);
/*! Init display in full 1280x720 resolution (32bpp, line stride 768, framebuffer size = 1280*768*4 bytes). */ /*! Init display in full 1280x720 resolution (32bpp, line stride 768, framebuffer size = 1280*768*4 bytes). */
u32 *display_init_framebuffer(); u32 *display_init_framebuffer();
/*! Enable or disable the backlight. Should only be called when the screen is completely set up, to avoid flickering. */
void display_enable_backlight(bool on);
void cluster_boot_cpu0(u64 entry, u32 ns_disable); void cluster_boot_cpu0(u64 entry, u32 ns_disable);
#endif #endif

View file

@ -183,14 +183,19 @@ void display_color_screen(u32 color)
GPIO_6(0x24) = GPIO_6(0x24) & 0xFFFFFFFE | 1; GPIO_6(0x24) = GPIO_6(0x24) & 0xFFFFFFFE | 1;
} }
void display_enable_backlight(bool on) {
GPIO_6(0x24) = GPIO_6(0x24) & 0xFFFFFFFE | !!on;
}
u32 *display_init_framebuffer(void) u32 *display_init_framebuffer(void)
{ {
u32 *lfb_addr = (u32 *)0xC0000000;
//This configures the framebuffer @ 0xC0000000 with a resolution of 1280x720 (line stride 768). //This configures the framebuffer @ 0xC0000000 with a resolution of 1280x720 (line stride 768).
exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_framebuffer, 32); exec_cfg((u32 *)DISPLAY_A_BASE, cfg_display_framebuffer, 32);
sleep(35000); sleep(35000);
GPIO_6(0x24) = GPIO_6(0x24) & 0xFFFFFFFE | 1; return lfb_addr;
return (u32 *)0xC0000000;
} }

View file

@ -2,6 +2,7 @@
#define _DI_H_ #define _DI_H_
#include "types.h" #include "types.h"
#include <stdbool.h>
/*! Display registers. */ /*! Display registers. */
#define _DIREG(reg) ((reg) * 4) #define _DIREG(reg) ((reg) * 4)
@ -53,4 +54,7 @@ void display_color_screen(u32 color);
/*! Init display in full 1280x720 resolution (32bpp, line stride 768, framebuffer size = 1280*768*4 bytes). */ /*! Init display in full 1280x720 resolution (32bpp, line stride 768, framebuffer size = 1280*768*4 bytes). */
u32 *display_init_framebuffer(void); u32 *display_init_framebuffer(void);
/*! Enable or disable the backlight. Should only be called when the screen is completely set up, to avoid flickering. */
void display_enable_backlight(bool on);
#endif #endif