diff options
| author | Anton Vorontsov <avorontsov@ru.mvista.com> | 2009-01-06 17:42:11 -0500 |
|---|---|---|
| committer | Linus Torvalds <torvalds@linux-foundation.org> | 2009-01-06 18:59:23 -0500 |
| commit | 2fac6674ddf3164da42a76d62f8912073d629a30 (patch) | |
| tree | ffc7b69bbbe065ebe1e75be601c866467252f550 /drivers/rtc | |
| parent | d4afc76c0b59a37113e184004f8a9989cfc1ddd3 (diff) | |
rtc: bunch of drivers: fix 'no irq' case handing
This patch fixes a bunch of irq checking misuses. Most drivers were
getting irq via platform_get_irq(), which returns -ENXIO or r->start.
rtc-cmos.c is special. It is using PNP and platform bindings. Hopefully
nobody is using PNP IRQ 0 for RTC. So the changes should be safe.
rtc-sh.c is using platform_get_irq, but was storing a result into an
unsigned type, then was checking for < 0. This is fixed now.
Signed-off-by: Anton Vorontsov <avorontsov@ru.mvista.com>
Cc: Alessandro Zummo <a.zummo@towertech.it>
Acked-by: David Brownell <dbrownell@users.sourceforge.net>
Acked-by: Paul Mundt <lethal@linux-sh.org>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'drivers/rtc')
| -rw-r--r-- | drivers/rtc/rtc-at32ap700x.c | 4 | ||||
| -rw-r--r-- | drivers/rtc/rtc-cmos.c | 2 | ||||
| -rw-r--r-- | drivers/rtc/rtc-ds1511.c | 19 | ||||
| -rw-r--r-- | drivers/rtc/rtc-ds1553.c | 15 | ||||
| -rw-r--r-- | drivers/rtc/rtc-m48t59.c | 2 | ||||
| -rw-r--r-- | drivers/rtc/rtc-sh.c | 10 | ||||
| -rw-r--r-- | drivers/rtc/rtc-stk17ta8.c | 15 | ||||
| -rw-r--r-- | drivers/rtc/rtc-twl4030.c | 5 | ||||
| -rw-r--r-- | drivers/rtc/rtc-vr41xx.c | 8 |
9 files changed, 40 insertions, 40 deletions
diff --git a/drivers/rtc/rtc-at32ap700x.c b/drivers/rtc/rtc-at32ap700x.c index 90b9a6503e15..e1ec33e40e38 100644 --- a/drivers/rtc/rtc-at32ap700x.c +++ b/drivers/rtc/rtc-at32ap700x.c | |||
| @@ -205,7 +205,7 @@ static int __init at32_rtc_probe(struct platform_device *pdev) | |||
| 205 | { | 205 | { |
| 206 | struct resource *regs; | 206 | struct resource *regs; |
| 207 | struct rtc_at32ap700x *rtc; | 207 | struct rtc_at32ap700x *rtc; |
| 208 | int irq = -1; | 208 | int irq; |
| 209 | int ret; | 209 | int ret; |
| 210 | 210 | ||
| 211 | rtc = kzalloc(sizeof(struct rtc_at32ap700x), GFP_KERNEL); | 211 | rtc = kzalloc(sizeof(struct rtc_at32ap700x), GFP_KERNEL); |
| @@ -222,7 +222,7 @@ static int __init at32_rtc_probe(struct platform_device *pdev) | |||
| 222 | } | 222 | } |
| 223 | 223 | ||
| 224 | irq = platform_get_irq(pdev, 0); | 224 | irq = platform_get_irq(pdev, 0); |
| 225 | if (irq < 0) { | 225 | if (irq <= 0) { |
| 226 | dev_dbg(&pdev->dev, "could not get irq\n"); | 226 | dev_dbg(&pdev->dev, "could not get irq\n"); |
| 227 | ret = -ENXIO; | 227 | ret = -ENXIO; |
| 228 | goto out; | 228 | goto out; |
diff --git a/drivers/rtc/rtc-cmos.c b/drivers/rtc/rtc-cmos.c index d37bb86db5d0..cf98a5d8358e 100644 --- a/drivers/rtc/rtc-cmos.c +++ b/drivers/rtc/rtc-cmos.c | |||
| @@ -58,7 +58,7 @@ struct cmos_rtc { | |||
| 58 | }; | 58 | }; |
| 59 | 59 | ||
| 60 | /* both platform and pnp busses use negative numbers for invalid irqs */ | 60 | /* both platform and pnp busses use negative numbers for invalid irqs */ |
| 61 | #define is_valid_irq(n) ((n) >= 0) | 61 | #define is_valid_irq(n) ((n) > 0) |
| 62 | 62 | ||
| 63 | static const char driver_name[] = "rtc_cmos"; | 63 | static const char driver_name[] = "rtc_cmos"; |
| 64 | 64 | ||
diff --git a/drivers/rtc/rtc-ds1511.c b/drivers/rtc/rtc-ds1511.c index 25caada78398..23a07fe15a2c 100644 --- a/drivers/rtc/rtc-ds1511.c +++ b/drivers/rtc/rtc-ds1511.c | |||
| @@ -326,9 +326,9 @@ ds1511_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 326 | struct platform_device *pdev = to_platform_device(dev); | 326 | struct platform_device *pdev = to_platform_device(dev); |
| 327 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 327 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 328 | 328 | ||
| 329 | if (pdata->irq < 0) { | 329 | if (pdata->irq <= 0) |
| 330 | return -EINVAL; | 330 | return -EINVAL; |
| 331 | } | 331 | |
| 332 | pdata->alrm_mday = alrm->time.tm_mday; | 332 | pdata->alrm_mday = alrm->time.tm_mday; |
| 333 | pdata->alrm_hour = alrm->time.tm_hour; | 333 | pdata->alrm_hour = alrm->time.tm_hour; |
| 334 | pdata->alrm_min = alrm->time.tm_min; | 334 | pdata->alrm_min = alrm->time.tm_min; |
| @@ -346,9 +346,9 @@ ds1511_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 346 | struct platform_device *pdev = to_platform_device(dev); | 346 | struct platform_device *pdev = to_platform_device(dev); |
| 347 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 347 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 348 | 348 | ||
| 349 | if (pdata->irq < 0) { | 349 | if (pdata->irq <= 0) |
| 350 | return -EINVAL; | 350 | return -EINVAL; |
| 351 | } | 351 | |
| 352 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; | 352 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; |
| 353 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; | 353 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; |
| 354 | alrm->time.tm_min = pdata->alrm_min < 0 ? 0 : pdata->alrm_min; | 354 | alrm->time.tm_min = pdata->alrm_min < 0 ? 0 : pdata->alrm_min; |
| @@ -385,7 +385,7 @@ ds1511_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) | |||
| 385 | struct platform_device *pdev = to_platform_device(dev); | 385 | struct platform_device *pdev = to_platform_device(dev); |
| 386 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 386 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 387 | 387 | ||
| 388 | if (pdata->irq < 0) { | 388 | if (pdata->irq <= 0) { |
| 389 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ | 389 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ |
| 390 | } | 390 | } |
| 391 | switch (cmd) { | 391 | switch (cmd) { |
| @@ -503,7 +503,6 @@ ds1511_rtc_probe(struct platform_device *pdev) | |||
| 503 | if (!pdata) { | 503 | if (!pdata) { |
| 504 | return -ENOMEM; | 504 | return -ENOMEM; |
| 505 | } | 505 | } |
| 506 | pdata->irq = -1; | ||
| 507 | pdata->size = res->end - res->start + 1; | 506 | pdata->size = res->end - res->start + 1; |
| 508 | if (!request_mem_region(res->start, pdata->size, pdev->name)) { | 507 | if (!request_mem_region(res->start, pdata->size, pdev->name)) { |
| 509 | ret = -EBUSY; | 508 | ret = -EBUSY; |
| @@ -545,13 +544,13 @@ ds1511_rtc_probe(struct platform_device *pdev) | |||
| 545 | * if the platform has an interrupt in mind for this device, | 544 | * if the platform has an interrupt in mind for this device, |
| 546 | * then by all means, set it | 545 | * then by all means, set it |
| 547 | */ | 546 | */ |
| 548 | if (pdata->irq >= 0) { | 547 | if (pdata->irq > 0) { |
| 549 | rtc_read(RTC_CMD1); | 548 | rtc_read(RTC_CMD1); |
| 550 | if (request_irq(pdata->irq, ds1511_interrupt, | 549 | if (request_irq(pdata->irq, ds1511_interrupt, |
| 551 | IRQF_DISABLED | IRQF_SHARED, pdev->name, pdev) < 0) { | 550 | IRQF_DISABLED | IRQF_SHARED, pdev->name, pdev) < 0) { |
| 552 | 551 | ||
| 553 | dev_warn(&pdev->dev, "interrupt not available.\n"); | 552 | dev_warn(&pdev->dev, "interrupt not available.\n"); |
| 554 | pdata->irq = -1; | 553 | pdata->irq = 0; |
| 555 | } | 554 | } |
| 556 | } | 555 | } |
| 557 | 556 | ||
| @@ -572,7 +571,7 @@ ds1511_rtc_probe(struct platform_device *pdev) | |||
| 572 | if (pdata->rtc) { | 571 | if (pdata->rtc) { |
| 573 | rtc_device_unregister(pdata->rtc); | 572 | rtc_device_unregister(pdata->rtc); |
| 574 | } | 573 | } |
| 575 | if (pdata->irq >= 0) { | 574 | if (pdata->irq > 0) { |
| 576 | free_irq(pdata->irq, pdev); | 575 | free_irq(pdata->irq, pdev); |
| 577 | } | 576 | } |
| 578 | if (ds1511_base) { | 577 | if (ds1511_base) { |
| @@ -595,7 +594,7 @@ ds1511_rtc_remove(struct platform_device *pdev) | |||
| 595 | sysfs_remove_bin_file(&pdev->dev.kobj, &ds1511_nvram_attr); | 594 | sysfs_remove_bin_file(&pdev->dev.kobj, &ds1511_nvram_attr); |
| 596 | rtc_device_unregister(pdata->rtc); | 595 | rtc_device_unregister(pdata->rtc); |
| 597 | pdata->rtc = NULL; | 596 | pdata->rtc = NULL; |
| 598 | if (pdata->irq >= 0) { | 597 | if (pdata->irq > 0) { |
| 599 | /* | 598 | /* |
| 600 | * disable the alarm interrupt | 599 | * disable the alarm interrupt |
| 601 | */ | 600 | */ |
diff --git a/drivers/rtc/rtc-ds1553.c b/drivers/rtc/rtc-ds1553.c index b9475cd20210..38d472b63406 100644 --- a/drivers/rtc/rtc-ds1553.c +++ b/drivers/rtc/rtc-ds1553.c | |||
| @@ -162,7 +162,7 @@ static int ds1553_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 162 | struct platform_device *pdev = to_platform_device(dev); | 162 | struct platform_device *pdev = to_platform_device(dev); |
| 163 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 163 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 164 | 164 | ||
| 165 | if (pdata->irq < 0) | 165 | if (pdata->irq <= 0) |
| 166 | return -EINVAL; | 166 | return -EINVAL; |
| 167 | pdata->alrm_mday = alrm->time.tm_mday; | 167 | pdata->alrm_mday = alrm->time.tm_mday; |
| 168 | pdata->alrm_hour = alrm->time.tm_hour; | 168 | pdata->alrm_hour = alrm->time.tm_hour; |
| @@ -179,7 +179,7 @@ static int ds1553_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 179 | struct platform_device *pdev = to_platform_device(dev); | 179 | struct platform_device *pdev = to_platform_device(dev); |
| 180 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 180 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 181 | 181 | ||
| 182 | if (pdata->irq < 0) | 182 | if (pdata->irq <= 0) |
| 183 | return -EINVAL; | 183 | return -EINVAL; |
| 184 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; | 184 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; |
| 185 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; | 185 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; |
| @@ -213,7 +213,7 @@ static int ds1553_rtc_ioctl(struct device *dev, unsigned int cmd, | |||
| 213 | struct platform_device *pdev = to_platform_device(dev); | 213 | struct platform_device *pdev = to_platform_device(dev); |
| 214 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 214 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 215 | 215 | ||
| 216 | if (pdata->irq < 0) | 216 | if (pdata->irq <= 0) |
| 217 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ | 217 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ |
| 218 | switch (cmd) { | 218 | switch (cmd) { |
| 219 | case RTC_AIE_OFF: | 219 | case RTC_AIE_OFF: |
| @@ -301,7 +301,6 @@ static int __devinit ds1553_rtc_probe(struct platform_device *pdev) | |||
| 301 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); | 301 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); |
| 302 | if (!pdata) | 302 | if (!pdata) |
| 303 | return -ENOMEM; | 303 | return -ENOMEM; |
| 304 | pdata->irq = -1; | ||
| 305 | if (!request_mem_region(res->start, RTC_REG_SIZE, pdev->name)) { | 304 | if (!request_mem_region(res->start, RTC_REG_SIZE, pdev->name)) { |
| 306 | ret = -EBUSY; | 305 | ret = -EBUSY; |
| 307 | goto out; | 306 | goto out; |
| @@ -327,13 +326,13 @@ static int __devinit ds1553_rtc_probe(struct platform_device *pdev) | |||
| 327 | if (readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_BLF) | 326 | if (readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_BLF) |
| 328 | dev_warn(&pdev->dev, "voltage-low detected.\n"); | 327 | dev_warn(&pdev->dev, "voltage-low detected.\n"); |
| 329 | 328 | ||
| 330 | if (pdata->irq >= 0) { | 329 | if (pdata->irq > 0) { |
| 331 | writeb(0, ioaddr + RTC_INTERRUPTS); | 330 | writeb(0, ioaddr + RTC_INTERRUPTS); |
| 332 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, | 331 | if (request_irq(pdata->irq, ds1553_rtc_interrupt, |
| 333 | IRQF_DISABLED | IRQF_SHARED, | 332 | IRQF_DISABLED | IRQF_SHARED, |
| 334 | pdev->name, pdev) < 0) { | 333 | pdev->name, pdev) < 0) { |
| 335 | dev_warn(&pdev->dev, "interrupt not available.\n"); | 334 | dev_warn(&pdev->dev, "interrupt not available.\n"); |
| 336 | pdata->irq = -1; | 335 | pdata->irq = 0; |
| 337 | } | 336 | } |
| 338 | } | 337 | } |
| 339 | 338 | ||
| @@ -353,7 +352,7 @@ static int __devinit ds1553_rtc_probe(struct platform_device *pdev) | |||
| 353 | out: | 352 | out: |
| 354 | if (pdata->rtc) | 353 | if (pdata->rtc) |
| 355 | rtc_device_unregister(pdata->rtc); | 354 | rtc_device_unregister(pdata->rtc); |
| 356 | if (pdata->irq >= 0) | 355 | if (pdata->irq > 0) |
| 357 | free_irq(pdata->irq, pdev); | 356 | free_irq(pdata->irq, pdev); |
| 358 | if (ioaddr) | 357 | if (ioaddr) |
| 359 | iounmap(ioaddr); | 358 | iounmap(ioaddr); |
| @@ -369,7 +368,7 @@ static int __devexit ds1553_rtc_remove(struct platform_device *pdev) | |||
| 369 | 368 | ||
| 370 | sysfs_remove_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr); | 369 | sysfs_remove_bin_file(&pdev->dev.kobj, &ds1553_nvram_attr); |
| 371 | rtc_device_unregister(pdata->rtc); | 370 | rtc_device_unregister(pdata->rtc); |
| 372 | if (pdata->irq >= 0) { | 371 | if (pdata->irq > 0) { |
| 373 | writeb(0, pdata->ioaddr + RTC_INTERRUPTS); | 372 | writeb(0, pdata->ioaddr + RTC_INTERRUPTS); |
| 374 | free_irq(pdata->irq, pdev); | 373 | free_irq(pdata->irq, pdev); |
| 375 | } | 374 | } |
diff --git a/drivers/rtc/rtc-m48t59.c b/drivers/rtc/rtc-m48t59.c index 43afb7ab5289..33921a6b1707 100644 --- a/drivers/rtc/rtc-m48t59.c +++ b/drivers/rtc/rtc-m48t59.c | |||
| @@ -450,7 +450,7 @@ static int __devinit m48t59_rtc_probe(struct platform_device *pdev) | |||
| 450 | * the mode without IRQ. | 450 | * the mode without IRQ. |
| 451 | */ | 451 | */ |
| 452 | m48t59->irq = platform_get_irq(pdev, 0); | 452 | m48t59->irq = platform_get_irq(pdev, 0); |
| 453 | if (m48t59->irq < 0) | 453 | if (m48t59->irq <= 0) |
| 454 | m48t59->irq = NO_IRQ; | 454 | m48t59->irq = NO_IRQ; |
| 455 | 455 | ||
| 456 | if (m48t59->irq != NO_IRQ) { | 456 | if (m48t59->irq != NO_IRQ) { |
diff --git a/drivers/rtc/rtc-sh.c b/drivers/rtc/rtc-sh.c index aaf9d6a337cc..5ed66acf8ca5 100644 --- a/drivers/rtc/rtc-sh.c +++ b/drivers/rtc/rtc-sh.c | |||
| @@ -89,7 +89,9 @@ struct sh_rtc { | |||
| 89 | void __iomem *regbase; | 89 | void __iomem *regbase; |
| 90 | unsigned long regsize; | 90 | unsigned long regsize; |
| 91 | struct resource *res; | 91 | struct resource *res; |
| 92 | unsigned int alarm_irq, periodic_irq, carry_irq; | 92 | int alarm_irq; |
| 93 | int periodic_irq; | ||
| 94 | int carry_irq; | ||
| 93 | struct rtc_device *rtc_dev; | 95 | struct rtc_device *rtc_dev; |
| 94 | spinlock_t lock; | 96 | spinlock_t lock; |
| 95 | unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */ | 97 | unsigned long capabilities; /* See asm-sh/rtc.h for cap bits */ |
| @@ -578,7 +580,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
| 578 | 580 | ||
| 579 | /* get periodic/carry/alarm irqs */ | 581 | /* get periodic/carry/alarm irqs */ |
| 580 | ret = platform_get_irq(pdev, 0); | 582 | ret = platform_get_irq(pdev, 0); |
| 581 | if (unlikely(ret < 0)) { | 583 | if (unlikely(ret <= 0)) { |
| 582 | ret = -ENOENT; | 584 | ret = -ENOENT; |
| 583 | dev_err(&pdev->dev, "No IRQ for period\n"); | 585 | dev_err(&pdev->dev, "No IRQ for period\n"); |
| 584 | goto err_badres; | 586 | goto err_badres; |
| @@ -586,7 +588,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
| 586 | rtc->periodic_irq = ret; | 588 | rtc->periodic_irq = ret; |
| 587 | 589 | ||
| 588 | ret = platform_get_irq(pdev, 1); | 590 | ret = platform_get_irq(pdev, 1); |
| 589 | if (unlikely(ret < 0)) { | 591 | if (unlikely(ret <= 0)) { |
| 590 | ret = -ENOENT; | 592 | ret = -ENOENT; |
| 591 | dev_err(&pdev->dev, "No IRQ for carry\n"); | 593 | dev_err(&pdev->dev, "No IRQ for carry\n"); |
| 592 | goto err_badres; | 594 | goto err_badres; |
| @@ -594,7 +596,7 @@ static int __devinit sh_rtc_probe(struct platform_device *pdev) | |||
| 594 | rtc->carry_irq = ret; | 596 | rtc->carry_irq = ret; |
| 595 | 597 | ||
| 596 | ret = platform_get_irq(pdev, 2); | 598 | ret = platform_get_irq(pdev, 2); |
| 597 | if (unlikely(ret < 0)) { | 599 | if (unlikely(ret <= 0)) { |
| 598 | ret = -ENOENT; | 600 | ret = -ENOENT; |
| 599 | dev_err(&pdev->dev, "No IRQ for alarm\n"); | 601 | dev_err(&pdev->dev, "No IRQ for alarm\n"); |
| 600 | goto err_badres; | 602 | goto err_badres; |
diff --git a/drivers/rtc/rtc-stk17ta8.c b/drivers/rtc/rtc-stk17ta8.c index f4cd46e15af9..dc0b6224ad9b 100644 --- a/drivers/rtc/rtc-stk17ta8.c +++ b/drivers/rtc/rtc-stk17ta8.c | |||
| @@ -170,7 +170,7 @@ static int stk17ta8_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 170 | struct platform_device *pdev = to_platform_device(dev); | 170 | struct platform_device *pdev = to_platform_device(dev); |
| 171 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 171 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 172 | 172 | ||
| 173 | if (pdata->irq < 0) | 173 | if (pdata->irq <= 0) |
| 174 | return -EINVAL; | 174 | return -EINVAL; |
| 175 | pdata->alrm_mday = alrm->time.tm_mday; | 175 | pdata->alrm_mday = alrm->time.tm_mday; |
| 176 | pdata->alrm_hour = alrm->time.tm_hour; | 176 | pdata->alrm_hour = alrm->time.tm_hour; |
| @@ -187,7 +187,7 @@ static int stk17ta8_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alrm) | |||
| 187 | struct platform_device *pdev = to_platform_device(dev); | 187 | struct platform_device *pdev = to_platform_device(dev); |
| 188 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 188 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 189 | 189 | ||
| 190 | if (pdata->irq < 0) | 190 | if (pdata->irq <= 0) |
| 191 | return -EINVAL; | 191 | return -EINVAL; |
| 192 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; | 192 | alrm->time.tm_mday = pdata->alrm_mday < 0 ? 0 : pdata->alrm_mday; |
| 193 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; | 193 | alrm->time.tm_hour = pdata->alrm_hour < 0 ? 0 : pdata->alrm_hour; |
| @@ -221,7 +221,7 @@ static int stk17ta8_rtc_ioctl(struct device *dev, unsigned int cmd, | |||
| 221 | struct platform_device *pdev = to_platform_device(dev); | 221 | struct platform_device *pdev = to_platform_device(dev); |
| 222 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); | 222 | struct rtc_plat_data *pdata = platform_get_drvdata(pdev); |
| 223 | 223 | ||
| 224 | if (pdata->irq < 0) | 224 | if (pdata->irq <= 0) |
| 225 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ | 225 | return -ENOIOCTLCMD; /* fall back into rtc-dev's emulation */ |
| 226 | switch (cmd) { | 226 | switch (cmd) { |
| 227 | case RTC_AIE_OFF: | 227 | case RTC_AIE_OFF: |
| @@ -303,7 +303,6 @@ static int __init stk17ta8_rtc_probe(struct platform_device *pdev) | |||
| 303 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); | 303 | pdata = kzalloc(sizeof(*pdata), GFP_KERNEL); |
| 304 | if (!pdata) | 304 | if (!pdata) |
| 305 | return -ENOMEM; | 305 | return -ENOMEM; |
| 306 | pdata->irq = -1; | ||
| 307 | if (!request_mem_region(res->start, RTC_REG_SIZE, pdev->name)) { | 306 | if (!request_mem_region(res->start, RTC_REG_SIZE, pdev->name)) { |
| 308 | ret = -EBUSY; | 307 | ret = -EBUSY; |
| 309 | goto out; | 308 | goto out; |
| @@ -329,13 +328,13 @@ static int __init stk17ta8_rtc_probe(struct platform_device *pdev) | |||
| 329 | if (readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_PF) | 328 | if (readb(ioaddr + RTC_FLAGS) & RTC_FLAGS_PF) |
| 330 | dev_warn(&pdev->dev, "voltage-low detected.\n"); | 329 | dev_warn(&pdev->dev, "voltage-low detected.\n"); |
| 331 | 330 | ||
| 332 | if (pdata->irq >= 0) { | 331 | if (pdata->irq > 0) { |
| 333 | writeb(0, ioaddr + RTC_INTERRUPTS); | 332 | writeb(0, ioaddr + RTC_INTERRUPTS); |
| 334 | if (request_irq(pdata->irq, stk17ta8_rtc_interrupt, | 333 | if (request_irq(pdata->irq, stk17ta8_rtc_interrupt, |
| 335 | IRQF_DISABLED | IRQF_SHARED, | 334 | IRQF_DISABLED | IRQF_SHARED, |
| 336 | pdev->name, pdev) < 0) { | 335 | pdev->name, pdev) < 0) { |
| 337 | dev_warn(&pdev->dev, "interrupt not available.\n"); | 336 | dev_warn(&pdev->dev, "interrupt not available.\n"); |
| 338 | pdata->irq = -1; | 337 | pdata->irq = 0; |
| 339 | } | 338 | } |
| 340 | } | 339 | } |
| 341 | 340 | ||
| @@ -355,7 +354,7 @@ static int __init stk17ta8_rtc_probe(struct platform_device *pdev) | |||
| 355 | out: | 354 | out: |
| 356 | if (pdata->rtc) | 355 | if (pdata->rtc) |
| 357 | rtc_device_unregister(pdata->rtc); | 356 | rtc_device_unregister(pdata->rtc); |
| 358 | if (pdata->irq >= 0) | 357 | if (pdata->irq > 0) |
| 359 | free_irq(pdata->irq, pdev); | 358 | free_irq(pdata->irq, pdev); |
| 360 | if (ioaddr) | 359 | if (ioaddr) |
| 361 | iounmap(ioaddr); | 360 | iounmap(ioaddr); |
| @@ -371,7 +370,7 @@ static int __devexit stk17ta8_rtc_remove(struct platform_device *pdev) | |||
| 371 | 370 | ||
| 372 | sysfs_remove_bin_file(&pdev->dev.kobj, &stk17ta8_nvram_attr); | 371 | sysfs_remove_bin_file(&pdev->dev.kobj, &stk17ta8_nvram_attr); |
| 373 | rtc_device_unregister(pdata->rtc); | 372 | rtc_device_unregister(pdata->rtc); |
| 374 | if (pdata->irq >= 0) { | 373 | if (pdata->irq > 0) { |
| 375 | writeb(0, pdata->ioaddr + RTC_INTERRUPTS); | 374 | writeb(0, pdata->ioaddr + RTC_INTERRUPTS); |
| 376 | free_irq(pdata->irq, pdev); | 375 | free_irq(pdata->irq, pdev); |
| 377 | } | 376 | } |
diff --git a/drivers/rtc/rtc-twl4030.c b/drivers/rtc/rtc-twl4030.c index 01d8da9afdc8..8ce5f74ee45b 100644 --- a/drivers/rtc/rtc-twl4030.c +++ b/drivers/rtc/rtc-twl4030.c | |||
| @@ -19,6 +19,7 @@ | |||
| 19 | */ | 19 | */ |
| 20 | 20 | ||
| 21 | #include <linux/kernel.h> | 21 | #include <linux/kernel.h> |
| 22 | #include <linux/errno.h> | ||
| 22 | #include <linux/init.h> | 23 | #include <linux/init.h> |
| 23 | #include <linux/module.h> | 24 | #include <linux/module.h> |
| 24 | #include <linux/types.h> | 25 | #include <linux/types.h> |
| @@ -415,8 +416,8 @@ static int __devinit twl4030_rtc_probe(struct platform_device *pdev) | |||
| 415 | int irq = platform_get_irq(pdev, 0); | 416 | int irq = platform_get_irq(pdev, 0); |
| 416 | u8 rd_reg; | 417 | u8 rd_reg; |
| 417 | 418 | ||
| 418 | if (irq < 0) | 419 | if (irq <= 0) |
| 419 | return irq; | 420 | return -EINVAL; |
| 420 | 421 | ||
| 421 | rtc = rtc_device_register(pdev->name, | 422 | rtc = rtc_device_register(pdev->name, |
| 422 | &pdev->dev, &twl4030_rtc_ops, THIS_MODULE); | 423 | &pdev->dev, &twl4030_rtc_ops, THIS_MODULE); |
diff --git a/drivers/rtc/rtc-vr41xx.c b/drivers/rtc/rtc-vr41xx.c index 834dcc6d785f..57b7aac092a3 100644 --- a/drivers/rtc/rtc-vr41xx.c +++ b/drivers/rtc/rtc-vr41xx.c | |||
| @@ -84,8 +84,8 @@ static DEFINE_SPINLOCK(rtc_lock); | |||
| 84 | static char rtc_name[] = "RTC"; | 84 | static char rtc_name[] = "RTC"; |
| 85 | static unsigned long periodic_count; | 85 | static unsigned long periodic_count; |
| 86 | static unsigned int alarm_enabled; | 86 | static unsigned int alarm_enabled; |
| 87 | static int aie_irq = -1; | 87 | static int aie_irq; |
| 88 | static int pie_irq = -1; | 88 | static int pie_irq; |
| 89 | 89 | ||
| 90 | static inline unsigned long read_elapsed_second(void) | 90 | static inline unsigned long read_elapsed_second(void) |
| 91 | { | 91 | { |
| @@ -360,7 +360,7 @@ static int __devinit rtc_probe(struct platform_device *pdev) | |||
| 360 | spin_unlock_irq(&rtc_lock); | 360 | spin_unlock_irq(&rtc_lock); |
| 361 | 361 | ||
| 362 | aie_irq = platform_get_irq(pdev, 0); | 362 | aie_irq = platform_get_irq(pdev, 0); |
| 363 | if (aie_irq < 0 || aie_irq >= nr_irqs) { | 363 | if (aie_irq <= 0) { |
| 364 | retval = -EBUSY; | 364 | retval = -EBUSY; |
| 365 | goto err_device_unregister; | 365 | goto err_device_unregister; |
| 366 | } | 366 | } |
| @@ -371,7 +371,7 @@ static int __devinit rtc_probe(struct platform_device *pdev) | |||
| 371 | goto err_device_unregister; | 371 | goto err_device_unregister; |
| 372 | 372 | ||
| 373 | pie_irq = platform_get_irq(pdev, 1); | 373 | pie_irq = platform_get_irq(pdev, 1); |
| 374 | if (pie_irq < 0 || pie_irq >= nr_irqs) | 374 | if (pie_irq <= 0) |
| 375 | goto err_free_irq; | 375 | goto err_free_irq; |
| 376 | 376 | ||
| 377 | retval = request_irq(pie_irq, rtclong1_interrupt, IRQF_DISABLED, | 377 | retval = request_irq(pie_irq, rtclong1_interrupt, IRQF_DISABLED, |
