| From d390b94ad08a6a4112c25be438d9e21173a689c0 Mon Sep 17 00:00:00 2001 |
| From: Geert Uytterhoeven <geert+renesas@glider.be> |
| Date: Thu, 12 Oct 2017 10:24:53 +0200 |
| Subject: [PATCH 0125/1795] ravb: Consolidate clock handling |
| MIME-Version: 1.0 |
| Content-Type: text/plain; charset=UTF-8 |
| Content-Transfer-Encoding: 8bit |
| |
| The module clock is used for two purposes: |
| - Wake-on-LAN (WoL), which is optional, |
| - gPTP Timer Increment (GTI) configuration, which is mandatory. |
| |
| As the clock is needed for GTI configuration anyway, WoL is always |
| available. Hence remove duplication and repeated obtaining of the clock |
| by making GTI use the stored clock for WoL use. |
| |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| Reviewed-by: Niklas Sรถderlund <niklas.soderlund+renesas@ragnatech.se> |
| Reviewed-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| (cherry picked from commit ab104615e01c2c4cbe9ea4073a430d51f6547dd2) |
| Signed-off-by: Simon Horman <horms+renesas@verge.net.au> |
| Signed-off-by: Geert Uytterhoeven <geert+renesas@glider.be> |
| --- |
| drivers/net/ethernet/renesas/ravb_main.c | 35 +++++++----------------- |
| 1 file changed, 10 insertions(+), 25 deletions(-) |
| |
| diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c |
| index 28b6a9f599bf..9297fbbab0fe 100644 |
| --- a/drivers/net/ethernet/renesas/ravb_main.c |
| +++ b/drivers/net/ethernet/renesas/ravb_main.c |
| @@ -1330,20 +1330,15 @@ static void ravb_get_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) |
| { |
| struct ravb_private *priv = netdev_priv(ndev); |
| |
| - wol->supported = 0; |
| - wol->wolopts = 0; |
| - |
| - if (priv->clk) { |
| - wol->supported = WAKE_MAGIC; |
| - wol->wolopts = priv->wol_enabled ? WAKE_MAGIC : 0; |
| - } |
| + wol->supported = WAKE_MAGIC; |
| + wol->wolopts = priv->wol_enabled ? WAKE_MAGIC : 0; |
| } |
| |
| static int ravb_set_wol(struct net_device *ndev, struct ethtool_wolinfo *wol) |
| { |
| struct ravb_private *priv = netdev_priv(ndev); |
| |
| - if (!priv->clk || wol->wolopts & ~WAKE_MAGIC) |
| + if (wol->wolopts & ~WAKE_MAGIC) |
| return -EOPNOTSUPP; |
| |
| priv->wol_enabled = !!(wol->wolopts & WAKE_MAGIC); |
| @@ -1938,22 +1933,12 @@ MODULE_DEVICE_TABLE(of, ravb_match_table); |
| |
| static int ravb_set_gti(struct net_device *ndev) |
| { |
| - |
| + struct ravb_private *priv = netdev_priv(ndev); |
| struct device *dev = ndev->dev.parent; |
| - struct device_node *np = dev->of_node; |
| unsigned long rate; |
| - struct clk *clk; |
| uint64_t inc; |
| |
| - clk = of_clk_get(np, 0); |
| - if (IS_ERR(clk)) { |
| - dev_err(dev, "could not get clock\n"); |
| - return PTR_ERR(clk); |
| - } |
| - |
| - rate = clk_get_rate(clk); |
| - clk_put(clk); |
| - |
| + rate = clk_get_rate(priv->clk); |
| if (!rate) |
| return -EINVAL; |
| |
| @@ -2102,10 +2087,11 @@ static int ravb_probe(struct platform_device *pdev) |
| |
| priv->chip_id = chip_id; |
| |
| - /* Get clock, if not found that's OK but Wake-On-Lan is unavailable */ |
| priv->clk = devm_clk_get(&pdev->dev, NULL); |
| - if (IS_ERR(priv->clk)) |
| - priv->clk = NULL; |
| + if (IS_ERR(priv->clk)) { |
| + error = PTR_ERR(priv->clk); |
| + goto out_release; |
| + } |
| |
| /* Set function */ |
| ndev->netdev_ops = &ravb_netdev_ops; |
| @@ -2173,8 +2159,7 @@ static int ravb_probe(struct platform_device *pdev) |
| if (error) |
| goto out_napi_del; |
| |
| - if (priv->clk) |
| - device_set_wakeup_capable(&pdev->dev, 1); |
| + device_set_wakeup_capable(&pdev->dev, 1); |
| |
| /* Print device information */ |
| netdev_info(ndev, "Base address at %#x, %pM, IRQ %d.\n", |
| -- |
| 2.19.0 |
| |