Skip to content

Commit 955bc61

Browse files
stpo8218gregkh
authored andcommitted
w1: mxc_w1: Enable clock before calling clk_get_rate() on it
According to the API, you may only call clk_get_rate() after actually enabling it. Found by Linux Driver Verification project (linuxtesting.org). Fixes: a5fd913 ("w1: add 1-wire master driver for i.MX27 / i.MX31") Signed-off-by: Stefan Potyra <[email protected]> Acked-by: Evgeniy Polyakov <[email protected]> Cc: stable <[email protected]> Signed-off-by: Greg Kroah-Hartman <[email protected]>
1 parent bd23a72 commit 955bc61

File tree

1 file changed

+13
-7
lines changed

1 file changed

+13
-7
lines changed

drivers/w1/masters/mxc_w1.c

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -112,6 +112,10 @@ static int mxc_w1_probe(struct platform_device *pdev)
112112
if (IS_ERR(mdev->clk))
113113
return PTR_ERR(mdev->clk);
114114

115+
err = clk_prepare_enable(mdev->clk);
116+
if (err)
117+
return err;
118+
115119
clkrate = clk_get_rate(mdev->clk);
116120
if (clkrate < 10000000)
117121
dev_warn(&pdev->dev,
@@ -125,12 +129,10 @@ static int mxc_w1_probe(struct platform_device *pdev)
125129

126130
res = platform_get_resource(pdev, IORESOURCE_MEM, 0);
127131
mdev->regs = devm_ioremap_resource(&pdev->dev, res);
128-
if (IS_ERR(mdev->regs))
129-
return PTR_ERR(mdev->regs);
130-
131-
err = clk_prepare_enable(mdev->clk);
132-
if (err)
133-
return err;
132+
if (IS_ERR(mdev->regs)) {
133+
err = PTR_ERR(mdev->regs);
134+
goto out_disable_clk;
135+
}
134136

135137
/* Software reset 1-Wire module */
136138
writeb(MXC_W1_RESET_RST, mdev->regs + MXC_W1_RESET);
@@ -146,8 +148,12 @@ static int mxc_w1_probe(struct platform_device *pdev)
146148

147149
err = w1_add_master_device(&mdev->bus_master);
148150
if (err)
149-
clk_disable_unprepare(mdev->clk);
151+
goto out_disable_clk;
150152

153+
return 0;
154+
155+
out_disable_clk:
156+
clk_disable_unprepare(mdev->clk);
151157
return err;
152158
}
153159

0 commit comments

Comments
 (0)