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