A10 A20 display controller

全志的A10 A20 SOC可谓功能强大,尤其是外设方面,可以说常用的接口基本配置全了。在显示方面,支持各种显示器,下图是显示控制器的内部结构:

 因为整图太宽了,分为左右两部分

 

从数据流的角度:输入->处理->输出

输入

输入数据主要分为两部分,写入到 linux framebuffer 的显示数据和摄像头捕获的图像。输入共2路。

处理

处理较复杂,很多概念还没弄清楚,目前只知道进行了前端FE(Frontend engine)和后端BE(Backend engine)处理,其中在后端进行了图层(video layer)叠加。处理共2路

输出

显示设备分为LCD接口和TV接口,LCD支持RGB、LVDS、8080等,TV支持HDMI、VGA、CVBS、YPrPb等。TV2路,LCD2路。

多路开关

这个部件非常重要,经过一定配置,可以得到多种输出组合。图中用红色数字标出的部分(带X图标)即是多路开关,下面分析各个多路开关的输入、输出和配置寄存器。

  • -1

-1 号开关决定3号开关(TCON FIFO1)的输入,可以选择两个摄像头中的一个CSI0/1。

  • 0

0 号开关用于选择显示数据的来源,这个开关实际上并不存在,只是为了说明显示数据可以来自framebuffer、CSI0/1(摄像头)。

  • 1

1号开关决定FE的输入,可以来自DRAM、BE0/1、LCD0/1。

寄存器为:DEFE_FRM_CTL_REG

  • 2

2号开关决定BE的输入,可以来自FE0/1。

寄存器为:DEFE_FRM_CTL_REG

  • 3

3号开关决定TCON(Timing controller)FIFO1的输入,之后将发往LCD接口,可以来自CSI0/1、BE0/1。

寄存器为:TCON0_CTL_REG

  • 5

5号开关决定LCD接口的输入,可以来自TCON 的FIFO1 和testdata。见3号开关配置。

  • 4

5号开关决定TCON(Timing controller)FIFO2的输入,之后将发往TV engine或HDMI,可以来自BE0/1。

寄存器为:TCON1_CTL_REG

  • 6

6号开关决定TVE(TV engine)或 HDMI 的输入,之后将发往TV或 HDMI  接口,可以来自TCON(Timing controller)FIFO2和测试用的bluedata(蓝屏)。

见开关4。

  • 7和8

 7号开关决定 HDMI 和 TVE 的输入,可以来自 LCD0-TCON1 或 LCD1-TCON1。

寄存器为:

TCON_MUX_CTL_REG

文档并不全面,补上代码:

__u8 tcon_set_hdmi_src(__u8 src)
{
    LCDC_INIT_BIT(0,LCDC_MUX_CTRL,0x3<<8,src<<8);
    return 0;    
}

__u8 tcon_set_tv_src(__u32 tv_index, __u8 src)
{
        if(tv_index == 0)
        {
            LCDC_INIT_BIT(0,LCDC_MUX_CTRL,0x3<<4,src<<4);
    }
    else
    {
            LCDC_INIT_BIT(0,LCDC_MUX_CTRL,0x3<<0,src<<0);
    }
    return 0;    
}
  • 9

9 号开关没有标出,在TVE0 和 TVE1之后,TV-DAC之前,用于选择电视输出的信号来自 TVE0还是TVE1。

寄存器为 TVE_000_REG

疑问

HDMI

始终未找到HDMI的输入源在哪里,HDMI硬件解口只有一个,目前的猜测是:哪个LCD-TCON使用的是TV模式,则HDMI连接到该通道,如果为LCD模式则不连接。最终的后果是:如果用2路输出,其中1路必须为LCD,否则HDMI输入源会冲突。这个猜想等待以后验证。

原文地址:https://www.cnblogs.com/JonnyLulu/p/3638905.html