diff options
author | Allen Yu <alleny@nvidia.com> | 2012-08-08 14:50:40 +0800 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-08-13 20:47:32 -0700 |
commit | 71f038602f3417417aec99470fabb287ec8886fd (patch) | |
tree | 5d1567b09444c569a49d62ca93a2e1b342b82b78 | |
parent | 665a0fee9dc497413bc702fbe86430c9248db8c8 (diff) |
power: smb349: correct charger status
When tegra-otg suspends with charger cable connected, the charger
state and type should not be changed, neither should the charger
callback be executed.
SMB349 has a debounce delay of ~20ms +/- 3 after cable is unpluged
and will stop all I2C functions for 2.3ms when getting reset to POR.
Add 50ms' delay before reading charger status to avoid I2C error and
make sure we get the right charger state.
Bug 1024735
Change-Id: I1667b23df768b46b524c6578c4bee09e131d9f96
Signed-off-by: Allen Yu <alleny@nvidia.com>
Reviewed-on: http://git-master/r/120905
Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
GVS: Gerrit_Virtual_Submit
-rw-r--r-- | drivers/power/smb349-charger.c | 13 |
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/power/smb349-charger.c b/drivers/power/smb349-charger.c index 134b8154a2b9..c6dc43158b82 100644 --- a/drivers/power/smb349-charger.c +++ b/drivers/power/smb349-charger.c @@ -406,6 +406,19 @@ static int smb349_enable_charging(struct regulator_dev *rdev, int ret; if (!max_uA) { + /* Wait for SMB349 to debounce and get reset to POR when cable is unpluged */ + msleep(50); + + ret = smb349_read(client, SMB349_STS_REG_C); + if (ret < 0) { + dev_err(&client->dev, "%s(): Failed in reading register" + "0x%02x\n", __func__, SMB349_STS_REG_C); + return ret; + } + + if (ret & CHARGING) + return 0; + charger->state = stopped; charger->chrg_type = NONE; } else { |