背景:项目外接sensor为I2C接口,高通默认配置(LPI_GPIO21和LPI_GPIO22)为I3C,需要将I3C改为I2C配置。
解决:
在ADSP修改QUP的配置,如下:
--- a/ADSP.VT.5.4.3.c1/adsp_proc/core/settings/buses/i2c/config/divar/i2c_devcfg.c
+++ b/ADSP.VT.5.4.3.c1/adsp_proc/core/settings/buses/i2c/config/divar/i2c_devcfg.c
@@ -201,7 +201,7 @@ static plat_device_config i2c_device_config[] =
.min_data_length_for_dma = 0,
.gpi_index = 1,
- .gpi_protocol = 4,
+ .gpi_protocol = 3,
.i3c_cfg_base_addr = (uint8 *) SSC_MCC_I3C_CFG + 0x4,//hold on to this,i will confirm
.active_scl_encoding = SSC_I2C_02_SCL,
--- a/ADSP.VT.5.4.3.c1/adsp_proc/core/settings/buses/qup_fw/config/divar/fw_devcfg.c
+++ b/ADSP.VT.5.4.3.c1/adsp_proc/core/settings/buses/qup_fw/config/divar/fw_devcfg.c
@@ -30,7 +30,7 @@ se_cfg se6_cfg_qrd = { 0x98000, SE_PROTOCOL_UART, FIFO, TRUE, FALSE };
// MTP as default/// offset, protocol, mode, load_fw, dfs_mode
se_cfg se0_cfg = { 0x80000, SE_PROTOCOL_I2C, GSI, TRUE, TRUE };
-se_cfg se1_cfg = { 0x84000, SE_PROTOCOL_I3C, GSI, TRUE, TRUE };
+se_cfg se1_cfg = { 0x84000, SE_PROTOCOL_I2C, GSI, TRUE, TRUE };
//se_cfg se2_cfg = { 0x88000, SE_PROTOCOL_I2C, GSI, TRUE, TRUE };
//se_cfg se3_cfg = { 0x8C000, SE_PROTOCOL_I2C, FIFO, TRUE, FALSE };
//se_cfg se4_cfg = { 0x90000, SE_PROTOCOL_I2C, GSI, TRUE, TRUE };
其中gpi协议定义如下,所以.gpi_protocol改为3。
typedef enum
{
GPI_SPI_PROTOCOL = 1,
GPI_UART_PROTOCOL = 2,
GPI_I2C_PROTOCOL = 3,
GPI_I3C_PROTOCOL = 4,
GPI_MAX_PROTOCOL
}GPI_PROTOCOL;
TZ修改如下:
@@ -44,7 +44,7 @@ const QUPv3_se_security_permissions_type ssc_qupv3_perms_default[] =
{
/*PeriphID, ProtocolID, Mode, NsOwner, bAllowFifo, bLoad, bModExcl */
{ QUPV3_SSC_SE0, QUPV3_PROTOCOL_I2C, QUPV3_MODE_GSI, AC_ADSP_Q6_ELF, FALSE, FALSE, FALSE },
- { QUPV3_SSC_SE1, QUPV3_PROTOCOL_I3C, QUPV3_MODE_GSI, AC_ADSP_Q6_ELF, FALSE, FALSE, FALSE },
+ { QUPV3_SSC_SE1, QUPV3_PROTOCOL_I2C, QUPV3_MODE_GSI, AC_ADSP_Q6_ELF, FALSE, FALSE, FALSE },
/*QUPV3_SSC_SE2*/
/*QUPV3_SSC_SE3*/
/*QUPV3_SSC_SE4*/
上述修改完后I2C配置成功,再将sensor对应的json文件进行修改,如下:
".config":{
"owner": "sh3001",
"bus_type":{ "type": "int", "ver": "0",
- "data": "3"
+ "data": "0"
},
"bus_instance":{ "type": "int", "ver": "0",
"data": "2"