Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 368670
b: refs/heads/master
c: b809286
h: refs/heads/master
v: v3
  • Loading branch information
Sekhar Nori authored and David S. Miller committed Mar 26, 2013
1 parent 5bc0519 commit e617ec6
Show file tree
Hide file tree
Showing 2 changed files with 17 additions and 31 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: dbbd136c7dbfe0fba989f337c35f976ef432d1d5
refs/heads/master: b8092861efd827deb8d84292674704ee8bf41b04
46 changes: 16 additions & 30 deletions trunk/drivers/net/ethernet/ti/davinci_emac.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand All @@ -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 */
Expand All @@ -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;
Expand Down Expand Up @@ -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),
Expand All @@ -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;

Expand All @@ -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;
}


Expand All @@ -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;
}

Expand All @@ -2041,25 +2032,20 @@ static int davinci_emac_probe(struct platform_device *pdev)
*/
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);
if (priv->rxchan)
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;
Expand Down

0 comments on commit e617ec6

Please sign in to comment.