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"; };