On Thu, Nov 15, 2012 at 04:34:06PM +0200, Roger Quadros wrote:
> prevents getting clocks that don't exist on the platform.
> 
> Signed-off-by: Roger Quadros <rog...@ti.com>
> ---
>  drivers/mfd/omap-usb-host.c |   47 
> ++++++++++++++++++++++++++++++++-----------
>  1 files changed, 35 insertions(+), 12 deletions(-)
> 
> diff --git a/drivers/mfd/omap-usb-host.c b/drivers/mfd/omap-usb-host.c
> index 44772ae..ad89939 100644
> --- a/drivers/mfd/omap-usb-host.c
> +++ b/drivers/mfd/omap-usb-host.c
> @@ -94,6 +94,7 @@ struct usbhs_port {
>  };
>  
>  struct usbhs_hcd_omap {
> +     int                             nports;
>       struct usbhs_port               port[MAX_HS_USB_PORTS];
>  
>       struct clk                      *xclk60mhsp1_ck;
> @@ -291,7 +292,7 @@ static int usbhs_runtime_resume(struct device *dev)
>       if (omap->ehci_logic_fck && !IS_ERR(omap->ehci_logic_fck))
>               clk_enable(omap->ehci_logic_fck);
>  
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++) {
> +     for (i = 0; i < omap->nports; i++) {
>               if (is_ehci_tll_mode(pdata->port_mode[i])) {
>                       if (omap->port[i].utmi_clk) {
>                               r = clk_enable(omap->port[i].utmi_clk);
> @@ -320,7 +321,7 @@ static int usbhs_runtime_suspend(struct device *dev)
>  
>       spin_lock_irqsave(&omap->lock, flags);
>  
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++) {
> +     for (i = 0; i < omap->nports; i++) {
>               if (is_ehci_tll_mode(pdata->port_mode[i])) {
>                       if (omap->port[i].utmi_clk)
>                               clk_disable(omap->port[i].utmi_clk);
> @@ -360,8 +361,6 @@ static void omap_usbhs_init(struct device *dev)
>  
>       pm_runtime_get_sync(dev);
>       spin_lock_irqsave(&omap->lock, flags);
> -     omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
> -     dev_dbg(dev, "OMAP UHH_REVISION 0x%x\n", omap->usbhs_rev);
>  
>       reg = usbhs_read(omap->uhh_base, OMAP_UHH_HOSTCONFIG);
>       /* setup ULPI bypass and burst configurations */
> @@ -502,8 +501,32 @@ static int __devinit usbhs_omap_probe(struct 
> platform_device *pdev)
>       omap->pdata = pdata;
>       platform_set_drvdata(pdev, omap);
>  
> +     pm_runtime_enable(dev);
> +     pm_runtime_get_sync(dev);
> +     omap->usbhs_rev = usbhs_read(omap->uhh_base, OMAP_UHH_REVISION);
> +
> +     /* we need to call runtime suspend before we update omap->nports
> +      * to prevent unbalanced clk_disable()
> +      */

wrong comment style.

> +     pm_runtime_put_sync(dev);

does it *really* need to be a synchronous put ?

> +
> +     switch (omap->usbhs_rev) {
> +     case OMAP_USBHS_REV1:
> +             omap->nports = 3;
> +             break;
> +     case OMAP_USBHS_REV2:
> +             omap->nports = 2;
> +             break;
> +     default:
> +             omap->nports = MAX_HS_USB_PORTS;
> +             dev_info(dev,
> +               "USB HOST Rev : 0x%d not recognized, assuming %d ports\n",
> +                omap->usbhs_rev, omap->nports);

please make this dev_dbg().

> +             break;
> +     }
> +
>       need_logic_fck = false;
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++) {
> +     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;
> @@ -538,7 +561,7 @@ static int __devinit usbhs_omap_probe(struct 
> platform_device *pdev)
>               goto err_init60m;
>       }
>  
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++) {
> +     for (i = 0; i < omap->nports; i++) {
>               struct clk *pclk;
>               char utmi_clk[] = "usb_host_hs_utmi_px_clk";
>  
> @@ -588,8 +611,6 @@ static int __devinit usbhs_omap_probe(struct 
> platform_device *pdev)
>       }
>  
>  
> -     pm_runtime_enable(dev);

moving this part around isn't part of $SUBJECT aparently.

> -
>       omap_usbhs_init(dev);
>       ret = omap_usbhs_alloc_children(pdev);
>       if (ret) {
> @@ -597,15 +618,15 @@ static int __devinit usbhs_omap_probe(struct 
> platform_device *pdev)
>               goto err_alloc;
>       }
>  
> +     pr_info("OMAP USB HOST : revision 0x%x, ports %d\n",
> +                     omap->usbhs_rev, omap->nports);

please remove this pr_info() as it doesn't add anything other than noise
to bootup, IMHO.

>       return 0;
>  
>  err_alloc:
>       omap_usbhs_deinit(&pdev->dev);
> -
> -     pm_runtime_disable(dev);
>       iounmap(omap->uhh_base);
>  
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++)
> +     for (i = 0; i < omap->nports; i++)
>               clk_put(omap->port[i].utmi_clk);
>  
>       clk_put(omap->init_60m_fclk);
> @@ -619,6 +640,8 @@ err_xclk60mhsp2:
>  err_xclk60mhsp1:
>       clk_put(omap->ehci_logic_fck);
>  
> +     pm_runtime_disable(dev);
> +
>  err_remap:
>       kfree(omap);
>       return ret;
> @@ -639,7 +662,7 @@ static int __devexit usbhs_omap_remove(struct 
> platform_device *pdev)
>       pm_runtime_disable(&pdev->dev);
>       iounmap(omap->uhh_base);
>  
> -     for (i = 0; i < MAX_HS_USB_PORTS; i++)
> +     for (i = 0; i < omap->nports; i++)
>               clk_put(omap->port[i].utmi_clk);
>  
>       clk_put(omap->init_60m_fclk);
> -- 
> 1.7.4.1
> 

-- 
balbi

Attachment: signature.asc
Description: Digital signature

Reply via email to