usb: msm_otg: allow peripheral mode switch in more host states
The current code allows peripheral mode switch in only A_HOST state
using user mode otg control debug interface. The target can also be
in A_WAIT_BCON and A_SUSPEND while operating as a host. Allow peripheral
mode switch in these states as well. Also check the PMIC id status
when the otg control is set to PMIC.
Change-Id: I6557b38ce5615e5c7ac3e670086bbfa98507bda7
Signed-off-by: ChandanaKishori Chiluveru <cchilu@codeaurora.org>
diff --git a/drivers/usb/otg/msm_otg.c b/drivers/usb/otg/msm_otg.c
index 0c08662..b5c106c 100644
--- a/drivers/usb/otg/msm_otg.c
+++ b/drivers/usb/otg/msm_otg.c
@@ -1,4 +1,4 @@
-/* Copyright (c) 2009-2013, Linux Foundation. All rights reserved.
+/* Copyright (c) 2009-2014, Linux Foundation. All rights reserved.
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and
@@ -2410,7 +2410,8 @@
* switch from ACA to PMIC. Check ID state
* before entering into low power mode.
*/
- if (!msm_otg_read_pmic_id_state(motg)) {
+ if ((motg->pdata->otg_control == OTG_PMIC_CONTROL) &&
+ !msm_otg_read_pmic_id_state(motg)) {
pr_debug("process missed ID intr\n");
clear_bit(ID, &motg->inputs);
work = 1;
@@ -3115,9 +3116,12 @@
struct usb_phy *phy = &motg->phy;
switch (phy->state) {
+ case OTG_STATE_A_WAIT_BCON:
case OTG_STATE_A_HOST:
+ case OTG_STATE_A_SUSPEND:
seq_printf(s, "host\n");
break;
+ case OTG_STATE_B_IDLE:
case OTG_STATE_B_PERIPHERAL:
seq_printf(s, "peripheral\n");
break;
@@ -3165,7 +3169,9 @@
switch (req_mode) {
case USB_NONE:
switch (phy->state) {
+ case OTG_STATE_A_WAIT_BCON:
case OTG_STATE_A_HOST:
+ case OTG_STATE_A_SUSPEND:
case OTG_STATE_B_PERIPHERAL:
set_bit(ID, &motg->inputs);
clear_bit(B_SESS_VLD, &motg->inputs);
@@ -3177,7 +3183,9 @@
case USB_PERIPHERAL:
switch (phy->state) {
case OTG_STATE_B_IDLE:
+ case OTG_STATE_A_WAIT_BCON:
case OTG_STATE_A_HOST:
+ case OTG_STATE_A_SUSPEND:
set_bit(ID, &motg->inputs);
set_bit(B_SESS_VLD, &motg->inputs);
break;