]> rtime.felk.cvut.cz Git - sojka/nv-tegra/linux-3.10.git/commitdiff
power: bq2419x: change input voltage for entire SOC
authorLaxman Dewangan <ldewangan@nvidia.com>
Mon, 8 Sep 2014 13:35:31 +0000 (19:05 +0530)
committerDhiren Parmar <dparmar@nvidia.com>
Fri, 26 Sep 2014 12:50:51 +0000 (05:50 -0700)
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 <ldewangan@nvidia.com>
Signed-off-by: Venkat Reddy Talla <vreddytalla@nvidia.com>
(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 <dparmar@nvidia.com>
Tested-by: Dhiren Parmar <dparmar@nvidia.com>
arch/arm/boot/dts/tegra124-tn8-p1761-1270-a03-battery.dts
arch/arm/boot/dts/tegra124-tn8-p1761-1270-a04-e-battery.dts
drivers/power/battery-charger-gauge-comm.c
drivers/power/bq2419x-charger.c

index c2555e5f5c10cfa2b65f8b6846b2df9e713d4cb1..f5755004b898cb4b9db56be24560861592569df4 100644 (file)
@@ -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>;
                        };
                };
index ef9da6b7471d2e4525da89fb326d074e35dea046..1bf3c2b4fdb04457c83ceaa04e2ad48987c7d1c3 100644 (file)
@@ -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>;
                        };
                };
index 3603f2a55498656b5cd098f7a79b84f381e92dc0..2bb4a8cbb1bf03ae3d7a9052694e505666e9b749 100644 (file)
@@ -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) {
index dee44055136f6f07f7c11190f9ea392026ca80a8..2559e98c27ee4f3b2491dea0417e87c083f1e6ca 100644 (file)
@@ -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;
 }