做驱动的要经常配置i2c,而配置i2c无非就是确定i2c器件挂在哪一个i2c总线上,以及i2c的具体地址.下面以高通8909平台为例子说一下
- 确定i2c机器挂在哪一个i2c总线上
-
- 从原理图得到SDA,SCL对应的gpio,我这个gpio为gpio6,gpio7
- 在msm8909-pinctrl.dtsi文件中找到该gpio对应的i2c总线,如下,可见其对应的i2c总线是i2c_1
-
pmx_i2c_1 {
-
i2c_1_active: i2c_1_active {
-
mux {
-
pins = "gpio6", "gpio7";
-
function = "blsp_i2c1";
-
};
-
config {
-
pins = "gpio6", "gpio7";
-
drive-strength = < 2>; /* 2 MA */
-
bias-disable; /* No PULL */
-
};
-
};
-
i2c_1_sleep: i2c_1_sleep {
-
mux {
-
pins = "gpio6", "gpio7";
-
function = "blsp_i2c1";
-
};
-
config {
-
pins = "gpio6", "gpio7";
-
drive-strength = < 2>; /* 2 MA */
-
bias-disable; /* No PULL */
-
};
-
};
-
};
<pre>
-
- 然后在msm8909.dtsi里面查找i2c_1,就可以得到其i2c地址为78b5000
-
<pre class="has" name="code"><code class="hljs objectivec"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> i2c_1: i2c@<span class="hljs-number">78</span>b5000 { <span class="hljs-comment">/* BLSP1 QUP1 */</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> compatible = <span class="hljs-string">"qcom,i2c-msm-v2"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-meta">#address-cells = <span class="hljs-meta-string"><1></span>;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-meta">#size-cells = <span class="hljs-meta-string"><0></span>;</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> reg-names = <span class="hljs-string">"qup_phys_addr"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> reg = <<span class="hljs-number">0x78b5000</span> <span class="hljs-number">0x1000</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> interrupt-names = <span class="hljs-string">"qup_irq"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> interrupts = <<span class="hljs-number">0</span> <span class="hljs-number">95</span> <span class="hljs-number">0</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> clocks = <&clock_gcc clk_gcc_blsp1_ahb_clk>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <&clock_gcc clk_gcc_blsp1_qup1_i2c_apps_clk>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="11"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> clock-names = <span class="hljs-string">"iface_clk"</span>, <span class="hljs-string">"core_clk"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="12"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qcom,clk-freq-<span class="hljs-keyword">out</span> = <<span class="hljs-number">100000</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="13"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qcom,clk-freq-<span class="hljs-keyword">in</span> = <<span class="hljs-number">19200000</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="14"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> pinctrl-names = <span class="hljs-string">"i2c_active"</span>, <span class="hljs-string">"i2c_sleep"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="15"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> pinctrl<span class="hljs-number">-0</span> = <&i2c_1_active>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="16"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> pinctrl<span class="hljs-number">-1</span> = <&i2c_1_sleep>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="17"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qcom,noise-rjct-scl = <<span class="hljs-number">0</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="18"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qcom,noise-rjct-sda = <<span class="hljs-number">0</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="19"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> dmas = <&dma_blsp1 <span class="hljs-number">4</span> <span class="hljs-number">64</span> <span class="hljs-number">0x20000020</span> <span class="hljs-number">0x20</span>>,</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="20"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <&dma_blsp1 <span class="hljs-number">5</span> <span class="hljs-number">32</span> <span class="hljs-number">0x20000020</span> <span class="hljs-number">0x20</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="21"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> dma-names = <span class="hljs-string">"tx"</span>, <span class="hljs-string">"rx"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="22"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> qcom,master-<span class="hljs-keyword">id</span> = <<span class="hljs-number">86</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="23"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> };</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制" onclick="hljs.copyCode(event)"></div></pre> <p> </p> </li> <li>在msm8909-mtp.dtsi里i2c@78b5000加入其i2c器件的配置 <p> </p> <pre class="has" name="code"><code class="hljs kotlin"><ol class="hljs-ln"><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="1"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-symbol">i2c@</span><span class="hljs-number">78</span>b5000 { <span class="hljs-comment">/* BLSP1 QUP1 */</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="2"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> <span class="hljs-symbol">fm2018@</span><span class="hljs-number">60</span> {</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="3"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> compatible = <span class="hljs-string">"fortemedia,fm2018"</span>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="4"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> reg = <<span class="hljs-number">0x60</span>>;</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="5"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fm2018,vdd-en = <&sn7325_1gpio <span class="hljs-number">5</span> <span class="hljs-number">0x00</span>>;<span class="hljs-comment">//p1 58sn7325,5</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="6"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fm2018,pwd-gpio = <&sn7325_gpio <span class="hljs-number">3</span> <span class="hljs-number">0x00</span>>;<span class="hljs-comment">//p1 26//sn7325,3</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="7"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fm2018,rst-gpio = <&sn7325_gpio <span class="hljs-number">2</span> <span class="hljs-number">0x00</span>>;<span class="hljs-comment">//sn7325,2</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="8"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> fm2018,int-gpio = <&sn7325_gpio <span class="hljs-number">4</span> <span class="hljs-number">0x4</span>>;<span class="hljs-comment">//sn7325,4</span></div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="9"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> };</div></div></li><li><div class="hljs-ln-numbers"><div class="hljs-ln-line hljs-ln-n" data-line-number="10"></div></div><div class="hljs-ln-code"><div class="hljs-ln-line"> };</div></div></li></ol></code><div class="hljs-button {2}" data-title="复制" onclick="hljs.copyCode(event)"></div></pre> <p> </p> </li> </ol></li>
- i2c器件的具体地址
这个一般是由器件datasheet提供,如我使用的这个期间的i2c地址是0x60,如果不清楚,可以打电话问FAE。