summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorChandler Zhang <chazhang@nvidia.com>2012-05-14 17:56:48 +0800
committerSimone Willett <swillett@nvidia.com>2012-05-21 12:08:31 -0700
commit923da3f428c032b8f9d4cc60edef35aad5a5b5ce (patch)
tree1ceec59f4f88fecd1f4c40874fddf60dcbc1a060 /drivers/power
parent1f4ccee135b9729ec09eceaddd1b573ea7366d15 (diff)
power: smb349: support for self-powered devices
Some self-powered devices doesn't strictly follow USB spec that has 5V Vbus to upstream cannot work with mux on the data lines. The MAX4983 mux routes the data lines to SMB349 rather than the Tegra chip when PGOOD polarity is low-active and DCIN is 5V. Change PGOOD not to invert polarity for the devices that has 5V to upstream. Bug 981761 Change-Id: Ic67ec66ce8936d9a9d5d2df7bca2ff7f9c65b147 Signed-off-by: Chandler Zhang <chazhang@nvidia.com> Reviewed-on: http://git-master/r/103526 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Bharat Nihalani <bnihalani@nvidia.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/smb349-charger.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/power/smb349-charger.c b/drivers/power/smb349-charger.c
index 6164905efb70..62d516b374b8 100644
--- a/drivers/power/smb349-charger.c
+++ b/drivers/power/smb349-charger.c
@@ -170,17 +170,28 @@ static int smb349_configure_otg(struct i2c_client *client, int enable)
}
if (enable) {
- /* Configure PGOOD to be active low */
- ret = smb349_read(client, SMB349_SYSOK_USB3);
+ /* Configure PGOOD to be active low if no 5V on VBUS */
+ ret = smb349_read(client, SMB349_STS_REG_C);
if (ret < 0) {
dev_err(&client->dev, "%s: err %d\n", __func__, ret);
goto error;
}
- ret = smb349_write(client, SMB349_SYSOK_USB3, (ret & (~(1))));
- if (ret < 0) {
- dev_err(&client->dev, "%s: err %d\n", __func__, ret);
- goto error;
+ if (!(ret & 0x01)) {
+ ret = smb349_read(client, SMB349_SYSOK_USB3);
+ if (ret < 0) {
+ dev_err(&client->dev, "%s: err %d\n",
+ __func__, ret);
+ goto error;
+ }
+
+ ret = smb349_write(client, SMB349_SYSOK_USB3,
+ (ret & (~(1))));
+ if (ret < 0) {
+ dev_err(&client->dev, "%s: err %d\n",
+ __func__, ret);
+ goto error;
+ }
}
/* Enable OTG */