新年好!最近用bq3060调试,快要发货了,但是bq3060调试不通,请帮忙看看。
读取的值都不正常,比如:cat sys/class/power_supply/bq3060-battery/voltage_now , 读取的值为-6
打印的log是 [ 45.170688] bq3060-battery 0-0016: error reading voltage
对应的代码是:
static int bq3060_battery_voltage(struct bq3060_device_info *di)
{
 int ret;
 u8 buf[2];
 int volt = 0;
 ret = bq3060_read(di->client,BQ3060_REG_VOLT,buf,2); 
 if (ret<0) {
 dev_err(di->dev, "error reading voltage\n");
 return ret;
 }
volt = get_unaligned_le16(buf);
 volt = volt;
 DBG("Enter:%s %d--volt = %d\n",__FUNCTION__,__LINE__,volt);
 return volt;
}
读取的函数为:bq3060_read()
static int bq3060_read(struct i2c_client *client, u8 reg, u8 buf[], unsigned len)
{
 struct i2c_adapter *adap=client->adapter;
 struct i2c_msg msgs[2];
 int ret;
 char reg_buf = reg;
 
 msgs[0].addr = client->addr; // slave addr
 msgs[0].flags = client->flags;
 msgs[0].len = 1; // command code is 8bit
 msgs[0].buf = ®_buf; // command code 
 msgs[0].scl_rate = bq3060_SPEED;
msgs[1].addr = client->addr;
 msgs[1].flags = client->flags | I2C_M_RD;
 msgs[1].len = len;
 msgs[1].buf = (char *)buf;
 msgs[1].scl_rate = bq3060_SPEED;
ret = i2c_transfer(adap, msgs, 2);
return (ret == 2)? len : ret;
}
硬件平台是s5pv210, 其支持smbus. 单独用EV2300测试过,可以通过。
sda, scl, gnd 分别接到了主控器的i2c0上。
完整的驱动代码见附件,请帮忙看看,多谢!