MTK HDMI 流程
2024-09-28 18:21:56
一、HDMI初始化
1. kernel-3.18/drivers/misc/mediatek/ext_disp/mtk_extd_mgr.c
static int __init mtk_extd_mgr_init(void)
{
int i = ;
int ret = ;
/* struct notifier_block notifier;*/ EXT_MGR_FUNC(); extd_driver[DEV_MHL] = EXTD_HDMI_Driver();
extd_driver[DEV_EINK] = EXTD_EPD_Driver();
extd_factory_driver[DEV_MHL] = EXTD_Factory_HDMI_Driver(); for (i = DEV_MHL; i < DEV_MAX_NUM - ; i++) {
if (extd_driver[i]->init)
extd_driver[i]->init();
} if (platform_driver_register(&external_display_driver)) {//注册external_display_driver驱动程序
EXT_MGR_ERR("failed to register mtkfb driver\n");
return -;
} notifier.notifier_call = fb_notifier_callback;
ret = fb_register_client(¬ifier);
if (ret)
EXT_MGR_ERR("unable to register fb callback!\n"); #ifdef CONFIG_HAS_EARLYSUSPEND
register_early_suspend(&extd_early_suspend_handler);
#endif
return ;
}
2. kernel-3.18/drivers/misc/mediatek/ext_disp/extd_hdmi.c
int hdmi_init(void)
{
int ret = ; HDMI_ERR(" start\n");
/* for support hdmi hotplug, inform AP the event */
hdmi_switch_data.name = "hdmi";
hdmi_switch_data.index = ;
hdmi_switch_data.state = HDMI_STATE_NO_DEVICE;
ret = switch_dev_register(&hdmi_switch_data); if (ret)
HDMI_ERR("[hdmi][HDMI]switch_dev_register failed, returned:%d!\n", ret); hdmires_switch_data.name = "res_hdmi";
hdmires_switch_data.index = ;
hdmires_switch_data.state = ;
ret = switch_dev_register(&hdmires_switch_data); if (ret)
HDMI_ERR("[hdmi][HDMI]switch_dev_register failed, returned:%d!\n", ret);
HDMI_ERR(" done\n");
return ;
}
3. kernel-3.18/drivers/misc/mediatek/ext_disp/mtk_extd_mgr.c
static int mtk_extd_mgr_probe(struct platform_device *pdev)
{
int ret = ;
int i = ;
struct class_device *class_dev = NULL; EXT_MGR_FUNC(); /* Allocate device number for hdmi driver */
ret = alloc_chrdev_region(&extd_devno, , , EXTD_DEVNAME); if (ret) {
EXT_MGR_LOG("alloc_chrdev_region fail\n");
return -;
} /* For character driver register to system, device number binded to file operations */
extd_cdev = cdev_alloc();
extd_cdev->owner = THIS_MODULE;
extd_cdev->ops = &external_display_fops;
ret = cdev_add(extd_cdev, extd_devno, ); /* For device number binded to device name(hdmitx), one class is corresponeded to one node */
extd_class = class_create(THIS_MODULE, EXTD_DEVNAME);
/* mknod /dev/hdmitx */
class_dev = (struct class_device *)device_create(extd_class, NULL, extd_devno, NULL, EXTD_DEVNAME);
ext_dev_context = (struct device *)&(pdev->dev); for (i = DEV_MHL; i < DEV_MAX_NUM - ; i++) {
if (extd_driver[i]->post_init != )
extd_driver[i]->post_init();
} EXT_MGR_LOG("[%s] out\n", __func__);
return ;
}
最新文章
- spin_lock 和 spin_lock_irqsave
- 斯坦福第七课:正则化(Regularization)
- C#获取ftp文件最后修改时间
- Linux常用命令收集
- [AHOI2015 Junior] [Vijos P1943] 上学路上 【容斥+组合数】
- Java源程序结构
- jQuery实例1
- Java IO学习笔记(五)对象流
- dojo级联步骤
- cmake find_package 命令
- react Hooks
- Debian Security Advisory(Debian安全报告) DSA-4403-1 php7.0
- java导出csv文件使用Excel打开乱码问题
- OSPF补全计划-0 preface
- 解决mybatis generator无法覆盖XML
- 【读书笔记】iOS-如何推销你的Web应用
- 2017-2018 Exp9 网络欺诈技术防范 20155214
- docker重新安装后无法启动
- 【FindReport】图表快速部署开发
- CSS选择器详解(一)常用选择器
热门文章
- 如何防范SQL注入式攻击
- Sql语言复习
- 【环境配置】Linux的经常使用命令
- 【分布式计算】DFS &;amp;&;amp; BigTable
- 关于mysql的表名/字段名/字段值是否区分大小写的问题
- 【转载】C#扫盲之:带你掌握C#的扩展方法、以及探讨扩展方法的本质、注意事项
- svn 命令个
- 《学习opencv》笔记——矩阵和图像操作——cvConvertScale,cvConvertScaleAbs,cvCopy and cvCountNonZero
- iOS UI13_数据解析XML_,JSON
- Detours3.0 文档翻译