//-->Carlisle add for ATD querying gauge IC status int check_gaugeIC_status_read(char *page, char **start, off_t off, int count, int *eof, void *date) { struct i2c_client *client = NULL; int len; int ret; int flags=0; int gauge_status=0; client = bq27520_dev_info.i2c; ret = bq27520_send_subcmd(client, &flags, BQ27520_SUBCMD_CTNL_STATUS); if (ret==0) { gauge_status=1; len = sprintf(page, "%d\n", gauge_status); } else { dev_err(&client->dev, "Send subcommand error %d.\n", ret); len = sprintf(page, "%d\n", gauge_status); } return len; }
int bq27520_exit_rom_mode() { int retry = RETRY_COUNT; struct i2c_client *i2c = NULL; struct i2c_client *client = NULL; int val=0; int ret=0; mutex_lock(&batt_dev_upt_mutex); i2c = batt_upt_dev_info.i2c; mutex_unlock(&batt_dev_upt_mutex); BAT_DBG_E("[%s] enter \n", __func__); while (retry--) { ret = bq27520_write_i2c(i2c, 0x00, 0x0F, 1); if (ret < 0) continue; ret = bq27520_write_i2c(i2c, 0x64, 0x0F, 1); if (ret < 0) continue; ret = bq27520_write_i2c(i2c, 0x65, 0x00, 1); if (ret < 0) continue; break; }; if (!retry) { BAT_DBG_E("Exit ROM mode FAIL \n"); return ret; } /* * verify it's NOT ROM node. * Yes if read registers FAIL from now on. */ ret = bq27520_read_i2c(i2c, 0x00, &val, 1); if (!ret) { BAT_DBG_E("Exit ROM Mode verification FAIL.\n"); return -EACCES; } /* * wait 1s and send IT_ENABLE command * (battery team request) */ msleep(1000); mutex_lock(&bq27520_dev_info_mutex); client = bq27520_dev_info.i2c; mutex_unlock(&bq27520_dev_info_mutex); ret = bq27520_send_subcmd(client, NULL, BQ27520_SUBCMD_ENABLE_IT); if (ret) return ret; return 0; }