diff options
author | Rakesh Bodla <rbodla@nvidia.com> | 2014-05-29 18:00:18 +0530 |
---|---|---|
committer | Riham Haidar <rhaidar@nvidia.com> | 2014-06-06 13:16:46 -0700 |
commit | e2222043ebacbba2a5edba29d192f296485e675a (patch) | |
tree | d81f4d3171c8d46ad3a7b2e1500d31877c0350e8 /drivers/power | |
parent | eff10a85c8f7e0d115b4e8ff418a10fba90cd6ec (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.c | 35 |
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; |