From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758480AbcISKac (ORCPT ); Mon, 19 Sep 2016 06:30:32 -0400 Received: from mail-lf0-f44.google.com ([209.85.215.44]:35211 "EHLO mail-lf0-f44.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1754687AbcISKaW (ORCPT ); Mon, 19 Sep 2016 06:30:22 -0400 Subject: Re: [PATCH v3 1/3] usb: chipidea: imx: Change switch order To: Fabien Lahoudere , hzpeterchen@gmail.com References: <1474280531-17598-1-git-send-email-fabien.lahoudere@collabora.co.uk> Cc: linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org From: Sergei Shtylyov Message-ID: Date: Mon, 19 Sep 2016 13:30:19 +0300 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:45.0) Gecko/20100101 Thunderbird/45.2.0 MIME-Version: 1.0 In-Reply-To: <1474280531-17598-1-git-send-email-fabien.lahoudere@collabora.co.uk> Content-Type: text/plain; charset=utf-8; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hello. On 9/19/2016 1:22 PM, Fabien Lahoudere wrote: > Each USB controller have different behaviour, so in order to avoid to have > several "swicth(data->index)" and lock/unlock, we prefer to get the index Switch. > and then test for features if they exist for this index. > > Signed-off-by: Fabien Lahoudere > --- > drivers/usb/chipidea/usbmisc_imx.c | 44 +++++++++++++++++++++++++------------- > 1 file changed, 29 insertions(+), 15 deletions(-) > > diff --git a/drivers/usb/chipidea/usbmisc_imx.c b/drivers/usb/chipidea/usbmisc_imx.c > index 20d02a5..ed324d1 100644 > --- a/drivers/usb/chipidea/usbmisc_imx.c > +++ b/drivers/usb/chipidea/usbmisc_imx.c > @@ -199,31 +199,45 @@ static int usbmisc_imx53_init(struct imx_usbmisc_data *data) > val |= MX53_USB_PLL_DIV_24_MHZ; > writel(val, usbmisc->base + MX53_USB_OTG_PHY_CTRL_1_OFFSET); > > - if (data->disable_oc) { > - spin_lock_irqsave(&usbmisc->lock, flags); > - switch (data->index) { > + spin_lock_irqsave(&usbmisc->lock, flags); > + > + switch (data->index) { > case 0: Should start at the same column as *switch*. > - reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; > - val = readl(reg) | MX53_BM_OVER_CUR_DIS_OTG; > + if (data->disable_oc) { > + reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; > + val = readl(reg) | MX53_BM_OVER_CUR_DIS_OTG; > + if (reg && val) You mean 'reg' can be NULL? If so, readl() would cause kernel oops. > + writel(val, reg); > + } > break; > case 1: > - reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; > - val = readl(reg) | MX53_BM_OVER_CUR_DIS_H1; > + if (data->disable_oc) { > + reg = usbmisc->base + MX53_USB_OTG_PHY_CTRL_0_OFFSET; > + val = readl(reg) | MX53_BM_OVER_CUR_DIS_H1; > + if (reg && val) > + writel(val, reg); Same here. > + } > break; > case 2: > - reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET; > - val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx; > + if (data->disable_oc) { > + reg = usbmisc->base + MX53_USB_UH2_CTRL_OFFSET; > + val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx; > + if (reg && val) > + writel(val, reg); Same here. > + } > break; > case 3: > - reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET; > - val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx; > + if (data->disable_oc) { > + reg = usbmisc->base + MX53_USB_UH3_CTRL_OFFSET; > + val = readl(reg) | MX53_BM_OVER_CUR_DIS_UHx; > + if (reg && val) > + writel(val, reg); > + } And here. > break; > - } > - if (reg && val) > - writel(val, reg); Ah, the original code was wrong... > - spin_unlock_irqrestore(&usbmisc->lock, flags); > } [...] MBR, Sergei