rtc: return status from preinit function

This commit is contained in:
Miroslav Lichvar 2014-08-18 17:03:55 +02:00
parent 716d73d982
commit 7e1a699616
3 changed files with 8 additions and 5 deletions

2
rtc.c
View file

@ -42,7 +42,7 @@ static int driver_initialised = 0;
static struct { static struct {
int (*init)(void); int (*init)(void);
void (*fini)(void); void (*fini)(void);
void (*time_pre_init)(void); int (*time_pre_init)(void);
void (*time_init)(void (*after_hook)(void*), void *anything); void (*time_init)(void (*after_hook)(void*), void *anything);
void (*start_measurements)(void); void (*start_measurements)(void);
int (*write_parameters)(void); int (*write_parameters)(void);

View file

@ -973,7 +973,7 @@ RTC_Linux_WriteParameters(void)
etc in this case, since we have fewer requirements regarding the etc in this case, since we have fewer requirements regarding the
RTC behaviour than we do for the rest of the module. */ RTC behaviour than we do for the rest of the module. */
void int
RTC_Linux_TimePreInit(void) RTC_Linux_TimePreInit(void)
{ {
int fd, status; int fd, status;
@ -991,7 +991,7 @@ RTC_Linux_TimePreInit(void)
fd = open(CNF_GetRtcDevice(), O_RDONLY); fd = open(CNF_GetRtcDevice(), O_RDONLY);
if (fd < 0) { if (fd < 0) {
return; /* Can't open it, and won't be able to later */ return 0; /* Can't open it, and won't be able to later */
} }
/* Retry reading the rtc until both read attempts give the same sec value. /* Retry reading the rtc until both read attempts give the same sec value.
@ -1007,6 +1007,8 @@ RTC_Linux_TimePreInit(void)
/* Read system clock */ /* Read system clock */
LCL_ReadCookedTime(&old_sys_time, NULL); LCL_ReadCookedTime(&old_sys_time, NULL);
close(fd);
if (status >= 0) { if (status >= 0) {
/* Convert to seconds since 1970 */ /* Convert to seconds since 1970 */
rtc_tm.tm_sec = rtc_raw.tm_sec; rtc_tm.tm_sec = rtc_raw.tm_sec;
@ -1047,10 +1049,11 @@ RTC_Linux_TimePreInit(void)
} }
} else { } else {
LOG(LOGS_WARN, LOGF_RtcLinux, "Could not convert RTC reading to seconds since 1/1/1970"); LOG(LOGS_WARN, LOGF_RtcLinux, "Could not convert RTC reading to seconds since 1/1/1970");
return 0;
} }
} }
close(fd); return 1;
} }
/* ================================================== */ /* ================================================== */

View file

@ -30,7 +30,7 @@
extern int RTC_Linux_Initialise(void); extern int RTC_Linux_Initialise(void);
extern void RTC_Linux_Finalise(void); extern void RTC_Linux_Finalise(void);
extern void RTC_Linux_TimePreInit(void); extern int RTC_Linux_TimePreInit(void);
extern void RTC_Linux_TimeInit(void (*after_hook)(void *), void *anything); extern void RTC_Linux_TimeInit(void (*after_hook)(void *), void *anything);
extern void RTC_Linux_StartMeasurements(void); extern void RTC_Linux_StartMeasurements(void);