summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorHongMin Son <hongmin.son@samsung.com>2012-07-23 23:11:31 +0900
committerVarun Wadekar <vwadekar@nvidia.com>2012-08-10 16:09:19 +0530
commitbb777e68c16c41628f60608962eee9fc9019c5de (patch)
treea63ba1f480d5162f80c80507e652aa34c5b71570 /drivers/power
parent4a7ee822231be977cfbe663c353be4c5388bc28b (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.c24
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 ?