aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTomasz Figa <t.figa@samsung.com>2013-12-12 11:07:18 -0500
committerMike Turquette <mturquette@linaro.org>2014-01-08 12:53:52 -0500
commitd73ac4ca66676d0b0d57a8828d10d479ad054d0c (patch)
treee00fc507eb388a92c1593a96b5523f5e010bdd79
parentbadbc542f970a40f4c15014501016584f783782d (diff)
clk: max77686: Fix clean-up in error and remove paths
This patch fixes invalid kfree() and adds missing call to clk_unregister() in error and remove paths in max77686_clk_probe(). While at it, error handling is also cleaned up. Signed-off-by: Tomasz Figa <t.figa@samsung.com> Acked-by: Kyungmin Park <kyungmin.park@samsung.com> Signed-off-by: Mike Turquette <mturquette@linaro.org>
-rw-r--r--drivers/clk/clk-max77686.c29
1 files changed, 10 insertions, 19 deletions
diff --git a/drivers/clk/clk-max77686.c b/drivers/clk/clk-max77686.c
index 243072366aa8..4dc1832fe241 100644
--- a/drivers/clk/clk-max77686.c
+++ b/drivers/clk/clk-max77686.c
@@ -163,17 +163,9 @@ static int max77686_clk_probe(struct platform_device *pdev)
163 if (IS_ERR(clk)) { 163 if (IS_ERR(clk)) {
164 ret = PTR_ERR(clk); 164 ret = PTR_ERR(clk);
165 165
166 switch (i) { 166 dev_err(&pdev->dev, "failed to register %s\n",
167 case MAX77686_CLK_AP: 167 max77686_clks[i]->hw.init->name);
168 dev_err(&pdev->dev, "Fail to register CLK_AP\n"); 168 goto err_clocks;
169 goto err_clk_ap;
170 case MAX77686_CLK_CP:
171 dev_err(&pdev->dev, "Fail to register CLK_CP\n");
172 goto err_clk_cp;
173 case MAX77686_CLK_PMIC:
174 dev_err(&pdev->dev, "Fail to register CLK_PMIC\n");
175 goto err_clk_pmic;
176 }
177 } 169 }
178 } 170 }
179 171
@@ -181,13 +173,12 @@ static int max77686_clk_probe(struct platform_device *pdev)
181 173
182 return 0; 174 return 0;
183 175
184err_clk_pmic: 176err_clocks:
185 clkdev_drop(max77686_clks[MAX77686_CLK_CP]->lookup); 177 for (--i; i >= 0; --i) {
186 kfree(max77686_clks[MAX77686_CLK_CP]->hw.clk); 178 clkdev_drop(max77686_clks[i]->lookup);
187err_clk_cp: 179 clk_unregister(max77686_clks[i]->hw.clk);
188 clkdev_drop(max77686_clks[MAX77686_CLK_AP]->lookup); 180 }
189 kfree(max77686_clks[MAX77686_CLK_AP]->hw.clk); 181
190err_clk_ap:
191 return ret; 182 return ret;
192} 183}
193 184
@@ -198,7 +189,7 @@ static int max77686_clk_remove(struct platform_device *pdev)
198 189
199 for (i = 0; i < MAX77686_CLKS_NUM; i++) { 190 for (i = 0; i < MAX77686_CLKS_NUM; i++) {
200 clkdev_drop(max77686_clks[i]->lookup); 191 clkdev_drop(max77686_clks[i]->lookup);
201 kfree(max77686_clks[i]->hw.clk); 192 clk_unregister(max77686_clks[i]->hw.clk);
202 } 193 }
203 return 0; 194 return 0;
204} 195}