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

屏幕页面错误

至少在 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 节。