From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752555AbdASMYI (ORCPT ); Thu, 19 Jan 2017 07:24:08 -0500 Received: from mail-lf0-f68.google.com ([209.85.215.68]:34088 "EHLO mail-lf0-f68.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752118AbdASMYC (ORCPT ); Thu, 19 Jan 2017 07:24:02 -0500 Subject: Re: [PATCH 2/6] usb: mtu3: add reference clock To: Chunfeng Yun , Mathias Nyman , Felipe Balbi References: <1484719707-12107-1-git-send-email-chunfeng.yun@mediatek.com> <1484719707-12107-2-git-send-email-chunfeng.yun@mediatek.com> Cc: Greg Kroah-Hartman , Rob Herring , Mark Rutland , Ian Campbell , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-usb@vger.kernel.org, linux-mediatek@lists.infradead.org, devicetree@vger.kernel.org From: Matthias Brugger Message-ID: <7fc9de99-4bef-ddf2-c5fe-985f8d2348d2@gmail.com> Date: Thu, 19 Jan 2017 13:22:56 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:45.0) Gecko/20100101 Thunderbird/45.4.0 MIME-Version: 1.0 In-Reply-To: <1484719707-12107-2-git-send-email-chunfeng.yun@mediatek.com> Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 18/01/17 07:08, Chunfeng Yun wrote: > usually, the reference clock comes from 26M oscillator directly, > but some SoCs are not, add it for compatibility. > > Signed-off-by: Chunfeng Yun > --- > drivers/usb/mtu3/mtu3.h | 1 + > drivers/usb/mtu3/mtu3_plat.c | 21 +++++++++++++++++++-- > 2 files changed, 20 insertions(+), 2 deletions(-) > > diff --git a/drivers/usb/mtu3/mtu3.h b/drivers/usb/mtu3/mtu3.h > index ba9df71..aa6fd6a 100644 > --- a/drivers/usb/mtu3/mtu3.h > +++ b/drivers/usb/mtu3/mtu3.h > @@ -225,6 +225,7 @@ struct ssusb_mtk { > /* common power & clock */ > struct regulator *vusb33; > struct clk *sys_clk; > + struct clk *ref_clk; > /* otg */ > struct otg_switch_mtk otg_switch; > enum usb_dr_mode dr_mode; > diff --git a/drivers/usb/mtu3/mtu3_plat.c b/drivers/usb/mtu3/mtu3_plat.c > index 6344859..19a345d 100644 > --- a/drivers/usb/mtu3/mtu3_plat.c > +++ b/drivers/usb/mtu3/mtu3_plat.c > @@ -123,7 +123,13 @@ static int ssusb_rscs_init(struct ssusb_mtk *ssusb) > ret = clk_prepare_enable(ssusb->sys_clk); > if (ret) { > dev_err(ssusb->dev, "failed to enable sys_clk\n"); > - goto clk_err; > + goto sys_clk_err; > + } > + > + ret = clk_prepare_enable(ssusb->ref_clk); > + if (ret) { > + dev_err(ssusb->dev, "failed to enable ref_clk\n"); > + goto ref_clk_err; > } > > ret = ssusb_phy_init(ssusb); > @@ -143,8 +149,10 @@ static int ssusb_rscs_init(struct ssusb_mtk *ssusb) > phy_err: > ssusb_phy_exit(ssusb); > phy_init_err: > + clk_disable_unprepare(ssusb->ref_clk); > +ref_clk_err: > clk_disable_unprepare(ssusb->sys_clk); > -clk_err: > +sys_clk_err: > regulator_disable(ssusb->vusb33); > vusb33_err: > > @@ -154,6 +162,7 @@ static int ssusb_rscs_init(struct ssusb_mtk *ssusb) > static void ssusb_rscs_exit(struct ssusb_mtk *ssusb) > { > clk_disable_unprepare(ssusb->sys_clk); > + clk_disable_unprepare(ssusb->ref_clk); > regulator_disable(ssusb->vusb33); > ssusb_phy_power_off(ssusb); > ssusb_phy_exit(ssusb); > @@ -216,6 +225,12 @@ static int get_ssusb_rscs(struct platform_device *pdev, struct ssusb_mtk *ssusb) > return PTR_ERR(ssusb->sys_clk); > } > > + ssusb->ref_clk = devm_clk_get(dev, "ref_ck"); > + if (IS_ERR(ssusb->ref_clk)) { > + dev_err(dev, "failed to get ref clock\n"); > + return PTR_ERR(ssusb->ref_clk); > + } > + That would break older dts bindings, right? ref_ck must be optional for the code. Regards, Matthias