1. 程式人生 > >[SPRD]展訊平臺 LCD(Mipi)移植步驟及問題歸納

[SPRD]展訊平臺 LCD(Mipi)移植步驟及問題歸納

PortingGuide

Backlight

背光的硬體設計有兩種情況:
1. 內建並聯背光
2. 外接串聯背光
對於 1 的情況,步驟如下:
1.移植對應的 lcd 驅動。
2.設定u-boot\drivers\video\sprdfb\sprdfb_main.c中的背光為內建:
void set_backlight(uint32_t value)函式中,新增white_led = 1;
3. 在 kernel/drivers/video/backlight/sprd_backlight.c 的
#if (defined(CONFIG_SPX15))前面
刪除下述巨集定義,只定義 #define SPRD_BACKLIGHT_WHITELED

-- #ifdef CONFIG_BACKLIGHT_SPRD_PWM_MODE
--       /*if the backlight is driven by pwm, use this MACRO */
--       #define SPRD_BACKLIGHT_PWM
-- #else
--       /*the backlight is driven by whiteled default */
--       #define SPRD_BACKLIGHT_WHITELED
--       #define SPRD_DIM_PWM_MODE
-- #endif
++ #define SPRD_BACKLIGHT_WHITELED

4.在sprd_bl_whiteled_update_status中,刪除如下操作:

sci_adi_raw_write(PD_PWM_BASE + PWM_SCALE, PWM_PRESCALE);
sci_adi_raw_write(PD_PWM_BASE + PWM_CNT,(pwm_level << 8) | PWM_MOD_MAX);
sci_adi_raw_write(PD_PWM_BASE + PWM_SCALE, PWM_SCALE | PWM_ENABLE);

對於 2 的情況, 展訊預設採用的便是外接串聯,所以不需要進行配置。但是可以通過 展訊平臺 LCD(Mipi) 載入流程分析

來了解 LCD 和 Backlight 的載入過程。

LCD

LCD 的載入分為兩個部分,U-Boot 和 Kernel,同樣移植也分為這兩個部分。

U-Boot

1.新增驅動檔案 u-boot/drivers/video/sprdfb/lcd/lcd_ek79007_mipi.c
2.新增編譯規則 u-boot/drivers/video/sprdfb/lcd/Makefile

        COBJS-$(CONFIG_FB_LCD_EK79007_MIPI) += lcd_ek79007_mipi.o

3.配置 LCD 編譯選項及 LCD 尺寸 u-boot/include/configs/sp7731gea_hdr.h

4.關聯到核心 u-boot/drivers/video/sprdfb_panel.c
新增

 Kernel

1.新增驅動檔案 kernel/drivers/video/sprdfb/lcd/lcd_ek79007_mipi.c
注意程式碼檔案中需要新增

2.新增 Makefile

        obj-$(CONFIG_FB_LCD_EK79007_MIPI) += lcd_ek79007_mipi.o

3.新增 config kernel/arch/arm/configs/sp7731gea_hdr-dt_defconfig

        CONFIG_FB_LCD_EK79007_MIPI=y

4.修改 Kconfig

    config FB_LCD_EK79007_MIPI
        boolean "support ek79007 mipi panel"
        default y

除錯過程中遇到的問題

Q: Backlight 不亮
A: 因為採用的是展訊預設的外接串聯背光電路,所以軟體方面不需要額外配置。
檢查硬體:
檢查背光的電壓是否有給

——>

——>

依次檢查
LCM_BL_PWM 輸出的波形 (正常)
LEDA 電壓(異常)交由硬體檢查進一步發現,有一顆電阻阻值異常(1.3歐錯貼成了1.3k歐)
修改後,背光正常:白屏

Q:LCD 白屏
A:移植完成驅動後應該至少可以點亮(顯示東西,雖然顯示的東西可能有誤)
但是實際為白屏(只點亮了背光)
檢查 屏的電壓是否正常。要保證這樣幾個地方電壓是正常的:
VGH 和 VGL

——> 這個地方的使能腳控制 VGH 和 VGL

——> 發現LCD_PWREN 接到的是 LCM_CABC

而 LCM_CABC 是無法管腳複用的
所以直接飛線到一個高電壓,LCD_PWREN 使能腳為高電壓。

Q:開機時,先白屏,然後慢慢的變暗(背光一直為亮)
A:繼續檢查硬體,發現 LCD_VDD 沒有 LDO 電壓供電。
解決辦法是 從 BUFFER 電壓飛線過去,用的是 VDD_1V8,板子走線寬度是 2.5mm,可以正常使用。
至此 Kernel 部分可以正常顯示,但是 U-Boot 階段花屏。

Q:抓取 Log 發現 LCD panel info: 720 x 1280, 16 bit/pix
但是實際應該是 600 x 1024 ,追蹤程式碼發現 Panel Info 是根據 u-boot/drivers/video/sprdfb/sprdfb_panel.c 來輸出的

在 u-boot/include/configs/sp7731gea_hdr.h 中發現並修改

並且在燒錄的時候修改bootloader階段的圖片為 600x1024 的 bmp
u-boot 階段顯示正常。