diff options
author | HongMin Son <hongmin.son@samsung.com> | 2012-07-23 23:11:31 +0900 |
---|---|---|
committer | Varun Wadekar <vwadekar@nvidia.com> | 2012-08-10 16:09:19 +0530 |
commit | bb777e68c16c41628f60608962eee9fc9019c5de (patch) | |
tree | a63ba1f480d5162f80c80507e652aa34c5b71570 /drivers/power | |
parent | 4a7ee822231be977cfbe663c353be4c5388bc28b (diff) |
power: smb347-charger: Add W/A about not charging when DCIN/USBIN connecting same time
Add W/A about not charging when DCIN/USBIN connecting same time
- USB Suspend mode set if DCIN/USBIN connection at the same time.
Change-Id: I375fdd3b265ea2ede4645fdc33b62def1fbe76a3
Signed-off-by: HongMin Son <hongmin.son@samsung.com>
Diffstat (limited to 'drivers/power')
-rw-r--r-- | drivers/power/smb347-charger.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/drivers/power/smb347-charger.c b/drivers/power/smb347-charger.c index 5f4cb9f16bf7..8b76c1ead6f9 100644 --- a/drivers/power/smb347-charger.c +++ b/drivers/power/smb347-charger.c @@ -38,6 +38,8 @@ #define CFG_CURRENT_LIMIT_DC_MASK 0xf0 #define CFG_CURRENT_LIMIT_DC_SHIFT 4 #define CFG_CURRENT_LIMIT_USB_MASK 0x0f +#define CFG_VARIOUS_FUNCTION 0x02 +#define CFG_INPUT_SOURCE_PRIORITY BIT(2) #define CFG_FLOAT_VOLTAGE 0x03 #define CFG_FLOAT_VOLTAGE_THRESHOLD_MASK 0xc0 #define CFG_FLOAT_VOLTAGE_THRESHOLD_SHIFT 6 @@ -995,8 +997,26 @@ static int smb347_mains_set_property(struct power_supply *psy, { struct smb347_charger *smb = container_of(psy, struct smb347_charger, mains); + int ret; switch (prop) { + case POWER_SUPPLY_PROP_ONLINE: + smb->mains_online = val->intval; + + smb347_set_writable(smb, true); + + ret = smb347_read(smb, CMD_A); + if (ret < 0) + return -EINVAL; + + ret &= ~CMD_A_SUSPEND_ENABLED; + if (val->intval) + ret |= CMD_A_SUSPEND_ENABLED; + + ret = smb347_write(smb, CMD_A, ret); + + smb347_set_writable(smb, false); + return 0; case POWER_SUPPLY_PROP_CURRENT_MAX: smb->mains_current_limit = val->intval; smb347_hw_init(smb); @@ -1062,6 +1082,10 @@ static int smb347_usb_set_property(struct power_supply *psy, container_of(psy, struct smb347_charger, usb); switch (prop) { + case POWER_SUPPLY_PROP_ONLINE: + smb->usb_online = val->intval; + ret = 0; + break; case POWER_SUPPLY_PROP_USB_HC: smb347_set_writable(smb, true); ret = smb347_write(smb, CMD_B, val->intval ? |