看其他文章时候的一些新的感悟

  1. 关于dts中platform device 和 i2c device 的级别问题
    之前写到过,kernel启动后从aboot_init进去一系列的解析DTS流程,这个流程中写到了,只会注册platform device,然后i2c device再由i2c bus来注册,当时的理解是platform device 和 i2c device是同等地位的,就像i2c device 与 spi device的关系一样,是分别在两个bus下的device。今天更正这个思想如下:

在DTS中来看,platform device是比i2c device 的父节点!
1.我们知道i2c adapter是注册到platform bus上的对吧,然后i2c client再依附到i2c adapter上
2.回顾一下解析DTS创建platform device的时候,是从二级节点(" / ")以后开始创建 device_node的对吧
这样一想就知道了,其实i2c adapter就是被创建的platform device,然后i2c adapter下面的i2c device(也是i2c client)再由i2c bus来注册,对应到DTS文件中如下:

i2c@78b7000{			//这个就是注册到platform上的i2c adapter
	compatible = "qcom,i2c-msm-v2"
	...
	...
	status == "ok"
		novatek@62{		//这个就是注册到i2c bus上 的i2c client(i2c device)
			compatible = "novatek,NVT-ts"
			reg = <0x62>
			status = "ok"
			...
			}
	...
	...
	}

我到这里还有一个问题:
这样看起来,好像在platform bus上注册了i2c adapter之后,就算有了i2c bus,也就是说没有所谓的i2c bus,只是有了i2c adapter就算有了i2c bus?还是有专门的i2c bus,只是i2c adapter注册到platform bus上,然后i2c client再注册到i2c bus上,只是由i2c adapter(注册在platform bus)来与底层硬件沟通实现收发数据(通过使用 i2c algorithm中的xfer方法)

一个感悟:
看来DTS拓扑结构中的node并不是以设备的“物理界限”为单位,而是以设备的“功能”为单位的。

猜你喜欢

转载自blog.csdn.net/qq_35065875/article/details/83415474