Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 315707
b: refs/heads/master
c: 3d42a37
h: refs/heads/master
i:
  315705: d2018be
  315703: 492f36c
v: v3
  • Loading branch information
Steffen Trumtrar authored and Marc Kleine-Budde committed Jul 20, 2012
1 parent 9493bfd commit 35cea77
Show file tree
Hide file tree
Showing 2 changed files with 28 additions and 19 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: 194b9a4cb91713ddb60c9f98f7212f6d8cb8e05f
refs/heads/master: 3d42a379b6fa5b46058e3302b1802b29f64865bb
45 changes: 27 additions & 18 deletions trunk/drivers/net/can/flexcan.c
Original file line number Diff line number Diff line change
Expand Up @@ -190,7 +190,8 @@ struct flexcan_priv {
u32 reg_esr;
u32 reg_ctrl_default;

struct clk *clk;
struct clk *clk_ipg;
struct clk *clk_per;
struct flexcan_platform_data *pdata;
const struct flexcan_devtype_data *devtype_data;
};
Expand Down Expand Up @@ -828,7 +829,8 @@ static int flexcan_open(struct net_device *dev)
struct flexcan_priv *priv = netdev_priv(dev);
int err;

clk_prepare_enable(priv->clk);
clk_prepare_enable(priv->clk_ipg);
clk_prepare_enable(priv->clk_per);

err = open_candev(dev);
if (err)
Expand All @@ -850,7 +852,8 @@ static int flexcan_open(struct net_device *dev)
out_close:
close_candev(dev);
out:
clk_disable_unprepare(priv->clk);
clk_disable_unprepare(priv->clk_per);
clk_disable_unprepare(priv->clk_ipg);

return err;
}
Expand All @@ -864,7 +867,8 @@ static int flexcan_close(struct net_device *dev)
flexcan_chip_stop(dev);

free_irq(dev->irq, dev);
clk_disable_unprepare(priv->clk);
clk_disable_unprepare(priv->clk_per);
clk_disable_unprepare(priv->clk_ipg);

close_candev(dev);

Expand Down Expand Up @@ -903,7 +907,8 @@ static int __devinit register_flexcandev(struct net_device *dev)
struct flexcan_regs __iomem *regs = priv->base;
u32 reg, err;

clk_prepare_enable(priv->clk);
clk_prepare_enable(priv->clk_ipg);
clk_prepare_enable(priv->clk_per);

/* select "bus clock", chip must be disabled */
flexcan_chip_disable(priv);
Expand Down Expand Up @@ -936,7 +941,8 @@ static int __devinit register_flexcandev(struct net_device *dev)
out:
/* disable core and turn off clocks */
flexcan_chip_disable(priv);
clk_disable_unprepare(priv->clk);
clk_disable_unprepare(priv->clk_per);
clk_disable_unprepare(priv->clk_ipg);

return err;
}
Expand Down Expand Up @@ -964,7 +970,7 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
struct net_device *dev;
struct flexcan_priv *priv;
struct resource *mem;
struct clk *clk = NULL;
struct clk *clk_ipg = NULL, *clk_per = NULL;
struct pinctrl *pinctrl;
void __iomem *base;
resource_size_t mem_size;
Expand All @@ -980,13 +986,20 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
"clock-frequency", &clock_freq);

if (!clock_freq) {
clk = clk_get(&pdev->dev, NULL);
if (IS_ERR(clk)) {
dev_err(&pdev->dev, "no clock defined\n");
err = PTR_ERR(clk);
clk_ipg = devm_clk_get(&pdev->dev, "ipg");
if (IS_ERR(clk_ipg)) {
dev_err(&pdev->dev, "no ipg clock defined\n");
err = PTR_ERR(clk_ipg);
goto failed_clock;
}
clock_freq = clk_get_rate(clk_ipg);

clk_per = devm_clk_get(&pdev->dev, "per");
if (IS_ERR(clk_per)) {
dev_err(&pdev->dev, "no per clock defined\n");
err = PTR_ERR(clk_per);
goto failed_clock;
}
clock_freq = clk_get_rate(clk);
}

mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
Expand Down Expand Up @@ -1039,7 +1052,8 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
CAN_CTRLMODE_BERR_REPORTING;
priv->base = base;
priv->dev = dev;
priv->clk = clk;
priv->clk_ipg = clk_ipg;
priv->clk_per = clk_per;
priv->pdata = pdev->dev.platform_data;
priv->devtype_data = devtype_data;

Expand Down Expand Up @@ -1067,8 +1081,6 @@ static int __devinit flexcan_probe(struct platform_device *pdev)
failed_map:
release_mem_region(mem->start, mem_size);
failed_get:
if (clk)
clk_put(clk);
failed_clock:
return err;
}
Expand All @@ -1086,9 +1098,6 @@ static int __devexit flexcan_remove(struct platform_device *pdev)
mem = platform_get_resource(pdev, IORESOURCE_MEM, 0);
release_mem_region(mem->start, resource_size(mem));

if (priv->clk)
clk_put(priv->clk);

free_candev(dev);

return 0;
Expand Down

0 comments on commit 35cea77

Please sign in to comment.