hdmi

打开hdmi的调试信息
①在内核中打开宏CONFIG_OMAP2_DSS_DEBUG_SUPPORT
②将dss_debug的初值赋值为   1
误区:我开始的时候在#include dss.h 前边将上#define DEBUG 以为就能打印~ ~



HDMI 带宽
1.0 版本就设定为最高 4.96Gbps
      晶振频率:最初制定时范围从 25MHz-165MHz 之间
      一个 TMDS 通道每秒最多能传输 165MHz× 10bit=1.65Gbit
      3 个 TMDS通道一秒就可以传输 1.65× 3=4.95Gbit
      再加上控制数据,用标准方法表示就是 4.96Gbps 的带宽




HDMI接口具有热插拔功能,发送设备检测到 HPD 信号为低时, 去读取 EDID 的数据,来确认接收装置是否出现变化,
EDID数据决定了接收端显示设备的属性


omap平台dss中个人觉得两个比较核心的函数
omap_dss_register_device();
omap_dss_register_driver();

module_init(omap_dss_init)调用以下过程    //linux/drivers/video/omap2/dss/core.c
omap_dss_register_drivers
        static int (*dss_output_drv_reg_funcs[])(void) __initdata = {
                hdmi_init_platform_driver
                         omapdss_hdmihw_probe
                                hdmi_panel_init();
                                       omap_dss_register_driver
                                hdmi_probe_pdata
                                       r = omap_dss_register_device(dssdev, &pdev->dev, i);






hdmi.c中有三个数组,可能hdmi接口的屏幕还有分类的情况 ,后边再补充
static const struct hdmi_config cea_timings[] = {
static const struct hdmi_config vesa_timings[] = {
static const struct hdmi_config s3d_timings[] = {


hdmi_power_on
       gpio_set_value(hdmi.ls_oe_gpio, 1);  
                  //全文件搜ls_oe_gpio  
                    可以在Board-omap4panda.c (kernel-tilt\arch\arm\mach-omap2): .ls_oe_gpio = HDMI_GPIO_LS_OE,
                    然后可以在board-omap4panda.c中找到HDMI_GPIO_LS_OE的使能脚定义




//board-omap4panda.c
#define HDMI_GPIO_CT_CP_HPD 60 /* HPD mode enable/disable */
#define HDMI_GPIO_LS_OE 41 /* Level shifter for HDMI */
#define HDMI_GPIO_HPD  63 /* Hotplug detect */
作为HDMI的中断
hdmi_init_display ()              //drivers/video/omap2/dss/hdmi.c
struct gpio gpios[] = {
/* CT_CP_HPD_GPIO must be always ON for HPD detection to work */
{ hdmi.ct_cp_hpd_gpio, GPIOF_OUT_INIT_HIGH, "hdmi_ct_cp_hpd" },
{ hdmi.ls_oe_gpio, GPIOF_OUT_INIT_LOW, "hdmi_ls_oe" },
{ hdmi.hpd_gpio, GPIOF_DIR_IN, "hdmi_hpd" },
};



在调试oled的时候发现以下打印
正常显示内核打印:omapdss CORE: bus_match. dev display0/chipsee_dpi_panel, drv hdmi_panel
异常显示内核打印:omapdss CORE: bus_match. dev display2/chipsee_dpi_panel, drv hdmi_panel
在内核代码中搜索bus_match关键字  发现 
omap_dss_register_device    ->   dev_set_name(&dssdev->dev, "display%d", disp_num);
在board-omap4panda.c的static struct omap_dss_device *omap4_panda_dss_devices[] 数组中调整成员的顺序就可以改变名字内核中的打印display*


//成功显示的内核打印    omapdss DISPC: hsync 31406Hz, vsync 59Hz----------------------在不能显示的里边没有响应的一行
在内核中搜索hsync 后再搜Hz,      找到以下匹配的一行:
./drivers/video/omap2/dss/dispc.c:      DSSDBG("hsync %luHz, vsync %luHz\n", ht, vt);
if (dispc_mgr_is_lcd(channel)) {。。。。。 DSSDBG("hsync %luHz, vsync %luHz\n", ht, vt);。。。。。}
所以想到channel不对
再检查内核中相关channel的打印
正常显示的内核打印:[    4.938232] omapdss DISPC: channel 2 xres 720 yres 480
非正常显示内核打印:[    8.755889] omapdss DISPC: channel 1 xres 1024 yres 768
channel的类型为enum omap_channel {
OMAP_DSS_CHANNEL_LCD = 0,
OMAP_DSS_CHANNEL_DIGIT = 1,      //非正常打印
OMAP_DSS_CHANNEL_LCD2 = 2,      //可以正常打印的通道
};
具体的含义对应图:OMAP4460_TRM_vK.pdf   (p2180)Figure 10-37. DISPC Architecture Overview













评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值