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