Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
[firefly-linux-kernel-4.4.55.git] / drivers / net / ethernet / ti / davinci_emac.c
index 72300bc9e3783842ef3608be24f0f33d2ed0f69b..6a0b47715a84d0b0ddd38d7894f357d84bdb00ff 100644 (file)
@@ -1438,7 +1438,7 @@ static int emac_poll(struct napi_struct *napi, int budget)
  * Polled functionality used by netconsole and others in non interrupt mode
  *
  */
-void emac_poll_controller(struct net_device *ndev)
+static void emac_poll_controller(struct net_device *ndev)
 {
        struct emac_priv *priv = netdev_priv(ndev);
 
@@ -1865,21 +1865,18 @@ static int davinci_emac_probe(struct platform_device *pdev)
 
 
        /* obtain emac clock from kernel */
-       emac_clk = clk_get(&pdev->dev, NULL);
+       emac_clk = devm_clk_get(&pdev->dev, NULL);
        if (IS_ERR(emac_clk)) {
                dev_err(&pdev->dev, "failed to get EMAC clock\n");
                return -EBUSY;
        }
        emac_bus_frequency = clk_get_rate(emac_clk);
-       clk_put(emac_clk);
 
        /* TODO: Probe PHY here if possible */
 
        ndev = alloc_etherdev(sizeof(struct emac_priv));
-       if (!ndev) {
-               rc = -ENOMEM;
-               goto no_ndev;
-       }
+       if (!ndev)
+               return -ENOMEM;
 
        platform_set_drvdata(pdev, ndev);
        priv = netdev_priv(ndev);
@@ -1893,7 +1890,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
        if (!pdata) {
                dev_err(&pdev->dev, "no platform data\n");
                rc = -ENODEV;
-               goto probe_quit;
+               goto no_pdata;
        }
 
        /* MAC addr and PHY mask , RMII enable info from platform_data */
@@ -1913,23 +1910,23 @@ static int davinci_emac_probe(struct platform_device *pdev)
        if (!res) {
                dev_err(&pdev->dev,"error getting res\n");
                rc = -ENOENT;
-               goto probe_quit;
+               goto no_pdata;
        }
 
        priv->emac_base_phys = res->start + pdata->ctrl_reg_offset;
        size = resource_size(res);
-       if (!request_mem_region(res->start, size, ndev->name)) {
+       if (!devm_request_mem_region(&pdev->dev, res->start,
+                                    size, ndev->name)) {
                dev_err(&pdev->dev, "failed request_mem_region() for regs\n");
                rc = -ENXIO;
-               goto probe_quit;
+               goto no_pdata;
        }
 
-       priv->remap_addr = ioremap(res->start, size);
+       priv->remap_addr = devm_ioremap(&pdev->dev, res->start, size);
        if (!priv->remap_addr) {
                dev_err(&pdev->dev, "unable to map IO\n");
                rc = -ENOMEM;
-               release_mem_region(res->start, size);
-               goto probe_quit;
+               goto no_pdata;
        }
        priv->emac_base = priv->remap_addr + pdata->ctrl_reg_offset;
        ndev->base_addr = (unsigned long)priv->remap_addr;
@@ -1962,7 +1959,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
        if (!priv->dma) {
                dev_err(&pdev->dev, "error initializing DMA\n");
                rc = -ENOMEM;
-               goto no_dma;
+               goto no_pdata;
        }
 
        priv->txchan = cpdma_chan_create(priv->dma, tx_chan_num(EMAC_DEF_TX_CH),
@@ -1971,14 +1968,14 @@ static int davinci_emac_probe(struct platform_device *pdev)
                                       emac_rx_handler);
        if (WARN_ON(!priv->txchan || !priv->rxchan)) {
                rc = -ENOMEM;
-               goto no_irq_res;
+               goto no_cpdma_chan;
        }
 
        res = platform_get_resource(pdev, IORESOURCE_IRQ, 0);
        if (!res) {
                dev_err(&pdev->dev, "error getting irq res\n");
                rc = -ENOENT;
-               goto no_irq_res;
+               goto no_cpdma_chan;
        }
        ndev->irq = res->start;
 
@@ -2000,7 +1997,7 @@ static int davinci_emac_probe(struct platform_device *pdev)
        if (rc) {
                dev_err(&pdev->dev, "error in register_netdev\n");
                rc = -ENODEV;
-               goto no_irq_res;
+               goto no_cpdma_chan;
        }
 
 
@@ -2015,20 +2012,14 @@ static int davinci_emac_probe(struct platform_device *pdev)
 
        return 0;
 
-no_irq_res:
+no_cpdma_chan:
        if (priv->txchan)
                cpdma_chan_destroy(priv->txchan);
        if (priv->rxchan)
                cpdma_chan_destroy(priv->rxchan);
        cpdma_ctlr_destroy(priv->dma);
-no_dma:
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
-       release_mem_region(res->start, resource_size(res));
-       iounmap(priv->remap_addr);
-
-probe_quit:
+no_pdata:
        free_netdev(ndev);
-no_ndev:
        return rc;
 }
 
@@ -2041,14 +2032,12 @@ no_ndev:
  */
 static int davinci_emac_remove(struct platform_device *pdev)
 {
-       struct resource *res;
        struct net_device *ndev = platform_get_drvdata(pdev);
        struct emac_priv *priv = netdev_priv(ndev);
 
        dev_notice(&ndev->dev, "DaVinci EMAC: davinci_emac_remove()\n");
 
        platform_set_drvdata(pdev, NULL);
-       res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
 
        if (priv->txchan)
                cpdma_chan_destroy(priv->txchan);
@@ -2056,10 +2045,7 @@ static int davinci_emac_remove(struct platform_device *pdev)
                cpdma_chan_destroy(priv->rxchan);
        cpdma_ctlr_destroy(priv->dma);
 
-       release_mem_region(res->start, resource_size(res));
-
        unregister_netdev(ndev);
-       iounmap(priv->remap_addr);
        free_netdev(ndev);
 
        return 0;