底层流程:
[display-sys.c]
mode节点建立
![](https://i-blog.csdnimg.cn/blog_migrate/4232b1e6eee401267d579cf88f00a4e9.png)
写响应函数mode_store()
![](https://i-blog.csdnimg.cn/blog_migrate/224cf574fa46f2635578f3afb7db460e.png)
----->
[rockchip-hdmi-sysfs.c] hdmi_set_mode()
![](https://i-blog.csdnimg.cn/blog_migrate/af860c04c0062c63a5a0c510c70557ef.png)
![](https://i-blog.csdnimg.cn/blog_migrate/a9401ceabc49af19ceba2eab90c9b015.png)
其中hdmi_find_best_mode 会返回最佳分辨率
注意参数二为0
![](https://i-blog.csdnimg.cn/blog_migrate/d02cde9a33cd35b5b8e7863f4c5a399b.png)
然后调用hdmi_submit_work() 注意参数HDMI_SET_VIDEO
--------->
[rockchip-hdmi-core.c] hdmi_submit_work()
![](https://i-blog.csdnimg.cn/blog_migrate/b3bde1bfb3e234f69e03d93f6579f4c2.png)
核心是调用hdmi_work_queue 函数
------->
[rockchip-hdmi-core.c] hdmi_work_queue()
![](https://i-blog.csdnimg.cn/blog_migrate/1f7e95c1492c8b96c6c0b975bf8652f9.png)
这里event == HDMI_SET_VIDEO 上面有提到
![](https://i-blog.csdnimg.cn/blog_migrate/a57df7183bc1c084e9d2e0bb624ec765.png)
继续跟踪hdmi_wq_set_video()
------>
[rockchip-hdmi-core.c] hdmi_wq_set_video()
![](https://i-blog.csdnimg.cn/blog_migrate/7c757c56a9a42631dc54eace89b63f32.png)
hdmi_wq_set_video 最后会调用hdmi_set_lcdc()
![](https://i-blog.csdnimg.cn/blog_migrate/6c2ba3dad8a3707ac2a2561ce3843f21.png)
------>
跟踪hdmi_set_info()
这个函数比较复杂挑重点:
首先 hdmi->vic !=0 的 这里是在hdmi_find_best_mode 中 若失败会返回0 正常会返回最佳的vic 值
![](https://i-blog.csdnimg.cn/blog_migrate/efa2d053a97420fafcd636d446536651.png)
![](https://i-blog.csdnimg.cn/blog_migrate/d4aa67b68085dab016c36b981a3da32d.png)
其中hdmi_mode[]数组就是预置支持的分辨率:
![](https://i-blog.csdnimg.cn/blog_migrate/e852f04ad9060819154e875caf2f0392.png)
![](https://i-blog.csdnimg.cn/blog_migrate/c4185d191a5606159d9146c8cd34649a.png)
匹配到之后调用合适时序参数!
所以重点其实就在于:vic的取值!如下:
![](https://i-blog.csdnimg.cn/blog_migrate/c56783c2e53812fee270a453f51644d5.png)
前面提到过 这个值来自于:hdmi_find_best_mode()函数
详细看这个函数:
![](https://i-blog.csdnimg.cn/blog_migrate/0af06d6ebe00aa59c2f94c933413ecd3.png)
会到开头:
![](https://i-blog.csdnimg.cn/blog_migrate/6dd0d50c0037b7e53cee412d0354e39e.png)
这个函数参数vic 为0
所以看第二个if语句:
核心就是,list_entry()
![](https://i-blog.csdnimg.cn/blog_migrate/2765cfde99c6e5ab16ff9d59be7a2f4d.png)
![](https://i-blog.csdnimg.cn/blog_migrate/b79635ac86f696820832d3f6ebb5274b.png)
![](https://i-blog.csdnimg.cn/blog_migrate/2969decaa8d3ae14541e2b6809e5f80a.png)
所以最终是在找HDMI支持的edid列表,返回列表中第一个元素的vic
那么现在重点现在就是 hdmi->edid.modelist 何时获得的????