diff options
Diffstat (limited to 'drivers/char/rtc.c')
-rw-r--r-- | drivers/char/rtc.c | 8 |
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/char/rtc.c b/drivers/char/rtc.c index 66a7385bc34a..2eb53bea1866 100644 --- a/drivers/char/rtc.c +++ b/drivers/char/rtc.c | |||
@@ -958,6 +958,7 @@ static int __init rtc_init(void) | |||
958 | } | 958 | } |
959 | } | 959 | } |
960 | #endif | 960 | #endif |
961 | rtc_has_irq = 0; | ||
961 | printk(KERN_ERR "rtc_init: no PC rtc found\n"); | 962 | printk(KERN_ERR "rtc_init: no PC rtc found\n"); |
962 | return -EIO; | 963 | return -EIO; |
963 | 964 | ||
@@ -972,6 +973,7 @@ found: | |||
972 | * PCI Slot 2 INTA# (and some INTx# in Slot 1). | 973 | * PCI Slot 2 INTA# (and some INTx# in Slot 1). |
973 | */ | 974 | */ |
974 | if (request_irq(rtc_irq, rtc_interrupt, IRQF_SHARED, "rtc", (void *)&rtc_port)) { | 975 | if (request_irq(rtc_irq, rtc_interrupt, IRQF_SHARED, "rtc", (void *)&rtc_port)) { |
976 | rtc_has_irq = 0; | ||
975 | printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq); | 977 | printk(KERN_ERR "rtc: cannot register IRQ %d\n", rtc_irq); |
976 | return -EIO; | 978 | return -EIO; |
977 | } | 979 | } |
@@ -982,6 +984,9 @@ no_irq: | |||
982 | else | 984 | else |
983 | r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc"); | 985 | r = request_mem_region(RTC_PORT(0), RTC_IO_EXTENT, "rtc"); |
984 | if (!r) { | 986 | if (!r) { |
987 | #ifdef RTC_IRQ | ||
988 | rtc_has_irq = 0; | ||
989 | #endif | ||
985 | printk(KERN_ERR "rtc: I/O resource %lx is not free.\n", | 990 | printk(KERN_ERR "rtc: I/O resource %lx is not free.\n", |
986 | (long)(RTC_PORT(0))); | 991 | (long)(RTC_PORT(0))); |
987 | return -EIO; | 992 | return -EIO; |
@@ -996,6 +1001,7 @@ no_irq: | |||
996 | 1001 | ||
997 | if(request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED, "rtc", NULL)) { | 1002 | if(request_irq(RTC_IRQ, rtc_int_handler_ptr, IRQF_DISABLED, "rtc", NULL)) { |
998 | /* Yeah right, seeing as irq 8 doesn't even hit the bus. */ | 1003 | /* Yeah right, seeing as irq 8 doesn't even hit the bus. */ |
1004 | rtc_has_irq = 0; | ||
999 | printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ); | 1005 | printk(KERN_ERR "rtc: IRQ %d is not free.\n", RTC_IRQ); |
1000 | if (RTC_IOMAPPED) | 1006 | if (RTC_IOMAPPED) |
1001 | release_region(RTC_PORT(0), RTC_IO_EXTENT); | 1007 | release_region(RTC_PORT(0), RTC_IO_EXTENT); |
@@ -1012,6 +1018,7 @@ no_irq: | |||
1012 | if (misc_register(&rtc_dev)) { | 1018 | if (misc_register(&rtc_dev)) { |
1013 | #ifdef RTC_IRQ | 1019 | #ifdef RTC_IRQ |
1014 | free_irq(RTC_IRQ, NULL); | 1020 | free_irq(RTC_IRQ, NULL); |
1021 | rtc_has_irq = 0; | ||
1015 | #endif | 1022 | #endif |
1016 | release_region(RTC_PORT(0), RTC_IO_EXTENT); | 1023 | release_region(RTC_PORT(0), RTC_IO_EXTENT); |
1017 | return -ENODEV; | 1024 | return -ENODEV; |
@@ -1021,6 +1028,7 @@ no_irq: | |||
1021 | if (!ent) { | 1028 | if (!ent) { |
1022 | #ifdef RTC_IRQ | 1029 | #ifdef RTC_IRQ |
1023 | free_irq(RTC_IRQ, NULL); | 1030 | free_irq(RTC_IRQ, NULL); |
1031 | rtc_has_irq = 0; | ||
1024 | #endif | 1032 | #endif |
1025 | release_region(RTC_PORT(0), RTC_IO_EXTENT); | 1033 | release_region(RTC_PORT(0), RTC_IO_EXTENT); |
1026 | misc_deregister(&rtc_dev); | 1034 | misc_deregister(&rtc_dev); |