diff options
author | Syed Rafiuddin <srafiuddin@nvidia.com> | 2013-04-18 10:35:24 +0530 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2013-05-14 16:18:58 -0700 |
commit | 9ca6fcc07689c2c0617a5b0f70a99b2bb8b4fa73 (patch) | |
tree | b2bc4604c7b6e67e2adfd7757c9a2b24605eb543 /drivers/power | |
parent | 59d3dfbd57e01074b04d6971a74f16fec6281d75 (diff) |
power: bq2419x: Smooth charging ramp-up
Add support to have a smooth charging current ramp-up.
Bug 1262682
Change-Id: Ia1987172d416d17fde39ec2d428ca7b28f4a28c4
Signed-off-by: Pradeep Goudagunta <pgoudagunta@nvidia.com>
Signed-off-by: Syed Rafiuddin <srafiuddin@nvidia.com>
Reviewed-on: http://git-master/r/219614
(cherry picked from commit 54bcefe32147b03ff2ba69a386339867b4eafa03)
Reviewed-on: http://git-master/r/228391
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/bq2419x-charger.c | 45 |
1 files changed, 24 insertions, 21 deletions
diff --git a/drivers/power/bq2419x-charger.c b/drivers/power/bq2419x-charger.c index 70219674e837..d82a99abbc61 100644 --- a/drivers/power/bq2419x-charger.c +++ b/drivers/power/bq2419x-charger.c @@ -217,38 +217,41 @@ static int bq2419x_usb_get_property(struct power_supply *psy, static int bq2419x_init(struct bq2419x_chip *bq2419x) { - int val, ret = 0; + int val = 0; + int ret = 0; + int floor = 0; + + /* Configure input voltage to 4.52 in case of NV charger */ + if (bq2419x->in_current_limit == 2000) + val |= BQ2419x_NVCHARGER_INPUT_VOL_SEL; + else + val |= BQ2419x_DEFAULT_INPUT_VOL_SEL; /* Clear EN_HIZ */ - ret = regmap_update_bits(bq2419x->regmap, - BQ2419X_INPUT_SRC_REG, BQ2419X_EN_HIZ, 0); + ret = regmap_update_bits(bq2419x->regmap, BQ2419X_INPUT_SRC_REG, + BQ2419X_EN_HIZ | BQ2419x_INPUT_VOLTAGE_MASK, val); if (ret < 0) { - dev_err(bq2419x->dev, "error reading reg: 0x%x\n", - BQ2419X_INPUT_SRC_REG); + dev_err(bq2419x->dev, "INPUT_SRC_REG update failed %d\n", ret); return ret; } /* Configure input current limit */ val = current_to_reg(iinlim, ARRAY_SIZE(iinlim), bq2419x->in_current_limit); - if (val < 0) - return 0; - val &= ~(BQ2419x_INPUT_VOLTAGE_MASK); - /* Configure inout voltage to 4.52 in case of NV - * NV charger. - */ - if (bq2419x->in_current_limit == 2000) - val |= BQ2419x_NVCHARGER_INPUT_VOL_SEL; - else - val |= BQ2419x_DEFAULT_INPUT_VOL_SEL; + /* Start from 500mA and then step to val */ + floor = current_to_reg(iinlim, ARRAY_SIZE(iinlim), 500); + if (val < 0 || floor < 0) + return 0; - ret = regmap_update_bits(bq2419x->regmap, - BQ2419X_INPUT_SRC_REG, BQ2419x_CONFIG_MASK | - BQ2419x_INPUT_VOLTAGE_MASK, val); - if (ret < 0) - dev_err(bq2419x->dev, "error reading reg: 0x%x\n", - BQ2419X_INPUT_SRC_REG); + for (; floor <= val; floor++) { + udelay(BQ2419x_CHARGING_CURRENT_STEP_DELAY_US); + ret = regmap_update_bits(bq2419x->regmap, BQ2419X_INPUT_SRC_REG, + BQ2419x_CONFIG_MASK, floor); + if (ret < 0) + dev_err(bq2419x->dev, + "INPUT_SRC_REG update failed: %d\n", ret); + } return ret; } |