From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752328AbcFZH3U (ORCPT ); Sun, 26 Jun 2016 03:29:20 -0400 Received: from mail-pf0-f171.google.com ([209.85.192.171]:33602 "EHLO mail-pf0-f171.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752102AbcFZH2w (ORCPT ); Sun, 26 Jun 2016 03:28:52 -0400 From: Stephen Boyd To: linux-usb@vger.kernel.org Cc: linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-msm@vger.kernel.org, Andy Gross , Bjorn Andersson , Neil Armstrong , Arnd Bergmann , Felipe Balbi , Peter Chen , Greg Kroah-Hartman Subject: [PATCH 08/21] usb: chipidea: Kick OTG state machine for AVVIS with vbus extcon Date: Sun, 26 Jun 2016 00:28:25 -0700 Message-Id: <20160626072838.28082-9-stephen.boyd@linaro.org> X-Mailer: git-send-email 2.9.0.rc2.8.ga28705d In-Reply-To: <20160626072838.28082-1-stephen.boyd@linaro.org> References: <20160626072838.28082-1-stephen.boyd@linaro.org> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Force the OTG state machine to go forward when we're using an extcon for vbus detection. In this case, the controller may never raise an interrupt for AVVIS, so we need to simulate the event by toggling the appropriate OTG fsm bits and kicking the state machine again. Cc: Peter Chen Cc: Greg Kroah-Hartman Signed-off-by: Stephen Boyd --- drivers/usb/chipidea/otg_fsm.c | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/drivers/usb/chipidea/otg_fsm.c b/drivers/usb/chipidea/otg_fsm.c index de8e22ec3902..aab076fc4d82 100644 --- a/drivers/usb/chipidea/otg_fsm.c +++ b/drivers/usb/chipidea/otg_fsm.c @@ -475,6 +475,14 @@ static void ci_otg_drv_vbus(struct otg_fsm *fsm, int on) return; } } + /* + * Force state machine forward if we use extcon + * to detect vbus state (i.e. simulate AVVIS event) + */ + if (!IS_ERR(ci->platdata->vbus_extcon.edev)) { + fsm->a_vbus_vld = 1; + ci_otg_queue_work(ci); + } /* Disable data pulse irq */ hw_write_otgsc(ci, OTGSC_DPIE, 0); @@ -486,6 +494,15 @@ static void ci_otg_drv_vbus(struct otg_fsm *fsm, int on) fsm->a_bus_drop = 1; fsm->a_bus_req = 0; + /* + * Force state machine forward if we use extcon + * to detect vbus state (i.e. simulate AVVIS event) + */ + if (!IS_ERR(ci->platdata->vbus_extcon.edev)) { + fsm->a_vbus_vld = 0; + fsm->b_conn = 0; + ci_otg_queue_work(ci); + } } } -- 2.9.0.rc2.8.ga28705d