Skip to content

Commit

Permalink
net/macb: unify clock management
Browse files Browse the repository at this point in the history
Most of the functions from the Common Clk Framework handle NULL pointer as
input argument.

Since the TX clock is optional, we now set tx_clk to NULL value
instead of ERR_PTR(-ENOENT) when this clock is not available. This simplifies
the clock management and avoid the need to test tx_clk value.

Signed-off-by: Cyrille Pitchen <cyrille.pitchen@atmel.com>
Acked-by: Boris Brezillon <boris.brezillon@free-electrons.com>
Acked-by: Alexandre Belloni <alexandre.belloni@free-electrons.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Cyrille Pitchen authored and David S. Miller committed Mar 8, 2015
1 parent a848748 commit 93b31f4
Showing 1 changed file with 14 additions and 17 deletions.
31 changes: 14 additions & 17 deletions drivers/net/ethernet/cadence/macb.c
Original file line number Diff line number Diff line change
Expand Up @@ -213,6 +213,9 @@ static void macb_set_tx_clk(struct clk *clk, int speed, struct net_device *dev)
{
long ferr, rate, rate_rounded;

if (!clk)
return;

switch (speed) {
case SPEED_10:
rate = 2500000;
Expand Down Expand Up @@ -292,8 +295,7 @@ static void macb_handle_link_change(struct net_device *dev)

spin_unlock_irqrestore(&bp->lock, flags);

if (!IS_ERR(bp->tx_clk))
macb_set_tx_clk(bp->tx_clk, phydev->speed, dev);
macb_set_tx_clk(bp->tx_clk, phydev->speed, dev);

if (status_change) {
if (phydev->link) {
Expand Down Expand Up @@ -2264,6 +2266,8 @@ static int macb_probe(struct platform_device *pdev)
}

tx_clk = devm_clk_get(&pdev->dev, "tx_clk");
if (IS_ERR(tx_clk))
tx_clk = NULL;

err = clk_prepare_enable(pclk);
if (err) {
Expand All @@ -2277,13 +2281,10 @@ static int macb_probe(struct platform_device *pdev)
goto err_out_disable_pclk;
}

if (!IS_ERR(tx_clk)) {
err = clk_prepare_enable(tx_clk);
if (err) {
dev_err(&pdev->dev, "failed to enable tx_clk (%u)\n",
err);
goto err_out_disable_hclk;
}
err = clk_prepare_enable(tx_clk);
if (err) {
dev_err(&pdev->dev, "failed to enable tx_clk (%u)\n", err);
goto err_out_disable_hclk;
}

err = -ENOMEM;
Expand Down Expand Up @@ -2455,8 +2456,7 @@ static int macb_probe(struct platform_device *pdev)
err_out_free_netdev:
free_netdev(dev);
err_out_disable_clocks:
if (!IS_ERR(tx_clk))
clk_disable_unprepare(tx_clk);
clk_disable_unprepare(tx_clk);
err_out_disable_hclk:
clk_disable_unprepare(hclk);
err_out_disable_pclk:
Expand All @@ -2480,8 +2480,7 @@ static int macb_remove(struct platform_device *pdev)
kfree(bp->mii_bus->irq);
mdiobus_free(bp->mii_bus);
unregister_netdev(dev);
if (!IS_ERR(bp->tx_clk))
clk_disable_unprepare(bp->tx_clk);
clk_disable_unprepare(bp->tx_clk);
clk_disable_unprepare(bp->hclk);
clk_disable_unprepare(bp->pclk);
free_netdev(dev);
Expand All @@ -2499,8 +2498,7 @@ static int __maybe_unused macb_suspend(struct device *dev)
netif_carrier_off(netdev);
netif_device_detach(netdev);

if (!IS_ERR(bp->tx_clk))
clk_disable_unprepare(bp->tx_clk);
clk_disable_unprepare(bp->tx_clk);
clk_disable_unprepare(bp->hclk);
clk_disable_unprepare(bp->pclk);

Expand All @@ -2515,8 +2513,7 @@ static int __maybe_unused macb_resume(struct device *dev)

clk_prepare_enable(bp->pclk);
clk_prepare_enable(bp->hclk);
if (!IS_ERR(bp->tx_clk))
clk_prepare_enable(bp->tx_clk);
clk_prepare_enable(bp->tx_clk);

netif_device_attach(netdev);

Expand Down

0 comments on commit 93b31f4

Please sign in to comment.