Use clk_prepare()/clk_unprepare() in the driver since common clock framework needs these to be called before clock is enabled.
This is in preparation of common clock framework migration for DaVinci. Cc: Mike Turquette <[email protected]> Signed-off-by: Sekhar Nori <[email protected]> --- drivers/net/ethernet/ti/davinci_emac.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/drivers/net/ethernet/ti/davinci_emac.c b/drivers/net/ethernet/ti/davinci_emac.c index 7be04dc..e7b3b94 100644 --- a/drivers/net/ethernet/ti/davinci_emac.c +++ b/drivers/net/ethernet/ti/davinci_emac.c @@ -352,6 +352,7 @@ struct emac_priv { /*platform specific members*/ void (*int_enable) (void); void (*int_disable) (void); + struct clk *clk; }; /* EMAC TX Host Error description strings */ @@ -1870,19 +1871,29 @@ static int __devinit davinci_emac_probe(struct platform_device *pdev) dev_err(&pdev->dev, "failed to get EMAC clock\n"); return -EBUSY; } + + rc = clk_prepare(emac_clk); + if (rc) { + dev_err(&pdev->dev, "emac clock prepare failed.\n"); + return rc; + } + emac_bus_frequency = clk_get_rate(emac_clk); /* TODO: Probe PHY here if possible */ ndev = alloc_etherdev(sizeof(struct emac_priv)); - if (!ndev) - return -ENOMEM; + if (!ndev) { + rc = -ENOMEM; + goto no_etherdev; + } platform_set_drvdata(pdev, ndev); priv = netdev_priv(ndev); priv->pdev = pdev; priv->ndev = ndev; priv->msg_enable = netif_msg_init(debug_level, DAVINCI_EMAC_DEBUG); + priv->clk = emac_clk; spin_lock_init(&priv->lock); @@ -2020,6 +2031,8 @@ no_cpdma_chan: cpdma_ctlr_destroy(priv->dma); no_pdata: free_netdev(ndev); +no_etherdev: + clk_unprepare(emac_clk); return rc; } @@ -2048,6 +2061,8 @@ static int __devexit davinci_emac_remove(struct platform_device *pdev) unregister_netdev(ndev); free_netdev(ndev); + clk_unprepare(priv->clk); + return 0; } -- 1.7.10.1 _______________________________________________ Davinci-linux-open-source mailing list [email protected] http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source
