summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
authorRakesh Bodla <rbodla@nvidia.com>2014-05-29 18:00:18 +0530
committerRiham Haidar <rhaidar@nvidia.com>2014-06-06 13:16:46 -0700
commite2222043ebacbba2a5edba29d192f296485e675a (patch)
treed81f4d3171c8d46ad3a7b2e1500d31877c0350e8 /drivers/power
parenteff10a85c8f7e0d115b4e8ff418a10fba90cd6ec (diff)
power: extcon: register for y-cable extcon dev
Register to otg extcon dev for y-cable notification. Bug 200004368 Bug 1456628 Change-Id: Ie63e29b90885ef713b96d30d05fedbbb89d3cd30 Signed-off-by: Rakesh Bodla <rbodla@nvidia.com> Reviewed-on: http://git-master/r/416656 (cherry picked from commit 350fe59088ec3016cff15b1627ca26dcaa659919) Reviewed-on: http://git-master/r/418864 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Venkat Moganty <vmoganty@nvidia.com>
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/power_supply_extcon.c35
1 files changed, 34 insertions, 1 deletions
diff --git a/drivers/power/power_supply_extcon.c b/drivers/power/power_supply_extcon.c
index 7d9dbfd20df6..40d9dfe30b1b 100644
--- a/drivers/power/power_supply_extcon.c
+++ b/drivers/power/power_supply_extcon.c
@@ -37,6 +37,7 @@
struct power_supply_extcon {
struct device *dev;
struct extcon_dev *edev;
+ struct extcon_dev *y_cable_edev;
struct power_supply ac;
struct power_supply usb;
uint8_t ac_online;
@@ -85,6 +86,9 @@ static struct power_supply_cables psy_cables[] = {
{
.name = "Apple 2A-charger",
},
+ {
+ .name = "Y-cable",
+ },
};
static enum power_supply_property power_supply_extcon_props[] = {
@@ -173,6 +177,9 @@ static int power_supply_extcon_attach_cable(
psy_extcon->ac_online = 1;
dev_info(psy_extcon->dev,
"USB Apple 2A-charger cable detected\n");
+ } else if (true == extcon_get_cable_state(edev, "Y-cable")) {
+ psy_extcon->ac_online = 1;
+ dev_info(psy_extcon->dev, "Y cable charging detected\n");
} else {
dev_info(psy_extcon->dev, "Unknown cable detected\n");
}
@@ -231,6 +238,11 @@ static struct power_supply_extcon_plat_data *psy_extcon_get_dt_pdata(
if (!ret)
pdata->extcon_name = pstr;
+ ret = of_property_read_string(np, "power-supply,y-cable-extcon-dev",
+ &pstr);
+ if (!ret)
+ pdata->extcon_name = pstr;
+
return pdata;
}
@@ -303,9 +315,17 @@ static int psy_extcon_probe(struct platform_device *pdev)
cable->psy_extcon = psy_extcon;
cable->nb.notifier_call = psy_extcon_extcon_notifier;
- ret = extcon_register_interest(cable->extcon_dev,
+ if (strcmp(cable->name, "Y-cable") == 0 &&
+ pdata->y_cable_extcon_name) {
+ ret = extcon_register_interest(cable->extcon_dev,
+ pdata->y_cable_extcon_name,
+ cable->name, &cable->nb);
+ } else {
+ ret = extcon_register_interest(cable->extcon_dev,
pdata->extcon_name,
cable->name, &cable->nb);
+ }
+
if (ret < 0)
dev_err(psy_extcon->dev,
"Cable %s registration failed: %d\n",
@@ -322,6 +342,19 @@ static int psy_extcon_probe(struct platform_device *pdev)
mutex_lock(&psy_extcon->lock);
power_supply_extcon_attach_cable(psy_extcon, psy_extcon->edev);
mutex_unlock(&psy_extcon->lock);
+
+ if (pdata->y_cable_extcon_name) {
+ psy_extcon->y_cable_edev =
+ extcon_get_extcon_dev(pdata->y_cable_extcon_name);
+ if (!psy_extcon->y_cable_edev)
+ goto econ_err;
+
+ mutex_lock(&psy_extcon->lock);
+ power_supply_extcon_attach_cable(psy_extcon,
+ psy_extcon->y_cable_edev);
+ mutex_unlock(&psy_extcon->lock);
+ }
+
dev_info(&pdev->dev, "%s() get success\n", __func__);
return 0;