從 commit log 中找出當初disable 的 rev,找出 diff:
diff --git a/include/configs/mx51_bbg_android.h b/include/configs/mx51_bbg_android.h
index 7b054e3..a460954 100644
--- a/include/configs/mx51_bbg_android.h
+++ b/include/configs/mx51_bbg_android.h
@@ -349,7 +349,6 @@
#undef CONFIG_JFFS2_CMDLINE
#define CONFIG_JFFS2_DEV "nand0"
-#define CONFIG_SPLASH_SCREEN
#ifdef CONFIG_SPLASH_SCREEN
/*
* Framebuffer and LCD
重新把他加回去。然後grep 一下 CONFIG_SPLASH_SCREEN 的code.
function implememt 都在 common/lcd.c
hardware driver 在 drivers/video/mxc_ipuv2.c
另外還有 board specific setting 在 board/freescale/mx51_bbg/mx51_bbg.c
有兩組 DI (display Interface) : DI0, DI1,在 code 中 drivers/video/ipu_common.c 用 data structure clk 宣告一個 array ipu_clk[2] 描述兩個 interface 的 clk setting。
決定 interface 的 argument..
ipu_common.c : int ipu_probe(int di, ipu_di_clk_parent_t di_clk_parent, int di_clk_val)..
if (di_clk_parent == DI_PCLK_LDB) {
clk_set_parent(g_pixel_clk[di], g_di_clk[di]);
} else {
clk_set_parent(g_pixel_clk[0], g_ipu_clk);
clk_set_parent(g_pixel_clk[1], g_ipu_clk);
}
clk_enable(g_ipu_clk);
所以要看 di_clk_parent 是否是 1,還有 di 的值。
在 drivers/video/mxc_ipuv3_fb.c
int ipuv3_fb_init(struct fb_videomode *mode, int di, int interface_pix_fmt,
ipu_di_clk_parent_t di_clk_parent, int di_clk_val)
{
int ret;
ret = ipu_probe(di, di_clk_parent, di_clk_val);
參數 di, di_clk_parent ...
在 board/freescale/mx51_bbg/mx51_bbg.c
void lcd_enable(void)
{
....
....
gpio config
....
ret = ipuv3_fb_init(&claa_wvga, 1, IPU_PIX_FMT_RGB565, DI_PCLK_PLL3, 0);
di_parent = DI_PCLK_PLL3,di = 1.
所以是用 DI1.
follow kernel 的內容新增一個pvi_2003a_wvga .並且把 di 由 1 改為 0.
從 kernel boot message 可以看到這個設計是以 di0 作 primary。
同時 format 改為 RGB24
檢查一下 gpio 的設定..
DI1_DISP_CLK : No Muxing ..
DI1_PIN2 : ALT0 才是 ipu. 電路作DISP1_HSYNC 用
DI1_PIN3 : ALT0 是 ipu,作 DISP1_VSYNC 用
DI1_PIN15 : No Muxing, ipu, 作 DISP1_DRDY -- 接到 image processor,當 DE 用
DISP1_DAT 0 ~ 5 : No Muxing.
DISP1_DAT 6 ~ 23 : ALT0 是 ipu
看了一下,這些 pin default 都是 ALT0.
在cls command 的 do function 加入填寫螢幕的動作,查各bit 的有效顏色..
0. 1. 2. 3. 4 - green 5. 6. 7. 8. 9.10 - blue 11.12.13.14.15 - red所以是 565沒錯。
修改到此,可以試試看 bmp 的 function 了。因為 option 只有 CONFIG_BMP_8BPP. 所以只有 support 8bpp 的 bmp format.
follow 這一篇 U-Boot display support 產生 8bpp 的 bmp file,叫 u-boot load 進 ram 然後 show出來..
- 先用 gimp create 一個 800x480, backgroupe 是白色,中間隨便的圖案。
如果是用現成的圖,先用 gimp打開,然後 save as,選 windows bmp file,save 時,advance option 選 16bit 565 的格式 - 使用 imagemagick 轉成 8bpp:
$ convert 00.bmp -colors 256 -compress none splash.bmp
- copy splash.bmp 到 boot sd 的 partition 1
- boot,進入 uboot console.
- uboot load spalsh.bmp 進 memory:
fatload mmc 0:1 0x92000000 splash.bmp
- 用 bmp display 顯示出來
bmp display 0x92000000
在 boot env 加上 splashimage=0x90800000 後,開機竟然show 一個原廠的畫面...
找了一下,發現在 boared/freescale/common 下有 bmp 的 c arrary source..
只要在 bootargument 有 define splashimage='address' 指定 splash 的 memory location,
就會把 bmp array data 顯示出來。
用 這一篇 的內容,把 splash.bmp 轉成 c array.
$ hexdump -e '16/1 "0x%02X,"' -e '"\n"' splash.bmp -v
-v option 是要他不要把重複的以 '*' 代替,忠實的顯示出來。output pipe 到 dummy_800x480.c,修改 Makefile。
完成。
沒有留言:
張貼留言