summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorTodd Poynor <toddpoynor@google.com>2012-07-13 13:30:55 -0700
committerVarun Wadekar <vwadekar@nvidia.com>2012-07-23 14:22:02 +0530
commit089a0c726149f07f2f8a431f8142af24342841da (patch)
tree911d9dbba32038d540e45d4c9688e0560ab8b396 /drivers/power
parentbe9ee03fcdb1907d0e6c355d9a3d4b18213bdcc9 (diff)
power: smb347: add POWER_SUPPLY_PROP_USB_OTG
Based on code from HongMin Son <hongmin.son@samsung.com> Change-Id: I8b47ff41fb170aac60d1cbe5cf609fca72f8eb41 Signed-off-by: Todd Poynor <toddpoynor@google.com> Signed-off-by: HongMin Son <hongmin.son@samsung.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/smb347-charger.c26
1 files changed, 26 insertions, 0 deletions
diff --git a/drivers/power/smb347-charger.c b/drivers/power/smb347-charger.c
index 7015b68a2e9e..f4296096bcda 100644
--- a/drivers/power/smb347-charger.c
+++ b/drivers/power/smb347-charger.c
@@ -86,6 +86,7 @@
#define CMD_A 0x30
#define CMD_A_CHG_ENABLED BIT(1)
#define CMD_A_SUSPEND_ENABLED BIT(2)
+#define CMD_A_OTG_ENABLE BIT(4)
#define CMD_A_ALLOW_WRITE BIT(7)
#define CMD_B 0x31
#define CMD_B_USB59_MODE BIT(1)
@@ -140,6 +141,7 @@ struct smb347_charger {
bool charging_enabled;
unsigned int mains_current_limit;
bool usb_hc_mode;
+ bool usb_otg_enabled;
struct dentry *dentry;
const struct smb347_charger_platform_data *pdata;
};
@@ -1027,6 +1029,10 @@ static int smb347_usb_get_property(struct power_supply *psy,
val->intval = smb->usb_hc_mode;
return 0;
+ case POWER_SUPPLY_PROP_USB_OTG:
+ val->intval = smb->usb_otg_enabled;
+ return 0;
+
default:
break;
}
@@ -1050,6 +1056,24 @@ static int smb347_usb_set_property(struct power_supply *psy,
smb->usb_hc_mode = val->intval;
break;
+ case POWER_SUPPLY_PROP_USB_OTG:
+ ret = smb347_read(smb, CMD_A);
+
+ if (ret < 0)
+ return ret;
+
+ if (val->intval)
+ ret |= CMD_A_OTG_ENABLE;
+ else
+ ret &= ~CMD_A_OTG_ENABLE;
+
+ ret = smb347_write(smb, CMD_A, ret);
+
+ if (ret >= 0)
+ smb->usb_otg_enabled = val->intval;
+
+ break;
+
default:
break;
}
@@ -1062,6 +1086,7 @@ static int smb347_usb_property_is_writeable(struct power_supply *psy,
{
switch (prop) {
case POWER_SUPPLY_PROP_USB_HC:
+ case POWER_SUPPLY_PROP_USB_OTG:
return 1;
default:
break;
@@ -1073,6 +1098,7 @@ static int smb347_usb_property_is_writeable(struct power_supply *psy,
static enum power_supply_property smb347_usb_properties[] = {
POWER_SUPPLY_PROP_ONLINE,
POWER_SUPPLY_PROP_USB_HC,
+ POWER_SUPPLY_PROP_USB_OTG,
};
static int smb347_battery_get_property(struct power_supply *psy,