IIC Q&A

Q1:kernel下的i2c clk怎么调整?

在对应dtsi的i2c节点里增加:i2c-speed = <0>; 驱动会去读dts的节点。

typedef enum _HWI2C_CLKSEL
{
E_HWI2C_HIGH = 0, /// high speed 400K
E_HWI2C_NORMAL, /// normal speed 300K
E_HWI2C_SLOW, /// slow speed 200K
E_HWI2C_VSLOW, /// very slow 100K
E_HWI2C_USLOW, /// ultra slow 50K
E_HWI2C_UVSLOW, /// ultra-very slow 25K
E_HWI2C_NOSUP /// non-support speed
}HWI2C_CLKSEL;

如在mercury6.dtsi中调整sensorr 0的 i2c clk为100k,则打开mercury6.dtsi文件,修改如下:

i2c0@0{
compatible = "sstar,i2c";
reg = <0x1F223000 0x200>,<0x1F207800 0x200>,<0x1F207000 0x200>;
interrupts=<GIC_SPI INT_IRQ_MIIC_0 IRQ_TYPE_LEVEL_HIGH>;
clocks = <&CLK_miic0>;
#address-cells = <1>;
#size-cells = <0>;
i2c-group = <0>;
i2c-speed = <3>;       //修改为E_HWI2C_VSLOW
status = "ok";
};