EP93xx LCD 控制器驅動

EP93xx LCD 控制器可以驅動標準桌面顯示器和嵌入式 LCD 顯示器。如果您有標準桌面顯示器,您可以使用標準的 Linux 影片模式資料庫。在您的板級檔案中

static struct ep93xxfb_mach_info some_board_fb_info = {
        .num_modes      = EP93XXFB_USE_MODEDB,
        .bpp            = 16,
};

如果您有嵌入式 LCD 顯示器,則需要按如下方式定義影片模式

static struct fb_videomode some_board_video_modes[] = {
        {
                .name           = "some_lcd_name",
                /* Pixel clock, porches, etc */
        },
};

請注意,畫素時鐘值的單位為皮秒。您可以使用 KHZ2PICOS 宏來轉換畫素時鐘值。大多數其他值的單位為畫素時鐘。有關更多詳細資訊,請參見幀緩衝裝置

您板級的 ep93xxfb_mach_info 結構應如下所示

static struct ep93xxfb_mach_info some_board_fb_info = {
        .num_modes      = ARRAY_SIZE(some_board_video_modes),
        .modes          = some_board_video_modes,
        .default_mode   = &some_board_video_modes[0],
        .bpp            = 16,
};

可以透過將以下內容新增到您的板級初始化函式中來註冊幀緩衝裝置

ep93xx_register_fb(&some_board_fb_info);

影片屬性標誌

ep93xxfb_mach_info 結構具有一個 flags 欄位,可用於配置控制器。影片屬性標誌在 EP93xx 使用者指南的第 7 節中進行了完整描述。以下標誌可用

EP93XXFB_PCLK_FALLING

在畫素時鐘的下降沿時鐘資料。預設是在上升沿時鐘資料。

EP93XXFB_SYNC_BLANK_HIGH

消隱訊號為高電平有效。預設情況下,消隱訊號為低電平有效。

EP93XXFB_SYNC_HORIZ_HIGH

水平同步為高電平有效。預設情況下,水平同步為低電平有效。

EP93XXFB_SYNC_VERT_HIGH

垂直同步為高電平有效。預設情況下,垂直同步為高電平有效。

可以使用以下標誌控制幀緩衝區的物理地址

EP93XXFB_USE_SDCSN0

使用 SDCSn[0] 作為幀緩衝區。這是預設設定。

EP93XXFB_USE_SDCSN1

使用 SDCSn[1] 作為幀緩衝區。

EP93XXFB_USE_SDCSN2

使用 SDCSn[2] 作為幀緩衝區。

EP93XXFB_USE_SDCSN3

使用 SDCSn[3] 作為幀緩衝區。

平臺回撥

EP93xx 幀緩衝驅動程式支援三個可選的平臺回撥:setup、teardown 和 blank。 setup 和 teardown 函式分別在安裝和移除幀緩衝驅動程式時呼叫。當顯示器消隱或取消消隱時,將呼叫 blank 函式。

setup 和 teardown 裝置將 platform_device 結構作為引數傳遞。 fb_info 和 ep93xxfb_mach_info 結構可以如下獲得

static int some_board_fb_setup(struct platform_device *pdev)
{
        struct ep93xxfb_mach_info *mach_info = pdev->dev.platform_data;
        struct fb_info *fb_info = platform_get_drvdata(pdev);

        /* Board specific framebuffer setup */
}

設定影片模式

影片模式使用以下語法設定

video=XRESxYRES[-BPP][@REFRESH]

如果 EP93xx 影片驅動程式是內建的,則在 Linux 核心命令列上設定影片模式,例如

video=ep93xx-fb:800x600-16@60

如果 EP93xx 影片驅動程式是作為模組構建的,則在安裝模組時設定影片模式

modprobe ep93xx-fb video=320x240

Screenpage 錯誤

至少在 EP9315 上,存在一個矽錯誤,該錯誤導致 VIDSCRNPAGE(幀緩衝區物理偏移)的第 27 位被強制為低電平。該錯誤的非官方勘誤表位於

https://marc.info/?l=linux-arm-kernel&m=110061245502000&w=2

預設情況下,EP93xx 幀緩衝驅動程式會檢查已分配的物理地址是否設定了第 27 位。如果設定了,則釋放記憶體並返回錯誤。可以透過在載入驅動程式時新增以下選項來停用該檢查

ep93xx-fb.check_screenpage_bug=0

在某些情況下,可以重新配置您的 SDRAM 佈局以避免此錯誤。 有關詳細資訊,請參見 EP93xx 使用者指南的第 13 節。