之前文章介绍了怎么在uefi中配置I2C ,如果我们需要更早一点的时间点配置I2C ,比如说项目中使用I2C 充电IC替代高通默认的充电IC ,那么就等不到在uefi中配置I2C了 ,需要再更早的时间点配置才行。
查找高通的代码其实里面已经有对应的解决方案了,具体实现方式如下:
ddr_targer.c 中有高通配置的一个demo可供参考
static void ddr_ext_buck_set_voltage(void)
{
uint32 result = 0;
uint32 device_id = DALDEVICEID_I2C_DEVICE_2; //配置对应的I2C总线地址,这边代表挂在I2C_2上
...
result = I2CDEV_Init(((void *)(INTN)device_id), &handle); //i2c INIT
...
// Bus on, clock on
result = I2CDEV_SetPowerState(handle, I2CDEV_POWER_STATE_2); //上电
...
if(ddr_i2c_buck_read (EXT_BUCK_ID_REG, &data) == 0) //i2c read 接口
{
...
result = ddr_i2c_buck_write(EXT_BUCK_SEL0_REG, EXT_BUCK_VDDQ); // i2c write 接口
...
}
result = I2CDEV_SetPowerState(handle, I2CDEV_POWER_STATE_0); // 下电
...
I2CDEV_DeInit(handle);
}
其实很多东西高通代码中已经包含了一些demo用例,不知道怎么实现的时候可以多在源码中找找就能有所收获。