Platform: Rockchip
OS: Android 6.0
Kernel: 3.10.92
有网友用了一颗名为lt8631的IC,告诉我设置地址为0x94,然后开机出现错误:
<3>[ 0.551181] i2c i2c-2: Invalid 7-bit I2C address 0x94
<3>[ 0.551195] i2c i2c-2: of_i2c: Failure registering /[email protected]/[email protected]
事实上他是用错了,因为0x94包含了读写bit了。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiI0NXYFhGd192UvwVe0lmdhJ3ZvwFM38CXlZHbvN3cpR2Lc1TPB10QGtWUCpEMJ9CXsxWam9CXwADNvwVZ6l2c052bm9CXUJDT1wkNhVzLcRnbvZ2Lc1zaXpVb5EzYwp0MhZXUYpVd1kmYr50MZV3YyI2cKJDT29GRjBjUIF2LcRHelR3LcJzLctmch1mclRXY39zM0ETM0IjMxETNxgDM3EDMy8CX0Vmbu4GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.jpg)
0x94是最终写地址,0x95是读地址,驱动中会将最后一个bit位添加进去和i2c设备通信。
因此我们只要写左边7位地址就可以了,也就是
0x94 /2 = 0x4A
再看一个例子,产品中用了一颗rtc芯片RX8010:
那么在dts中只要设置地址为0x32即可:
&i2c1 {
status = "okay";
rx8010: rx801@32 {
compatible = "epson,rx8010";
reg = <>;
status = "okay";
};
};