From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751820AbbJLOOO (ORCPT ); Mon, 12 Oct 2015 10:14:14 -0400 Received: from mail.dev.rtsoft.ru ([213.79.90.226]:46747 "EHLO dev.rtsoft.ru" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751697AbbJLOOI (ORCPT ); Mon, 12 Oct 2015 10:14:08 -0400 Message-ID: <561BC00D.4070306@dev.rtsoft.ru> Date: Mon, 12 Oct 2015 17:13:33 +0300 From: Roman Alyautdin User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:17.0) Gecko/20130329 Thunderbird/17.0.5 MIME-Version: 1.0 To: Roman Alyautdin CC: balbi@ti.com, linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org, sergei.shtylyov@cogentembedded.com Subject: Re: [PATCH] usb: musb: core: add common method of getting vbus status References: <1444658365-433-1-git-send-email-ralyautdin@dev.rtsoft.ru> In-Reply-To: <1444658365-433-1-git-send-email-ralyautdin@dev.rtsoft.ru> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 12/10/15 16:59, Roman Alyautdin wrote: > Fix musb_platform_get_vbus_status return value in case of platform > implementation is not defined, bringing expected behaviour of > musb_platform_get wrapper. Add musb_vbus_show default method to determine > VBUS status in case platform method is not defined. > > Signed-off-by: Roman Alyautdin > --- > drivers/usb/musb/musb_core.c | 13 ++++++++++--- > drivers/usb/musb/musb_core.h | 2 +- > 2 files changed, 11 insertions(+), 4 deletions(-) > > diff --git a/drivers/usb/musb/musb_core.c b/drivers/usb/musb/musb_core.c > index 4a518ff..3551540 100644 > --- a/drivers/usb/musb/musb_core.c > +++ b/drivers/usb/musb/musb_core.c > @@ -1771,13 +1771,20 @@ musb_vbus_show(struct device *dev, struct device_attribute *attr, char *buf) > unsigned long flags; > unsigned long val; > int vbus; > + u8 devctl; > > spin_lock_irqsave(&musb->lock, flags); > val = musb->a_wait_bcon; > - /* FIXME get_vbus_status() is normally #defined as false... > - * and is effectively TUSB-specific. > - */ > vbus = musb_platform_get_vbus_status(musb); > + if (vbus < 0) { > + /* Use default MUSB method by means of DEVCTL register */ > + devctl = musb_readb(musb->mregs, MUSB_DEVCTL); > + if ((devctl & MUSB_DEVCTL_VBUS) > + != (3 << MUSB_DEVCTL_VBUS_SHIFT)) > + vbus = 1; > + else > + vbus = 0; > + } > spin_unlock_irqrestore(&musb->lock, flags); > > return sprintf(buf, "Vbus %s, timeout %lu msec\n", > diff --git a/drivers/usb/musb/musb_core.h b/drivers/usb/musb/musb_core.h > index 4b886d0..2337d7a 100644 > --- a/drivers/usb/musb/musb_core.h > +++ b/drivers/usb/musb/musb_core.h > @@ -579,7 +579,7 @@ static inline int musb_platform_recover(struct musb *musb) > static inline int musb_platform_get_vbus_status(struct musb *musb) > { > if (!musb->ops->vbus_status) > - return 0; > + return -EINVAL; > > return musb->ops->vbus_status(musb); > } Sorry, looks like logic inversion, will update soon Regards, Roman