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 节。