|
@@ -109,34 +109,21 @@ static int mxc_w1_probe(struct platform_device *pdev)
|
|
|
struct resource *res;
|
|
|
int err = 0;
|
|
|
|
|
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
- if (!res)
|
|
|
- return -ENODEV;
|
|
|
-
|
|
|
- mdev = kzalloc(sizeof(struct mxc_w1_device), GFP_KERNEL);
|
|
|
+ mdev = devm_kzalloc(&pdev->dev, sizeof(struct mxc_w1_device),
|
|
|
+ GFP_KERNEL);
|
|
|
if (!mdev)
|
|
|
return -ENOMEM;
|
|
|
|
|
|
- mdev->clk = clk_get(&pdev->dev, NULL);
|
|
|
- if (IS_ERR(mdev->clk)) {
|
|
|
- err = PTR_ERR(mdev->clk);
|
|
|
- goto failed_clk;
|
|
|
- }
|
|
|
+ mdev->clk = devm_clk_get(&pdev->dev, NULL);
|
|
|
+ if (IS_ERR(mdev->clk))
|
|
|
+ return PTR_ERR(mdev->clk);
|
|
|
|
|
|
mdev->clkdiv = (clk_get_rate(mdev->clk) / 1000000) - 1;
|
|
|
|
|
|
- res = request_mem_region(res->start, resource_size(res),
|
|
|
- "mxc_w1");
|
|
|
- if (!res) {
|
|
|
- err = -EBUSY;
|
|
|
- goto failed_req;
|
|
|
- }
|
|
|
-
|
|
|
- mdev->regs = ioremap(res->start, resource_size(res));
|
|
|
- if (!mdev->regs) {
|
|
|
- dev_err(&pdev->dev, "Cannot map mxc_w1 registers\n");
|
|
|
- goto failed_ioremap;
|
|
|
- }
|
|
|
+ res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
+ mdev->regs = devm_request_and_ioremap(&pdev->dev, res);
|
|
|
+ if (!mdev->regs)
|
|
|
+ return -EBUSY;
|
|
|
|
|
|
clk_prepare_enable(mdev->clk);
|
|
|
__raw_writeb(mdev->clkdiv, mdev->regs + MXC_W1_TIME_DIVIDER);
|
|
@@ -148,20 +135,10 @@ static int mxc_w1_probe(struct platform_device *pdev)
|
|
|
err = w1_add_master_device(&mdev->bus_master);
|
|
|
|
|
|
if (err)
|
|
|
- goto failed_add;
|
|
|
+ return err;
|
|
|
|
|
|
platform_set_drvdata(pdev, mdev);
|
|
|
return 0;
|
|
|
-
|
|
|
-failed_add:
|
|
|
- iounmap(mdev->regs);
|
|
|
-failed_ioremap:
|
|
|
- release_mem_region(res->start, resource_size(res));
|
|
|
-failed_req:
|
|
|
- clk_put(mdev->clk);
|
|
|
-failed_clk:
|
|
|
- kfree(mdev);
|
|
|
- return err;
|
|
|
}
|
|
|
|
|
|
/*
|
|
@@ -170,16 +147,10 @@ failed_clk:
|
|
|
static int mxc_w1_remove(struct platform_device *pdev)
|
|
|
{
|
|
|
struct mxc_w1_device *mdev = platform_get_drvdata(pdev);
|
|
|
- struct resource *res;
|
|
|
-
|
|
|
- res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
|
|
|
|
|
|
w1_remove_master_device(&mdev->bus_master);
|
|
|
|
|
|
- iounmap(mdev->regs);
|
|
|
- release_mem_region(res->start, resource_size(res));
|
|
|
clk_disable_unprepare(mdev->clk);
|
|
|
- clk_put(mdev->clk);
|
|
|
|
|
|
platform_set_drvdata(pdev, NULL);
|
|
|
|