- cache.flags = bq27x00_read(di, BQ27x00_REG_FLAGS, !is_bq27500);
- if (cache.flags >= 0) {
- if (!is_bq27500 && (cache.flags & BQ27000_FLAG_CI)) {
- dev_info(di->dev, "battery is not calibrated! ignoring capacity values\n");
- cache.capacity = -ENODATA;
- cache.energy = -ENODATA;
- cache.time_to_empty = -ENODATA;
- cache.time_to_empty_avg = -ENODATA;
- cache.time_to_full = -ENODATA;
- cache.charge_full = -ENODATA;
- } else {
- cache.capacity = bq27x00_battery_read_rsoc(di);
- cache.energy = bq27x00_battery_read_energy(di);
- cache.time_to_empty = bq27x00_battery_read_time(di, BQ27x00_REG_TTE);
- cache.time_to_empty_avg = bq27x00_battery_read_time(di, BQ27x00_REG_TTECP);
- cache.time_to_full = bq27x00_battery_read_time(di, BQ27x00_REG_TTF);
- cache.charge_full = bq27x00_battery_read_lmd(di);
- }
- cache.temperature = bq27x00_battery_read_temperature(di);
- cache.cycle_count = bq27x00_battery_read_cyct(di);
-
- /* We only have to read charge design full once */
- if (di->charge_design_full <= 0)
- di->charge_design_full = bq27x00_battery_read_ilmd(di);
+ /* pandora hack */
+ WARN_ON_ONCE(!is_bq27500);
+ (void)bq27x00_battery_read_energy;
+ (void)bq27x00_battery_read_temperature;
+ (void)bq27x00_battery_read_time;
+
+ /* reading reserved field breaks subsequent reads,
+ * so can't read everything in one go :( */
+ ret = bq27x00_read_i2c_n(di, state + 6, sizeof(state) - 6, 6);
+ if (ret < 0) {
+ dev_err(di->dev, "error reading state: %d\n", ret);
+ return;