On Mon, Aug 10, 2015 at 06:08:16PM -0300, Fabio Estevam wrote: > On Thu, Jul 2, 2015 at 5:40 AM, Peter Chen <peter.chen@xxxxxxxxxxxxx> wrote: > > > Sorry, I can't accept it, and it will remain the clock on, and break > > runtime pm feature. > > > > In fact, the core and non-core use the same clocks, and at imx27, it > > may need two or three clocks to let the controller work for imx27. > > I can accept handle three clocks like below at ci_hdrc_imx.c to fix > > this issue. > > > > arch/arm/boot/dts/imx25.dtsi > > clocks = <&clks 9>, <&clks 70>, <&clks 8>; > > clock-names = "ipg", "ahb", "per"; > > Do you mean something like this? (I know I should not break existing > dtb's, but just want to make sure I got your idea): > > diff --git a/arch/arm/boot/dts/imx27.dtsi b/arch/arm/boot/dts/imx27.dtsi > index feb9d34..e74aa3c 100644 > --- a/arch/arm/boot/dts/imx27.dtsi > +++ b/arch/arm/boot/dts/imx27.dtsi > @@ -515,7 +515,10 @@ > #index-cells = <1>; > compatible = "fsl,imx27-usbmisc"; > reg = <0x10024600 0x200>; > - clocks = <&clks IMX27_CLK_USB_AHB_GATE>; > + clocks = <&clks IMX27_CLK_IPG>, > + <&clks IMX27_CLK_USB_AHB_GATE>, > + <&clks IMX27_CLK_USB_DIV>; > + clock-names = "ipg", "ahb", "per"; > }; No, at this clock diff information at controller's entry. > > sahara2: sahara@10025000 { > diff --git a/drivers/usb/chipidea/ci_hdrc_imx.c > b/drivers/usb/chipidea/ci_hdrc_imx.c > index 389f0e0..a2b8cd0 100644 > --- a/drivers/usb/chipidea/ci_hdrc_imx.c > +++ b/drivers/usb/chipidea/ci_hdrc_imx.c > @@ -65,6 +65,8 @@ struct ci_hdrc_imx_data { > struct usb_phy *phy; > struct platform_device *ci_pdev; > struct clk *clk; > + struct clk *per; > + struct clk *ahb; > struct imx_usbmisc_data *usbmisc_data; > bool supports_runtime_pm; > bool in_lpm; > @@ -141,13 +143,27 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) > if (IS_ERR(data->usbmisc_data)) > return PTR_ERR(data->usbmisc_data); > > - data->clk = devm_clk_get(&pdev->dev, NULL); > + data->clk = devm_clk_get(&pdev->dev, "ipg"); > if (IS_ERR(data->clk)) { > dev_err(&pdev->dev, > - "Failed to get clock, err=%ld\n", PTR_ERR(data->clk)); > + "Failed to get ipg clock, err=%ld\n", > PTR_ERR(data->clk)); > return PTR_ERR(data->clk); > } > > + data->per = devm_clk_get(&pdev->dev, "per"); > + if (IS_ERR(data->per)) { > + dev_err(&pdev->dev, > + "Failed to get per clock, err=%ld\n", > PTR_ERR(data->per)); > + return PTR_ERR(data->per); > + } > + > + data->ahb = devm_clk_get(&pdev->dev, "ahb"); > + if (IS_ERR(data->ahb)) { > + dev_err(&pdev->dev, > + "Failed to get ahb clock, err=%ld\n", > PTR_ERR(data->ahb)); > + return PTR_ERR(data->ahb); > + } > + > ret = clk_prepare_enable(data->clk); > if (ret) { > dev_err(&pdev->dev, > @@ -155,6 +171,9 @@ static int ci_hdrc_imx_probe(struct platform_device *pdev) > return ret; > } > > + clk_prepare_enable(data->per); > + clk_prepare_enable(data->ahb); > + > data->phy = devm_usb_get_phy_by_phandle(&pdev->dev, "fsl,usbphy", 0); > if (IS_ERR(data->phy)) { > ret = PTR_ERR(data->phy); > > This fails as: > > imx_usb 10024000.usb: Failed to get ipg clock, err=-2 > imx_usb: probe of 10024000.usb failed with error -2 I would like to have an API like is_need_three_clks to distinguish one clk vs three clk cases, I will have a patch for it, would you help to test when the patch is ready? -- Best Regards, Peter Chen -- To unsubscribe from this list: send the line "unsubscribe linux-usb" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html