From: Laxman Dewangan Date: Mon, 8 Sep 2014 13:35:31 +0000 (+0530) Subject: power: bq2419x: change input voltage for entire SOC X-Git-Tag: daily-2014.10.21.0_rel-st8-r2.5-partner~4 X-Git-Url: https://rtime.felk.cvut.cz/gitweb/sojka/nv-tegra/linux-3.10.git/commitdiff_plain/2535b92bba8277ae4e1f5ce7b26f935c059dd211 power: bq2419x: change input voltage for entire SOC Provide the input voltage configuration for entire range of SoC so that value can be set properly as per table on charging/discharging path. Change-Id: I25eab5815f19763fd604f07af497d3d3aba08645 Signed-off-by: Laxman Dewangan Signed-off-by: Venkat Reddy Talla (cherry picked from commit 0ed9641cbc015cee258ab4136c8768f5671ac4c0) Reviewed-on: http://git-master/r/497041 (cherry picked from commit 7a7207b9782a03b917f388b81954d40b69aa99d8) Reviewed-on: http://git-master/r/540000 Reviewed-by: Dhiren Parmar Tested-by: Dhiren Parmar --- diff --git a/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a03-battery.dts b/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a03-battery.dts index c2555e5f5c1..f5755004b89 100644 --- a/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a03-battery.dts +++ b/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a03-battery.dts @@ -20,8 +20,8 @@ ti,temp-range = <10 15 25 45 60>; ti,charge-thermal-voltage-limit = <4352 4352 4352 4352 4200>; ti,charge-current-limit = <1040 1040 2600 5200 2600>; - ti,soc-range = <94 100>; - ti,input-voltage-soc-limit = <4680 4760>; + ti,soc-range = <89 94 100>; + ti,input-voltage-soc-limit = <4200 4680 4760>; ti,charge-term-current-limit-milliamp = <1>; }; }; diff --git a/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a04-e-battery.dts b/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a04-e-battery.dts index ef9da6b7471..1bf3c2b4fdb 100644 --- a/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a04-e-battery.dts +++ b/arch/arm/boot/dts/tegra124-tn8-p1761-1270-a04-e-battery.dts @@ -20,8 +20,8 @@ ti,temp-range = <10 15 25 45 60>; ti,charge-thermal-voltage-limit = <4352 4352 4352 4352 4200>; ti,charge-current-limit = <1040 1040 2600 5200 2600>; - ti,soc-range = <94 100>; - ti,input-voltage-soc-limit = <4680 4760>; + ti,soc-range = <89 94 100>; + ti,input-voltage-soc-limit = <4200 4680 4760>; ti,charge-term-current-limit-milliamp = <1>; }; }; diff --git a/drivers/power/battery-charger-gauge-comm.c b/drivers/power/battery-charger-gauge-comm.c index 3603f2a5549..2bb4a8cbb1b 100644 --- a/drivers/power/battery-charger-gauge-comm.c +++ b/drivers/power/battery-charger-gauge-comm.c @@ -358,9 +358,6 @@ int battery_gauge_report_battery_soc(struct battery_gauge_dev *bg_dev, if (!bg_dev) return -EINVAL; - if (battery_soc < 90 || battery_soc > 100) - return -EINVAL; - mutex_lock(&charger_gauge_list_mutex); list_for_each_entry(node, &charger_list, list) { diff --git a/drivers/power/bq2419x-charger.c b/drivers/power/bq2419x-charger.c index dee44055136..2559e98c27e 100644 --- a/drivers/power/bq2419x-charger.c +++ b/drivers/power/bq2419x-charger.c @@ -117,6 +117,7 @@ struct bq2419x_chip { struct bq2419x_reg_info chg_voltage_control; struct bq2419x_vbus_platform_data *vbus_pdata; struct bq2419x_charger_platform_data *charger_pdata; + int last_input_voltage; }; static int current_to_reg(const unsigned int *tbl, @@ -340,6 +341,7 @@ static int bq2419x_charger_init(struct bq2419x_chip *bq2419x) bq2419x->input_src.mask, bq2419x->input_src.val); if (ret < 0) dev_err(bq2419x->dev, "INPUT_SRC_REG write failed %d\n", ret); + bq2419x->last_input_voltage = (bq2419x->input_src.val >> 3) & 0xF; ret = regmap_update_bits(bq2419x->regmap, BQ2419X_THERM_REG, bq2419x->ir_comp_therm.mask, bq2419x->ir_comp_therm.val); @@ -427,6 +429,7 @@ static int bq2419x_configure_charging_current(struct bq2419x_chip *bq2419x, dev_err(bq2419x->dev, "INPUT_SRC_REG update failed %d\n", ret); return ret; } + bq2419x->last_input_voltage = (bq2419x->input_src.val >> 3) & 0xF; /* Configure input current limit in steps */ val = current_to_reg(iinlim, ARRAY_SIZE(iinlim), in_current_limit); @@ -1402,9 +1405,16 @@ static int bq2419x_charger_input_voltage_configure( if (!input_voltage_limit) return 0; + /*Configure input voltage limit */ vreg = bq2419x_val_to_reg(input_voltage_limit, BQ2419X_INPUT_VINDPM_OFFSET, 80, 4, 0); + if (bq2419x->last_input_voltage == vreg) + return 0; + + dev_info(bq2419x->dev, "Changing VINDPM to soc:voltage:vreg %d:%d:%d\n", + battery_soc, input_voltage_limit, vreg); + ret = regmap_update_bits(bq2419x->regmap, BQ2419X_INPUT_SRC_REG, BQ2419X_INPUT_VINDPM_MASK, (vreg << 3)); @@ -1412,6 +1422,7 @@ static int bq2419x_charger_input_voltage_configure( dev_err(bq2419x->dev, "INPUT_VOLTAGE update failed %d\n", ret); return ret; } + bq2419x->last_input_voltage = vreg; return 0; }