diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/rtc/rtc-vt8500.c | 15 |
1 files changed, 5 insertions, 10 deletions
diff --git a/drivers/rtc/rtc-vt8500.c b/drivers/rtc/rtc-vt8500.c index 07bf19364a74..14e2d8cfcc83 100644 --- a/drivers/rtc/rtc-vt8500.c +++ b/drivers/rtc/rtc-vt8500.c | |||
@@ -210,7 +210,8 @@ static int __devinit vt8500_rtc_probe(struct platform_device *pdev) | |||
210 | struct vt8500_rtc *vt8500_rtc; | 210 | struct vt8500_rtc *vt8500_rtc; |
211 | int ret; | 211 | int ret; |
212 | 212 | ||
213 | vt8500_rtc = kzalloc(sizeof(struct vt8500_rtc), GFP_KERNEL); | 213 | vt8500_rtc = devm_kzalloc(&pdev->dev, |
214 | sizeof(struct vt8500_rtc), GFP_KERNEL); | ||
214 | if (!vt8500_rtc) | 215 | if (!vt8500_rtc) |
215 | return -ENOMEM; | 216 | return -ENOMEM; |
216 | 217 | ||
@@ -220,15 +221,13 @@ static int __devinit vt8500_rtc_probe(struct platform_device *pdev) | |||
220 | vt8500_rtc->res = platform_get_resource(pdev, IORESOURCE_MEM, 0); | 221 | vt8500_rtc->res = platform_get_resource(pdev, IORESOURCE_MEM, 0); |
221 | if (!vt8500_rtc->res) { | 222 | if (!vt8500_rtc->res) { |
222 | dev_err(&pdev->dev, "No I/O memory resource defined\n"); | 223 | dev_err(&pdev->dev, "No I/O memory resource defined\n"); |
223 | ret = -ENXIO; | 224 | return -ENXIO; |
224 | goto err_free; | ||
225 | } | 225 | } |
226 | 226 | ||
227 | vt8500_rtc->irq_alarm = platform_get_irq(pdev, 0); | 227 | vt8500_rtc->irq_alarm = platform_get_irq(pdev, 0); |
228 | if (vt8500_rtc->irq_alarm < 0) { | 228 | if (vt8500_rtc->irq_alarm < 0) { |
229 | dev_err(&pdev->dev, "No alarm IRQ resource defined\n"); | 229 | dev_err(&pdev->dev, "No alarm IRQ resource defined\n"); |
230 | ret = -ENXIO; | 230 | return -ENXIO; |
231 | goto err_free; | ||
232 | } | 231 | } |
233 | 232 | ||
234 | vt8500_rtc->res = request_mem_region(vt8500_rtc->res->start, | 233 | vt8500_rtc->res = request_mem_region(vt8500_rtc->res->start, |
@@ -236,8 +235,7 @@ static int __devinit vt8500_rtc_probe(struct platform_device *pdev) | |||
236 | "vt8500-rtc"); | 235 | "vt8500-rtc"); |
237 | if (vt8500_rtc->res == NULL) { | 236 | if (vt8500_rtc->res == NULL) { |
238 | dev_err(&pdev->dev, "failed to request I/O memory\n"); | 237 | dev_err(&pdev->dev, "failed to request I/O memory\n"); |
239 | ret = -EBUSY; | 238 | return -EBUSY; |
240 | goto err_free; | ||
241 | } | 239 | } |
242 | 240 | ||
243 | vt8500_rtc->regbase = ioremap(vt8500_rtc->res->start, | 241 | vt8500_rtc->regbase = ioremap(vt8500_rtc->res->start, |
@@ -278,8 +276,6 @@ err_unmap: | |||
278 | err_release: | 276 | err_release: |
279 | release_mem_region(vt8500_rtc->res->start, | 277 | release_mem_region(vt8500_rtc->res->start, |
280 | resource_size(vt8500_rtc->res)); | 278 | resource_size(vt8500_rtc->res)); |
281 | err_free: | ||
282 | kfree(vt8500_rtc); | ||
283 | return ret; | 279 | return ret; |
284 | } | 280 | } |
285 | 281 | ||
@@ -297,7 +293,6 @@ static int __devexit vt8500_rtc_remove(struct platform_device *pdev) | |||
297 | release_mem_region(vt8500_rtc->res->start, | 293 | release_mem_region(vt8500_rtc->res->start, |
298 | resource_size(vt8500_rtc->res)); | 294 | resource_size(vt8500_rtc->res)); |
299 | 295 | ||
300 | kfree(vt8500_rtc); | ||
301 | platform_set_drvdata(pdev, NULL); | 296 | platform_set_drvdata(pdev, NULL); |
302 | 297 | ||
303 | return 0; | 298 | return 0; |