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 幀緩衝和普通幀緩衝之間存在一些差異,如下所示
overlay 可以從基本幀緩衝中 32 位字對齊的位置開始,這意味著它們具有起始 (x, y)。此資訊被編碼到 var->nonstd 中 (不,var->xoffset 和 var->yoffset 不是為此目的)。
overlay 幀緩衝是根據指定的 'struct fb_var_screeninfo' 動態分配的,數量由以下因素決定
var->xres_virtual * var->yres_virtual * bppbpp = 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)
注意
overlay 不支援在 x 方向上平移,因此 var->xres_virtual 將始終等於 var->xres
overlay 的行長度必須是 32 位字的邊界,對於 YUV 平面模式,這是每個畫素具有最小位元數的元件的要求,例如,對於 YUV420,一個畫素的 Cr 分量實際上是 2 位,這意味著行長度應該是 16 畫素的倍數
起始水平位置 (XPOS) 應從 32 位字邊界開始,否則 fb_check_var() 將會失敗。
overlay 的矩形應位於基本平面內,否則將失敗
應用程式應按照以下順序操作 overlay 幀緩衝
open(“/dev/fb[1-2]”, ...)
ioctl(fd, FBIOGET_VSCREENINFO, ...)
使用所需的引數修改 'var'
var->xres 和 var->yres
如果需要更多記憶體,則更大的 var->yres_virtual,通常用於雙緩衝
var->nonstd 用於起始 (x, y) 和顏色格式
如果要使用 RGB 模式,則為 var->{red, green, blue, transp}
ioctl(fd, FBIOPUT_VSCREENINFO, ...)
ioctl(fd, FBIOGET_FSCREENINFO, ...)
mmap
...
對於 YUV 平面格式,這些實際上在幀緩衝框架中不受支援,應用程式必須注意幀緩衝中每個元件的偏移量和長度。
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 - 起始垂直位置