Loading drivers/power/supply/bq27xxx_battery.c +26 −3 Original line number Original line Diff line number Diff line Loading @@ -681,6 +681,7 @@ enum bq27xxx_dm_reg_id { BQ27XXX_DM_DESIGN_CAPACITY = 0, BQ27XXX_DM_DESIGN_CAPACITY = 0, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_TERMINATE_VOLTAGE, BQ27XXX_DM_TERMINATE_VOLTAGE, BQ27XXX_DM_TAPER_RATE, }; }; #define bq27000_dm_regs 0 #define bq27000_dm_regs 0 Loading Loading @@ -731,6 +732,7 @@ static struct bq27xxx_dm_reg bq27421_dm_regs[] = { [BQ27XXX_DM_DESIGN_CAPACITY] = { 82, 10, 2, 0, 8000 }, [BQ27XXX_DM_DESIGN_CAPACITY] = { 82, 10, 2, 0, 8000 }, [BQ27XXX_DM_DESIGN_ENERGY] = { 82, 12, 2, 0, 32767 }, [BQ27XXX_DM_DESIGN_ENERGY] = { 82, 12, 2, 0, 32767 }, [BQ27XXX_DM_TERMINATE_VOLTAGE] = { 82, 16, 2, 2500, 3700 }, [BQ27XXX_DM_TERMINATE_VOLTAGE] = { 82, 16, 2, 2500, 3700 }, [BQ27XXX_DM_TAPER_RATE] = { 82, 27, 2, 0, 2000 }, }; }; static struct bq27xxx_dm_reg bq27425_dm_regs[] = { static struct bq27xxx_dm_reg bq27425_dm_regs[] = { Loading Loading @@ -1242,6 +1244,7 @@ static void bq27xxx_battery_set_config(struct bq27xxx_device_info *di, { { struct bq27xxx_dm_buf bd = BQ27XXX_DM_BUF(di, BQ27XXX_DM_DESIGN_CAPACITY); struct bq27xxx_dm_buf bd = BQ27XXX_DM_BUF(di, BQ27XXX_DM_DESIGN_CAPACITY); struct bq27xxx_dm_buf bt = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TERMINATE_VOLTAGE); struct bq27xxx_dm_buf bt = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TERMINATE_VOLTAGE); struct bq27xxx_dm_buf btr = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TAPER_RATE); bool updated; bool updated; pr_info("%s\n", __func__); pr_info("%s\n", __func__); Loading @@ -1264,8 +1267,27 @@ pr_info("%s\n", __func__); bq27xxx_battery_update_dm_block(di, &bd, bq27xxx_battery_update_dm_block(di, &bd, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_DESIGN_ENERGY, info->energy_full_design_uwh / 1000); info->energy_full_design_uwh / 1000); } else { } pr_info("toastbucket: uah or uwh invalid\n"); if (info->charge_full_design_uah != -EINVAL && info->charge_term_current_ua != -EINVAL) { bool same = (bd.class == btr.class) && (bd.block == btr.block); int taper_rate; int taper_current; if (!same) bq27xxx_battery_read_dm_block(di, &btr); pr_info("toastbucket: term_uah=%d\n", info->charge_term_current_ua); taper_current = (115 * (info->charge_term_current_ua / 1000)) / 100; taper_rate = (info->charge_full_design_uah / 1000) / (taper_current / 10); pr_info("toastbucket: taper_rate=%d\n", taper_rate); bq27xxx_battery_update_dm_block(di, &btr, BQ27XXX_DM_TAPER_RATE, taper_rate); } } if (info->voltage_min_design_uv != -EINVAL) { if (info->voltage_min_design_uv != -EINVAL) { Loading @@ -1277,10 +1299,11 @@ pr_info("%s\n", __func__); info->voltage_min_design_uv / 1000); info->voltage_min_design_uv / 1000); } } updated = bd.dirty || bt.dirty; updated = bd.dirty || bt.dirty || btr.dirty; bq27xxx_battery_write_dm_block(di, &bd); bq27xxx_battery_write_dm_block(di, &bd); bq27xxx_battery_write_dm_block(di, &bt); bq27xxx_battery_write_dm_block(di, &bt); bq27xxx_battery_write_dm_block(di, &btr); bq27xxx_battery_seal(di); bq27xxx_battery_seal(di); Loading Loading
drivers/power/supply/bq27xxx_battery.c +26 −3 Original line number Original line Diff line number Diff line Loading @@ -681,6 +681,7 @@ enum bq27xxx_dm_reg_id { BQ27XXX_DM_DESIGN_CAPACITY = 0, BQ27XXX_DM_DESIGN_CAPACITY = 0, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_TERMINATE_VOLTAGE, BQ27XXX_DM_TERMINATE_VOLTAGE, BQ27XXX_DM_TAPER_RATE, }; }; #define bq27000_dm_regs 0 #define bq27000_dm_regs 0 Loading Loading @@ -731,6 +732,7 @@ static struct bq27xxx_dm_reg bq27421_dm_regs[] = { [BQ27XXX_DM_DESIGN_CAPACITY] = { 82, 10, 2, 0, 8000 }, [BQ27XXX_DM_DESIGN_CAPACITY] = { 82, 10, 2, 0, 8000 }, [BQ27XXX_DM_DESIGN_ENERGY] = { 82, 12, 2, 0, 32767 }, [BQ27XXX_DM_DESIGN_ENERGY] = { 82, 12, 2, 0, 32767 }, [BQ27XXX_DM_TERMINATE_VOLTAGE] = { 82, 16, 2, 2500, 3700 }, [BQ27XXX_DM_TERMINATE_VOLTAGE] = { 82, 16, 2, 2500, 3700 }, [BQ27XXX_DM_TAPER_RATE] = { 82, 27, 2, 0, 2000 }, }; }; static struct bq27xxx_dm_reg bq27425_dm_regs[] = { static struct bq27xxx_dm_reg bq27425_dm_regs[] = { Loading Loading @@ -1242,6 +1244,7 @@ static void bq27xxx_battery_set_config(struct bq27xxx_device_info *di, { { struct bq27xxx_dm_buf bd = BQ27XXX_DM_BUF(di, BQ27XXX_DM_DESIGN_CAPACITY); struct bq27xxx_dm_buf bd = BQ27XXX_DM_BUF(di, BQ27XXX_DM_DESIGN_CAPACITY); struct bq27xxx_dm_buf bt = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TERMINATE_VOLTAGE); struct bq27xxx_dm_buf bt = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TERMINATE_VOLTAGE); struct bq27xxx_dm_buf btr = BQ27XXX_DM_BUF(di, BQ27XXX_DM_TAPER_RATE); bool updated; bool updated; pr_info("%s\n", __func__); pr_info("%s\n", __func__); Loading @@ -1264,8 +1267,27 @@ pr_info("%s\n", __func__); bq27xxx_battery_update_dm_block(di, &bd, bq27xxx_battery_update_dm_block(di, &bd, BQ27XXX_DM_DESIGN_ENERGY, BQ27XXX_DM_DESIGN_ENERGY, info->energy_full_design_uwh / 1000); info->energy_full_design_uwh / 1000); } else { } pr_info("toastbucket: uah or uwh invalid\n"); if (info->charge_full_design_uah != -EINVAL && info->charge_term_current_ua != -EINVAL) { bool same = (bd.class == btr.class) && (bd.block == btr.block); int taper_rate; int taper_current; if (!same) bq27xxx_battery_read_dm_block(di, &btr); pr_info("toastbucket: term_uah=%d\n", info->charge_term_current_ua); taper_current = (115 * (info->charge_term_current_ua / 1000)) / 100; taper_rate = (info->charge_full_design_uah / 1000) / (taper_current / 10); pr_info("toastbucket: taper_rate=%d\n", taper_rate); bq27xxx_battery_update_dm_block(di, &btr, BQ27XXX_DM_TAPER_RATE, taper_rate); } } if (info->voltage_min_design_uv != -EINVAL) { if (info->voltage_min_design_uv != -EINVAL) { Loading @@ -1277,10 +1299,11 @@ pr_info("%s\n", __func__); info->voltage_min_design_uv / 1000); info->voltage_min_design_uv / 1000); } } updated = bd.dirty || bt.dirty; updated = bd.dirty || bt.dirty || btr.dirty; bq27xxx_battery_write_dm_block(di, &bd); bq27xxx_battery_write_dm_block(di, &bd); bq27xxx_battery_write_dm_block(di, &bt); bq27xxx_battery_write_dm_block(di, &bt); bq27xxx_battery_write_dm_block(di, &btr); bq27xxx_battery_seal(di); bq27xxx_battery_seal(di); Loading