Commit 7167f876 authored by Nick Elsmore's avatar Nick Elsmore
Browse files

power: supply: bq27xxx: Add taper rate DM entry for bq27421

parent 6799af2d
Loading
Loading
Loading
Loading
+26 −3
Original line number Original line Diff line number Diff line
@@ -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
@@ -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[] = {
@@ -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__);
@@ -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) {
@@ -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);