Commit 63e83bd8 authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Daniel Lezcano

clocksource/drivers/samsung_pwm: Cleanup on init error

Failure of timer initialization is likely to be fatal for the system, so
cleanup in such case is not strictly necessary.  However the code might
be refactored or reused, so better not to rely on such assumption that
system won't continue init failure.

Unmap the IO memory and put the clock on initialization failures from
devicetree.
Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@canonical.com>
Signed-off-by: default avatarDaniel Lezcano <daniel.lezcano@linaro.org>
Link: https://lore.kernel.org/r/20210506202729.157260-3-krzysztof.kozlowski@canonical.com
parent bb08e965
...@@ -421,7 +421,7 @@ static int __init samsung_pwm_alloc(struct device_node *np, ...@@ -421,7 +421,7 @@ static int __init samsung_pwm_alloc(struct device_node *np,
struct property *prop; struct property *prop;
const __be32 *cur; const __be32 *cur;
u32 val; u32 val;
int i; int i, ret;
memcpy(&pwm.variant, variant, sizeof(pwm.variant)); memcpy(&pwm.variant, variant, sizeof(pwm.variant));
for (i = 0; i < SAMSUNG_PWM_NUM; ++i) for (i = 0; i < SAMSUNG_PWM_NUM; ++i)
...@@ -444,10 +444,24 @@ static int __init samsung_pwm_alloc(struct device_node *np, ...@@ -444,10 +444,24 @@ static int __init samsung_pwm_alloc(struct device_node *np,
pwm.timerclk = of_clk_get_by_name(np, "timers"); pwm.timerclk = of_clk_get_by_name(np, "timers");
if (IS_ERR(pwm.timerclk)) { if (IS_ERR(pwm.timerclk)) {
pr_crit("failed to get timers clock for timer\n"); pr_crit("failed to get timers clock for timer\n");
return PTR_ERR(pwm.timerclk); ret = PTR_ERR(pwm.timerclk);
goto err_clk;
} }
return _samsung_pwm_clocksource_init(); ret = _samsung_pwm_clocksource_init();
if (ret)
goto err_clocksource;
return 0;
err_clocksource:
clk_put(pwm.timerclk);
pwm.timerclk = NULL;
err_clk:
iounmap(pwm.base);
pwm.base = NULL;
return ret;
} }
static const struct samsung_pwm_variant s3c24xx_variant = { static const struct samsung_pwm_variant s3c24xx_variant = {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment