X-Git-Url: https://err.no/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=Documentation%2Frtc.txt;h=c931d613f6410cb7dce6732ac1f68ddaf6a3ee9d;hb=b5457b7bdf284d683880163a4c59fdde2f84325a;hp=7cf1ec5bcdd3b37854ec34ebc085cd3be4532ee7;hpb=6bfe5c9d6f4dcaa998f67e691359cf7b1c4b443d;p=linux-2.6 diff --git a/Documentation/rtc.txt b/Documentation/rtc.txt index 7cf1ec5bcd..c931d613f6 100644 --- a/Documentation/rtc.txt +++ b/Documentation/rtc.txt @@ -147,9 +147,9 @@ RTC class framework, but can't be supported by the older driver. * RTC_AIE_ON, RTC_AIE_OFF, RTC_ALM_SET, RTC_ALM_READ ... when the RTC is connected to an IRQ line, it can often issue an alarm IRQ up to - 24 hours in the future. + 24 hours in the future. (Use RTC_WKALM_* by preference.) - * RTC_WKALM_SET, RTC_WKALM_READ ... RTCs that can issue alarms beyond + * RTC_WKALM_SET, RTC_WKALM_RD ... RTCs that can issue alarms beyond the next 24 hours use a slightly more powerful API, which supports setting the longer alarm time and enabling its IRQ using a single request (using the same model as EFI firmware). @@ -167,6 +167,25 @@ Linux out of a low power sleep state (or hibernation) back to a fully operational state. For example, a system could enter a deep power saving state until it's time to execute some scheduled tasks. +Note that many of these ioctls need not actually be implemented by your +driver. The common rtc-dev interface handles many of these nicely if your +driver returns ENOIOCTLCMD. Some common examples: + + * RTC_RD_TIME, RTC_SET_TIME: the read_time/set_time functions will be + called with appropriate values. + + * RTC_ALM_SET, RTC_ALM_READ, RTC_WKALM_SET, RTC_WKALM_RD: the + set_alarm/read_alarm functions will be called. + + * RTC_IRQP_SET, RTC_IRQP_READ: the irq_set_freq function will be called + to set the frequency while the framework will handle the read for you + since the frequency is stored in the irq_freq member of the rtc_device + structure. Also make sure you set the max_user_freq member in your + initialization routines so the framework can sanity check the user + input for you. + +If all else fails, check out the rtc-test.c driver! + -------------------- 8< ---------------- 8< ----------------------------- @@ -237,7 +256,7 @@ int main(int argc, char **argv) "\n...Update IRQs not supported.\n"); goto test_READ; } - perror("ioctl"); + perror("RTC_UIE_ON ioctl"); exit(errno); } @@ -284,7 +303,7 @@ int main(int argc, char **argv) /* Turn off update interrupts */ retval = ioctl(fd, RTC_UIE_OFF, 0); if (retval == -1) { - perror("ioctl"); + perror("RTC_UIE_OFF ioctl"); exit(errno); } @@ -292,7 +311,7 @@ test_READ: /* Read the RTC time/date */ retval = ioctl(fd, RTC_RD_TIME, &rtc_tm); if (retval == -1) { - perror("ioctl"); + perror("RTC_RD_TIME ioctl"); exit(errno); } @@ -320,14 +339,14 @@ test_READ: "\n...Alarm IRQs not supported.\n"); goto test_PIE; } - perror("ioctl"); + perror("RTC_ALM_SET ioctl"); exit(errno); } /* Read the current alarm settings */ retval = ioctl(fd, RTC_ALM_READ, &rtc_tm); if (retval == -1) { - perror("ioctl"); + perror("RTC_ALM_READ ioctl"); exit(errno); } @@ -337,7 +356,7 @@ test_READ: /* Enable alarm interrupts */ retval = ioctl(fd, RTC_AIE_ON, 0); if (retval == -1) { - perror("ioctl"); + perror("RTC_AIE_ON ioctl"); exit(errno); } @@ -355,7 +374,7 @@ test_READ: /* Disable alarm interrupts */ retval = ioctl(fd, RTC_AIE_OFF, 0); if (retval == -1) { - perror("ioctl"); + perror("RTC_AIE_OFF ioctl"); exit(errno); } @@ -366,9 +385,9 @@ test_PIE: /* not all RTCs support periodic IRQs */ if (errno == ENOTTY) { fprintf(stderr, "\nNo periodic IRQ support\n"); - return 0; + goto done; } - perror("ioctl"); + perror("RTC_IRQP_READ ioctl"); exit(errno); } fprintf(stderr, "\nPeriodic IRQ rate is %ldHz.\n", tmp); @@ -387,7 +406,7 @@ test_PIE: "\n...Periodic IRQ rate is fixed\n"); goto done; } - perror("ioctl"); + perror("RTC_IRQP_SET ioctl"); exit(errno); } @@ -397,7 +416,7 @@ test_PIE: /* Enable periodic interrupts */ retval = ioctl(fd, RTC_PIE_ON, 0); if (retval == -1) { - perror("ioctl"); + perror("RTC_PIE_ON ioctl"); exit(errno); } @@ -416,7 +435,7 @@ test_PIE: /* Disable periodic interrupts */ retval = ioctl(fd, RTC_PIE_OFF, 0); if (retval == -1) { - perror("ioctl"); + perror("RTC_PIE_OFF ioctl"); exit(errno); } }