1. 在qnx阶段配置I2C
需要在qnx config对应路径下配置以下信息:
(1)pin脚转态(类似安卓的pinctrl)
对应文件:pin_config.c
+ {(TLMM_MODULE|57), "/dev/gpio/tp_i2c_sda", TLMM_GPIO_CFG_MASK_IGNORE, GPIO_PIN_CFG(GPIO_INPUT, GPIO_PULL_UP, GPIO_STRENGTH_8MA, 2), TLMM_GPIO_SLEEP_CFG_IGNORE, IGNORE},
+ {(TLMM_MODULE|58), "/dev/gpio/tp_i2c_scl", TLMM_GPIO_CFG_MASK_IGNORE, GPIO_PIN_CFG(GPIO_INPUT, GPIO_PULL_UP, GPIO_STRENGTH_8MA, 2), TLMM_GPIO_SLEEP_CFG_IGNORE, IGNORE},
(2)需要配置i2c总线信息
i2c_props_8155.xml
+ <var_seq name="i2c_dev_8_name" type=DALPROP_DATA_TYPE_STRING>/dev/i2c8</var_seq>
+ <var_seq name="i2c_res_8_name" type=DALPROP_DATA_TYPE_STRING>/devcfg/i2c/8</var_seq>
+ <var_seq name="i2c_core_8_name" type=DALPROP_DATA_TYPE_STRING>I2C_CORE_8</var_seq>
+ <var_seq name="gcc_qupv3_wrap2_serial_engine_2_clock_name" type=DALPROP_DATA_TYPE_STRING>gcc_qupv3_wrap2_s2_clk</var_seq>
+ /*
+ i2c-8
+ QUP-19 QUPV3_2_SE2 0xc88000
+ GPIO 57,58
+ TP I2C device: chsc_smtouch
+ */
+ <device id=DALDEVICEID_I2C_DEVICE_8>
+ <props name="I2C_ENABLED" type=DALPROP_ATTR_TYPE_UINT32> 1 </props>
+ <props name="INTR_BASED" type=DALPROP_ATTR_TYPE_UINT32> 0 </props>
+ <props name="PM_DISABLE" type=DALPROP_ATTR_TYPE_UINT32> 1 </props>
+ <props name="QUP_QGIC_IRQ" type=DALPROP_ATTR_TYPE_UINT32> 616 </props>
+ <props name="IRQ_TRIG_CFG" type=DALPROP_ATTR_TYPE_UINT32> 0 </props>
+ <props name="CLK_RATE_KHZ" type=DALPROP_ATTR_TYPE_UINT32> 19200 </props>
+ <props name="DEV_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> i2c_dev_8_name </props>
+ <props name="BAM_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> dev_bam_0_name </props>
+ <props name="RES_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> i2c_res_8_name </props>
+ <props name="CORE_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> i2c_core_8_name </props>
+ <props name="BLK_PHY_ADDR" type=DALPROP_ATTR_TYPE_UINT32> 0xc88000 </props>
+ <props name="BLK_SIZE" type=DALPROP_ATTR_TYPE_UINT32> 0x1000 </props>
+ <props name="BAM_ENABLED" type=DALPROP_ATTR_TYPE_UINT32> 0 </props>
+ <props name="BAM_BLK_ADDR" type=DALPROP_ATTR_TYPE_UINT32> 0x7544000 </props>
+ <props name="BAM_IRQ_NUM" type=DALPROP_ATTR_TYPE_UINT32> 270 </props>
+ <props name="BAM_THRESHOLD" type=DALPROP_ATTR_TYPE_UINT32> 1024 </props>
+ <props name="BAM_IN_PIPE" type=DALPROP_ATTR_TYPE_UINT32> 13 </props>
+ <props name="BAM_OUT_PIPE" type=DALPROP_ATTR_TYPE_UINT32> 12 </props>
+ <props name="CLOCK_MASTER_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> gcc_qupv3_wrap2_master_clock_name </props>
+ <props name="CLOCK_SEC_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> gcc_qupv3_wrap2_s_clock_name </props>
+ <props name="CLOCK_SE_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> gcc_qupv3_wrap2_serial_engine_2_clock_name </props>
+ <props name="CLOCK_CORE_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> gcc_qupv3_wrap2_core_clock_name </props>
+ <props name="CLOCK_GSI_NAME" type=DALPROP_ATTR_TYPE_STRING_PTR> gcc_qupv3_wrap2_gsi_sequencer_clock_name </props>
+ </device>
2. 在qnx filesets对应路径下增加qnx对于总线以及gpio的操作权限,还有释放给android使用的配置
(1)增加qnx对于总线以及gpio的操作权限
对应文件:i2c.txt
-interrupt:385,386,388,615,618,619,637,640
-interruptevent:385,386,388,615,618,619,637,640
+interrupt:385,386,388,615,616,618,619,637,640
+interruptevent:385,386,388,615,616,618,619,637,640
+mem_phys:QUPV3_2_QUPV3_ID_0.QUPV3_SE_WRAPPER.SE2.GENI4_CFG_DD_4K
对应文件:qcore.txt
+allow_link qcgpio_t /dev/gpio/tp_i2c_sda;
+allow_link qcgpio_t /dev/gpio/tp_i2c_scl;
(2)释放给android使用的配置
对应文件:linux-la_default.config
+vdev vdev-virtio-i2c.so loc 0x1da70000 intr gic:117 verbose 2 device i2c8
3. 需要在安卓侧对应配置virtio-i2c8
+++ b/devicetree/qcom/northstar-C63.dts
+ i2c8 = &i2c_8;
+++ b/devicetree/qcom/northstar-vm.dtsi
+ i2c_8: virtio-i2c@1da70000 {
+ compatible = "virtio,mmio";
+ reg = <0x1da70000 0x1000>;
+ interrupts = <0 85 IRQ_TYPE_LEVEL_HIGH>;
+ status = "ok";
+ };
4. 最后是添加设备调用:
+++ b/devicetree/qcom/northstar-vm.dtsi
+&i2c_8 {
+ status = "ok";
+ smtouch: smtouch@2e{
+ status = "ok";
+ compatible = "chipsemi,chsc_cap_touch";
+ reg = <0x2e>;
+ interrupt-parent = <&tlmm>;
+ interrupts = <0 520 0x2002>;//GIC irq 552
+ chipsemi,vio-gpio = <&tlmm 147 0x00>;
+ chipsemi,vdd-gpio = <&tlmm 148 0x00>;
+ chipsemi,vdd2-gpio = <&tlmm 145 0x00>;
+ chipsemi,rst-gpio = <&tlmm 97 0x00>;
+ chipsemi,int-gpio = <&tlmm 101 0x00>;
+ pinctrl-names = "default", "sleep";
+ pinctrl-0 = <&semi_ts_int_active &semi_ts_reset_active>;
+ pinctrl-1 = <&semi_ts_int_suspend &semi_ts_reset_suspend>;
+ };
+};