需求:项目需求需要同一个固件兼容两款不同IC的mipi屏。以便有一个IC停产之后使用不受影响。由于是同一个模组厂商,所以设计初就要求硬件接口一样或者兼容。
方法:一开始的想法很简单和网上以及同行提供的方法一样在uboot阶段去读屏的ID,然后再把对应屏ID放到cmdline里面去传到kernel.在kernel里面做判断屏ID,来使用不同的panel-init-sequence 和timing。这种方法也可行。把屏的ID放到cmdline的方法是我也没找到,有大佬解答一下吗?
然后询问RK,RK提供了另一种方案不依靠cmdline传参。dts中dsi节点下面添加不同的panel节点。开机uboot阶段,通过mipi dsi读取每个屏的id寄存器与dts中设置的目标寄存器值进行比较。如果不是完全一致,就会将对应的panel节点的status设置成“disabled”。
最后会留下来唯一一个是status是“okay”的panel。kernel在加载panel的时候找到这个status是okay的panel,其他的不会加载。okay我们按照这个做法来实现我们的需求。
首先对DTB做一个深入了解。要不然怎么理解在uboot阶段把dts里面的status掉呢。在系统启动过程中,由bootloader将dtb文件加载到内存,并告知linux内核dtb在内存中的首地址(中途可能会对某些节点进行创建或者修改)。内核在start_kernel中会对dtb文件进行解析,并形成对应的device_node和property结构体;至此,dtb文件便完成任务了大佬做的详细解答可点
dtb的组成