diff options
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-sa1100.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/drivers/rtc/rtc-sa1100.c b/drivers/rtc/rtc-sa1100.c index df9180e80e3a..5ec5036df0bc 100644 --- a/drivers/rtc/rtc-sa1100.c +++ b/drivers/rtc/rtc-sa1100.c | |||
| @@ -108,9 +108,6 @@ static int sa1100_rtc_open(struct device *dev) | |||
| 108 | struct rtc_device *rtc = info->rtc; | 108 | struct rtc_device *rtc = info->rtc; |
| 109 | int ret; | 109 | int ret; |
| 110 | 110 | ||
| 111 | ret = clk_prepare_enable(info->clk); | ||
| 112 | if (ret) | ||
| 113 | goto fail_clk; | ||
| 114 | ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, 0, "rtc 1Hz", dev); | 111 | ret = request_irq(info->irq_1hz, sa1100_rtc_interrupt, 0, "rtc 1Hz", dev); |
| 115 | if (ret) { | 112 | if (ret) { |
| 116 | dev_err(dev, "IRQ %d already in use.\n", info->irq_1hz); | 113 | dev_err(dev, "IRQ %d already in use.\n", info->irq_1hz); |
| @@ -130,7 +127,6 @@ static int sa1100_rtc_open(struct device *dev) | |||
| 130 | free_irq(info->irq_1hz, dev); | 127 | free_irq(info->irq_1hz, dev); |
| 131 | fail_ui: | 128 | fail_ui: |
| 132 | clk_disable_unprepare(info->clk); | 129 | clk_disable_unprepare(info->clk); |
| 133 | fail_clk: | ||
| 134 | return ret; | 130 | return ret; |
| 135 | } | 131 | } |
| 136 | 132 | ||
| @@ -144,7 +140,6 @@ static void sa1100_rtc_release(struct device *dev) | |||
| 144 | 140 | ||
| 145 | free_irq(info->irq_alarm, dev); | 141 | free_irq(info->irq_alarm, dev); |
| 146 | free_irq(info->irq_1hz, dev); | 142 | free_irq(info->irq_1hz, dev); |
| 147 | clk_disable_unprepare(info->clk); | ||
| 148 | } | 143 | } |
| 149 | 144 | ||
| 150 | static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) | 145 | static int sa1100_rtc_alarm_irq_enable(struct device *dev, unsigned int enabled) |
| @@ -253,6 +248,9 @@ static int sa1100_rtc_probe(struct platform_device *pdev) | |||
| 253 | spin_lock_init(&info->lock); | 248 | spin_lock_init(&info->lock); |
| 254 | platform_set_drvdata(pdev, info); | 249 | platform_set_drvdata(pdev, info); |
| 255 | 250 | ||
| 251 | ret = clk_prepare_enable(info->clk); | ||
| 252 | if (ret) | ||
| 253 | goto err_enable_clk; | ||
| 256 | /* | 254 | /* |
| 257 | * According to the manual we should be able to let RTTR be zero | 255 | * According to the manual we should be able to let RTTR be zero |
| 258 | * and then a default diviser for a 32.768KHz clock is used. | 256 | * and then a default diviser for a 32.768KHz clock is used. |
| @@ -305,6 +303,8 @@ static int sa1100_rtc_probe(struct platform_device *pdev) | |||
| 305 | 303 | ||
| 306 | return 0; | 304 | return 0; |
| 307 | err_dev: | 305 | err_dev: |
| 306 | clk_disable_unprepare(info->clk); | ||
| 307 | err_enable_clk: | ||
| 308 | platform_set_drvdata(pdev, NULL); | 308 | platform_set_drvdata(pdev, NULL); |
| 309 | clk_put(info->clk); | 309 | clk_put(info->clk); |
| 310 | err_clk: | 310 | err_clk: |
| @@ -318,6 +318,7 @@ static int sa1100_rtc_remove(struct platform_device *pdev) | |||
| 318 | 318 | ||
| 319 | if (info) { | 319 | if (info) { |
| 320 | rtc_device_unregister(info->rtc); | 320 | rtc_device_unregister(info->rtc); |
| 321 | clk_disable_unprepare(info->clk); | ||
| 321 | clk_put(info->clk); | 322 | clk_put(info->clk); |
| 322 | platform_set_drvdata(pdev, NULL); | 323 | platform_set_drvdata(pdev, NULL); |
| 323 | kfree(info); | 324 | kfree(info); |
