diff options
author | Syed Rafiuddin <srafiuddin@nvidia.com> | 2012-03-09 16:38:09 +0530 |
---|---|---|
committer | Rohan Somvanshi <rsomvanshi@nvidia.com> | 2012-03-15 10:34:23 -0700 |
commit | 46e097bdab198a2b4ee0dda48337c2d0ecafda9b (patch) | |
tree | de4ea668887a7553b32e02b382a8c94c3ba94a12 | |
parent | d1760ed2f45dd9f5a6f5b925ca575f4e3a83c8da (diff) |
power: smb349: fix otg driver callback function
Allows OTG enable/disable only while USB OTG state
swithes between SUSPEND and HOST
Bug 937188
Change-Id: If651dfb19db37f8822e6d1473aa573246aca8d45
Signed-off-by: Syed Rafiuddin <srafiuddin@nvidia.com>
Reviewed-on: http://git-master/r/89111
Reviewed-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
Tested-by: Rohan Somvanshi <rsomvanshi@nvidia.com>
-rw-r--r-- | drivers/power/smb349-charger.c | 6 | ||||
-rw-r--r-- | drivers/usb/otg/tegra-otg.c | 5 | ||||
-rw-r--r-- | include/linux/smb349-charger.h | 3 |
3 files changed, 8 insertions, 6 deletions
diff --git a/drivers/power/smb349-charger.c b/drivers/power/smb349-charger.c index 300f91929a1c..8719e8182762 100644 --- a/drivers/power/smb349-charger.c +++ b/drivers/power/smb349-charger.c @@ -450,12 +450,12 @@ error: return ret; } -static void smb349_otg_status(enum usb_otg_state otg_state, void *data) +static void smb349_otg_status(enum usb_otg_state to, enum usb_otg_state from, void *data) { struct i2c_client *client = charger->client; int ret; - if (otg_state == OTG_STATE_A_HOST) { + if ((from == OTG_STATE_A_SUSPEND) && (to == OTG_STATE_A_HOST)) { /* configure charger */ ret = smb349_configure_charger(client, 0); @@ -469,7 +469,7 @@ static void smb349_otg_status(enum usb_otg_state otg_state, void *data) dev_err(&client->dev, "%s() error in configuring" "otg..\n", __func__); - } else if (otg_state == OTG_STATE_A_SUSPEND) { + } else if ((from == OTG_STATE_A_HOST) && (to == OTG_STATE_A_SUSPEND)) { /* Disable OTG */ ret = smb349_configure_otg(client, 0); diff --git a/drivers/usb/otg/tegra-otg.c b/drivers/usb/otg/tegra-otg.c index ffbeede75ed8..e7a21f92f797 100644 --- a/drivers/usb/otg/tegra-otg.c +++ b/drivers/usb/otg/tegra-otg.c @@ -43,7 +43,8 @@ #define USB_VBUS_STATUS (1 << 10) #define USB_INTS (USB_VBUS_INT_STATUS | USB_ID_INT_STATUS) -typedef void (*callback_t)(enum usb_otg_state otg_state, void *args); +typedef void (*callback_t)(enum usb_otg_state to, + enum usb_otg_state from, void *args); struct tegra_otg_data { struct otg_transceiver otg; @@ -225,7 +226,7 @@ static void irq_work(struct work_struct *work) tegra_state_name(to)); if (tegra->charger_cb) - tegra->charger_cb(to, tegra->charger_cb_data); + tegra->charger_cb(to, from, tegra->charger_cb_data); if (to == OTG_STATE_A_SUSPEND) { if (from == OTG_STATE_A_HOST) diff --git a/include/linux/smb349-charger.h b/include/linux/smb349-charger.h index ab02b883c0af..116f036baf19 100644 --- a/include/linux/smb349-charger.h +++ b/include/linux/smb349-charger.h @@ -50,7 +50,8 @@ struct smb349_charger { }; int smb349_battery_online(void); -typedef void (*callback_t)(enum usb_otg_state otg_state, void *args); +typedef void (*callback_t)(enum usb_otg_state to, + enum usb_otg_state from, void *args); /* * Register callback function for the client. * Used by fuel-gauge driver to get battery charging properties. |