Re: [PATCH v5 2/9] mfd: omap-usb-host: Get clocks based on hardware revision
On 01/10/2014 04:26 PM, Lee Jones wrote: On Fri, 10 Jan 2014, Arnd Bergmann wrote: On Friday 10 January 2014, Lee Jones wrote: - need_logic_fck = false; + /* Set all clocks as invalid to begin with */ + omap-ehci_logic_fck = omap-init_60m_fclk = ERR_PTR(-EINVAL); + omap-utmi_p1_gfclk = omap-utmi_p2_gfclk = ERR_PTR(-EINVAL); + omap-xclk60mhsp1_ck = omap-xclk60mhsp2_ck = ERR_PTR(-EINVAL); I don't think this is the correct error code. -EINVAL means 'invalid parameter'. You probably want -ENODEV or -ENOSYS ('function not implemented' probably isn't ideal either tbh, but you get the idea). Perhaps you can set them as NULL and check for IS_ERR_OR_NULL() instead? I think ENODEV is ok here, I'd much prefer this over IS_ERR_OR_NULL(). Sounds good to me. OK. Will fix. cheers, -roger -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/9] mfd: omap-usb-host: Get clocks based on hardware revision
Not all revisions have all the clocks so get the necessary clocks based on hardware revision. This should avoid un-necessary clk_get failure messages that were observed earlier. Be more strict and always fail on clk_get() error. CC: Lee Jones lee.jo...@linaro.org CC: Samuel Ortiz sa...@linux.intel.com Signed-off-by: Roger Quadros rog...@ti.com --- drivers/mfd/omap-usb-host.c | 93 +++-- 1 file changed, 64 insertions(+), 29 deletions(-) diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index 1c9bca2..7202cc6 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -92,7 +92,6 @@ #define is_ehci_tll_mode(x) (x == OMAP_EHCI_PORT_MODE_TLL) #define is_ehci_hsic_mode(x) (x == OMAP_EHCI_PORT_MODE_HSIC) - Sneaky! ;) struct usbhs_hcd_omap { int nports; struct clk **utmi_clk; @@ -665,22 +664,41 @@ static int usbhs_omap_probe(struct platform_device *pdev) goto err_mem; } - need_logic_fck = false; + /* Set all clocks as invalid to begin with */ + omap-ehci_logic_fck = omap-init_60m_fclk = ERR_PTR(-EINVAL); + omap-utmi_p1_gfclk = omap-utmi_p2_gfclk = ERR_PTR(-EINVAL); + omap-xclk60mhsp1_ck = omap-xclk60mhsp2_ck = ERR_PTR(-EINVAL); I don't think this is the correct error code. -EINVAL means 'invalid parameter'. You probably want -ENODEV or -ENOSYS ('function not implemented' probably isn't ideal either tbh, but you get the idea). Perhaps you can set them as NULL and check for IS_ERR_OR_NULL() instead? -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/9] mfd: omap-usb-host: Get clocks based on hardware revision
On Friday 10 January 2014, Lee Jones wrote: - need_logic_fck = false; + /* Set all clocks as invalid to begin with */ + omap-ehci_logic_fck = omap-init_60m_fclk = ERR_PTR(-EINVAL); + omap-utmi_p1_gfclk = omap-utmi_p2_gfclk = ERR_PTR(-EINVAL); + omap-xclk60mhsp1_ck = omap-xclk60mhsp2_ck = ERR_PTR(-EINVAL); I don't think this is the correct error code. -EINVAL means 'invalid parameter'. You probably want -ENODEV or -ENOSYS ('function not implemented' probably isn't ideal either tbh, but you get the idea). Perhaps you can set them as NULL and check for IS_ERR_OR_NULL() instead? I think ENODEV is ok here, I'd much prefer this over IS_ERR_OR_NULL(). Arnd -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Re: [PATCH v5 2/9] mfd: omap-usb-host: Get clocks based on hardware revision
On Fri, 10 Jan 2014, Arnd Bergmann wrote: On Friday 10 January 2014, Lee Jones wrote: - need_logic_fck = false; + /* Set all clocks as invalid to begin with */ + omap-ehci_logic_fck = omap-init_60m_fclk = ERR_PTR(-EINVAL); + omap-utmi_p1_gfclk = omap-utmi_p2_gfclk = ERR_PTR(-EINVAL); + omap-xclk60mhsp1_ck = omap-xclk60mhsp2_ck = ERR_PTR(-EINVAL); I don't think this is the correct error code. -EINVAL means 'invalid parameter'. You probably want -ENODEV or -ENOSYS ('function not implemented' probably isn't ideal either tbh, but you get the idea). Perhaps you can set them as NULL and check for IS_ERR_OR_NULL() instead? I think ENODEV is ok here, I'd much prefer this over IS_ERR_OR_NULL(). Sounds good to me. -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog -- To unsubscribe from this list: send the line unsubscribe linux-omap in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
[PATCH v5 2/9] mfd: omap-usb-host: Get clocks based on hardware revision
Not all revisions have all the clocks so get the necessary clocks based on hardware revision. This should avoid un-necessary clk_get failure messages that were observed earlier. Be more strict and always fail on clk_get() error. CC: Lee Jones lee.jo...@linaro.org CC: Samuel Ortiz sa...@linux.intel.com Signed-off-by: Roger Quadros rog...@ti.com --- drivers/mfd/omap-usb-host.c | 93 +++-- 1 file changed, 64 insertions(+), 29 deletions(-) diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c index 1c9bca2..7202cc6 100644 --- a/drivers/mfd/omap-usb-host.c +++ b/drivers/mfd/omap-usb-host.c @@ -92,7 +92,6 @@ #define is_ehci_tll_mode(x)(x == OMAP_EHCI_PORT_MODE_TLL) #define is_ehci_hsic_mode(x) (x == OMAP_EHCI_PORT_MODE_HSIC) - struct usbhs_hcd_omap { int nports; struct clk **utmi_clk; @@ -665,22 +664,41 @@ static int usbhs_omap_probe(struct platform_device *pdev) goto err_mem; } - need_logic_fck = false; + /* Set all clocks as invalid to begin with */ + omap-ehci_logic_fck = omap-init_60m_fclk = ERR_PTR(-EINVAL); + omap-utmi_p1_gfclk = omap-utmi_p2_gfclk = ERR_PTR(-EINVAL); + omap-xclk60mhsp1_ck = omap-xclk60mhsp2_ck = ERR_PTR(-EINVAL); + for (i = 0; i omap-nports; i++) { - if (is_ehci_phy_mode(i) || is_ehci_tll_mode(i) || - is_ehci_hsic_mode(i)) - need_logic_fck |= true; + omap-utmi_clk[i] = ERR_PTR(-EINVAL); + omap-hsic480m_clk[i] = ERR_PTR(-EINVAL); + omap-hsic60m_clk[i] = ERR_PTR(-EINVAL); } - omap-ehci_logic_fck = ERR_PTR(-EINVAL); - if (need_logic_fck) { - omap-ehci_logic_fck = devm_clk_get(dev, ehci_logic_fck); - if (IS_ERR(omap-ehci_logic_fck)) { - ret = PTR_ERR(omap-ehci_logic_fck); - dev_dbg(dev, ehci_logic_fck failed:%d\n, ret); + /* for OMAP3 i.e. USBHS REV1 */ + if (omap-usbhs_rev == OMAP_USBHS_REV1) { + need_logic_fck = false; + for (i = 0; i omap-nports; i++) { + if (is_ehci_phy_mode(pdata-port_mode[i]) || + is_ehci_tll_mode(pdata-port_mode[i]) || + is_ehci_hsic_mode(pdata-port_mode[i])) + + need_logic_fck |= true; + } + + if (need_logic_fck) { + omap-ehci_logic_fck = clk_get(dev, usbhost_120m_fck); + if (IS_ERR(omap-ehci_logic_fck)) { + ret = PTR_ERR(omap-ehci_logic_fck); + dev_err(dev, usbhost_120m_fck failed:%d\n, + ret); + goto err_mem; + } } + goto initialize; } + /* for OMAP4+ i.e. USBHS REV2+ */ omap-utmi_p1_gfclk = devm_clk_get(dev, utmi_p1_gfclk); if (IS_ERR(omap-utmi_p1_gfclk)) { ret = PTR_ERR(omap-utmi_p1_gfclk); @@ -728,54 +746,71 @@ static int usbhs_omap_probe(struct platform_device *pdev) * them */ omap-utmi_clk[i] = devm_clk_get(dev, clkname); - if (IS_ERR(omap-utmi_clk[i])) - dev_dbg(dev, Failed to get clock : %s : %ld\n, - clkname, PTR_ERR(omap-utmi_clk[i])); + if (IS_ERR(omap-utmi_clk[i])) { + ret = PTR_ERR(omap-utmi_clk[i]); + dev_err(dev, Failed to get clock : %s : %d\n, + clkname, ret); + goto err_mem; + } snprintf(clkname, sizeof(clkname), usb_host_hs_hsic480m_p%d_clk, i + 1); omap-hsic480m_clk[i] = devm_clk_get(dev, clkname); - if (IS_ERR(omap-hsic480m_clk[i])) - dev_dbg(dev, Failed to get clock : %s : %ld\n, - clkname, PTR_ERR(omap-hsic480m_clk[i])); + if (IS_ERR(omap-hsic480m_clk[i])) { + ret = PTR_ERR(omap-hsic480m_clk[i]); + dev_err(dev, Failed to get clock : %s : %d\n, + clkname, ret); + goto err_mem; + } snprintf(clkname, sizeof(clkname), usb_host_hs_hsic60m_p%d_clk, i + 1); omap-hsic60m_clk[i] = devm_clk_get(dev, clkname); - if (IS_ERR(omap-hsic60m_clk[i])) - dev_dbg(dev, Failed to get clock : %s : %ld\n, - clkname, PTR_ERR(omap-hsic60m_clk[i])); + if (IS_ERR(omap-hsic60m_clk[i])) { +