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 - 起始垂直位置