PXA25x LCD 控制器驅動

該驅動支援以下選項,可以透過模組方式的 options=<OPTIONS> 或者內建方式的 video=pxafb:<OPTIONS> 指定。

例如

modprobe pxafb options=vmem:2M,mode:640x480-8,passive

或者在核心命令列上

video=pxafb:vmem:2M,mode:640x480-8,passive

vmem: VIDEO_MEM_SIZE

要分配的視訊記憶體大小 (可以後綴 K 或 M 表示千位元組或兆位元組)

mode:XRESxYRES[-BPP]

XRES == LCCR1_PPL + 1

YRES == LLCR2_LPP + 1

顯示器的畫素解析度

BPP == 位深度。有效值為 1, 2, 4, 8 和 16。

pixclock:PIXCLOCK

畫素時鐘,單位為皮秒

left:LEFT == LCCR1_BLW + 1

right:RIGHT == LCCR1_ELW + 1

hsynclen:HSYNC == LCCR1_HSW + 1

upper:UPPER == LCCR2_BFW

lower:LOWER == LCCR2_EFR

vsynclen:VSYNC == LCCR2_VSW + 1

顯示邊距和同步時間

color | mono => LCCR0_CMS

嗯...

active | passive => LCCR0_PAS

主動式 (TFT) 或被動式 (STN) 顯示器

single | dual => LCCR0_SDS

單面板或雙面板被動式顯示器

4pix | 8pix => LCCR0_DPD

4 或 8 畫素單色單面板資料

hsync:HSYNC, vsync:VSYNC

水平和垂直同步。 0 => 低電平有效, 1 => 高電平有效。

dpc:DPC

雙倍畫素時鐘。 1=>true, 0=>false

outputen:POLARITY

輸出使能極性。 0 => 低電平有效, 1 => 高電平有效

pixclockpol:POLARITY

畫素時鐘極性 0 => 下降沿, 1 => 上升沿

PXA27x 及更高版本 LCD 控制器的 Overlay 支援

PXA27x 及更高版本的處理器支援在基本幀緩衝之上的 overlay1 和 overlay2 (雖然也可以在基本幀緩衝之下)。它們支援調色盤和非調色盤 RGB 格式,以及 YUV 格式 (僅在 overlay2 上可用)。這些 overlay 具有專用的 DMA 通道,並且其行為類似於幀緩衝。

但是,這些 overlay 幀緩衝和普通幀緩衝之間存在一些差異,如下所示

  1. overlay 可以從基本幀緩衝中 32 位字對齊的位置開始,這意味著它們具有起始 (x, y)。此資訊被編碼到 var->nonstd 中 (不,var->xoffset 和 var->yoffset 不是為此目的)。

  2. overlay 幀緩衝是根據指定的 'struct fb_var_screeninfo' 動態分配的,數量由以下因素決定

    var->xres_virtual * var->yres_virtual * bpp
    

    bpp = 16 -- 用於 RGB565 或 RGBT555

    bpp = 24 -- 用於 YUV444 緊湊格式

    bpp = 24 -- 用於 YUV444 平面格式

    bpp = 16 -- 用於 YUV422 平面格式 (1 畫素 = 1 Y + 1/2 Cb + 1/2 Cr)

    bpp = 12 -- 用於 YUV420 平面格式 (1 畫素 = 1 Y + 1/4 Cb + 1/4 Cr)

    注意

    1. overlay 不支援在 x 方向上平移,因此 var->xres_virtual 將始終等於 var->xres

    2. overlay 的行長度必須是 32 位字的邊界,對於 YUV 平面模式,這是每個畫素具有最小位元數的元件的要求,例如,對於 YUV420,一個畫素的 Cr 分量實際上是 2 位,這意味著行長度應該是 16 畫素的倍數

    3. 起始水平位置 (XPOS) 應從 32 位字邊界開始,否則 fb_check_var() 將會失敗。

    4. overlay 的矩形應位於基本平面內,否則將失敗

    應用程式應按照以下順序操作 overlay 幀緩衝

    1. open(“/dev/fb[1-2]”, ...)

    2. ioctl(fd, FBIOGET_VSCREENINFO, ...)

    3. 使用所需的引數修改 'var'

      1. var->xres 和 var->yres

      2. 如果需要更多記憶體,則更大的 var->yres_virtual,通常用於雙緩衝

      3. var->nonstd 用於起始 (x, y) 和顏色格式

      4. 如果要使用 RGB 模式,則為 var->{red, green, blue, transp}

    4. ioctl(fd, FBIOPUT_VSCREENINFO, ...)

    5. ioctl(fd, FBIOGET_FSCREENINFO, ...)

    6. mmap

    7. ...

  3. 對於 YUV 平面格式,這些實際上在幀緩衝框架中不受支援,應用程式必須注意幀緩衝中每個元件的偏移量和長度。

  4. var->nonstd 用於傳遞起始 (x, y) 位置和顏色格式,詳細的位域如下所示

    31                23  20         10          0
     +-----------------+---+----------+----------+
     |  ... unused ... |FOR|   XPOS   |   YPOS   |
     +-----------------+---+----------+----------+
    

    FOR - 顏色格式,由 pxafb.h 中的 OVERLAY_FORMAT_* 定義

    • 0 - RGB

    • 1 - YUV444 PACKED

    • 2 - YUV444 PLANAR

    • 3 - YUV422 PLANAR

    • 4 - YUR420 PLANAR

    XPOS - 起始水平位置

    YPOS - 起始垂直位置