From patchwork Sun Aug 21 08:03:27 2016 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Andreas Kemnade X-Patchwork-Id: 9292097 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 5D660607F0 for ; Sun, 21 Aug 2016 08:04:07 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 53DF628B50 for ; Sun, 21 Aug 2016 08:04:07 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 44C9228B54; Sun, 21 Aug 2016 08:04:07 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 32F8C28B50 for ; Sun, 21 Aug 2016 08:04:06 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752215AbcHUIEF (ORCPT ); Sun, 21 Aug 2016 04:04:05 -0400 Received: from glaubenleben.de ([85.214.105.140]:52076 "EHLO glaubenleben.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751905AbcHUIEC (ORCPT ); Sun, 21 Aug 2016 04:04:02 -0400 Received: from p5dcc36f0.dip0.t-ipconnect.de ([93.204.54.240] helo=localhost.localdomain) by glaubenleben.de with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_CBC_SHA256:128) (Exim 4.84_2) (envelope-from ) id 1bbNjR-000660-AG; Sun, 21 Aug 2016 10:03:49 +0200 From: Andreas Kemnade To: tony@atomide.com, letux-kernel@openphoenux.org, kishon@ti.com, linux-omap@vger.kernel.org Cc: Andreas Kemnade Subject: [PATCH] phy-twl4030-usb: better handle musb_mailbox() failure Date: Sun, 21 Aug 2016 10:03:27 +0200 Message-Id: <1471766607-3980-1-git-send-email-andreas@kemnade.info> X-Mailer: git-send-email 2.1.4 Sender: linux-omap-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-omap@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP setting twl->linkstat = MUSB_UNKNOWN upon error in musb_mailbox as introduced in commit 12b7db2bf8b8 ("usb: musb: Return error value from musb_mailbox") causes twl4030_usb_irq() to not detect a state change form cable connected to cable disconnected after such an error so that pm_runtime_put_autosuspend() will not be called and the usage counter gets unbalanced. Such errors happen e.g. if the omap2430 module is not (yet) loaded during plug/unplug events. This patch introduces a flag instead that indicates whether musb knows about the status and calls musb_mailbox() when it does not know yet about the status. Signed-off-by: Andreas Kemnade --- drivers/phy/phy-twl4030-usb.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/phy/phy-twl4030-usb.c b/drivers/phy/phy-twl4030-usb.c index ed98cb6..49737fb 100644 --- a/drivers/phy/phy-twl4030-usb.c +++ b/drivers/phy/phy-twl4030-usb.c @@ -173,6 +173,7 @@ struct twl4030_usb { int irq; enum musb_vbus_id_status linkstat; bool vbus_supplied; + bool musb_has_seen_linkstat; struct delayed_work id_workaround_work; }; @@ -711,9 +712,13 @@ static irqreturn_t twl4030_usb_irq(int irq, void *_twl) pm_runtime_mark_last_busy(twl->dev); pm_runtime_put_autosuspend(twl->dev); } + twl->musb_has_seen_linkstat = false; + } + + if (!twl->musb_has_seen_linkstat) { err = musb_mailbox(status); - if (err) - twl->linkstat = MUSB_UNKNOWN; + if (!err) + twl->musb_has_seen_linkstat = true; } /* don't schedule during sleep - irq works right then */ @@ -818,6 +823,7 @@ static int twl4030_usb_probe(struct platform_device *pdev) twl->irq = platform_get_irq(pdev, 0); twl->vbus_supplied = false; twl->linkstat = MUSB_UNKNOWN; + twl->musb_has_seen_linkstat = false; twl->phy.dev = twl->dev; twl->phy.label = "twl4030";