在 linux 3.0.15 上实验
readl() writel() 读写 i2c5适配器地址 0x138B_0000 时发现 不管往里面些什么 读出来的都是0.
最后发现 是因为 没有为 i2c5 适配器打开时钟造成的。
i2c5适配器 相对于 cortex-a9 来说就是一个外围器件, 如果没有给它时钟那么就不能工作,
进而导致没有办法正常操作映射给 i2c5 适配器的地址。
解决此问题思路:
1. 因为 linux 3.0.15 内核中已经有 i2c5适配器的驱动代码并且可以, 所有尝试在这里添加读写寄存器的测试代码,发现可以使用。
2. 那自己的代码和三星的适配器代码进行比较, 排查每一行代码,最终发现没有时钟使能代码。
3. 将三星的代码中的时钟使能注释掉,发现也没有办法正常读写寄存器了。
心得: 所有器件都需要配置正确的时钟。 包括soc内部模块