we need to pass back the rtc device name that was actually used so that we can turn around and check its sysfs status
This commit is contained in:
parent
ea915363e7
commit
977bc6a137
@ -10,7 +10,7 @@
|
|||||||
#include "libbb.h"
|
#include "libbb.h"
|
||||||
|
|
||||||
extern int rtc_adjtime_is_utc(void);
|
extern int rtc_adjtime_is_utc(void);
|
||||||
extern int rtc_xopen(const char *default_rtc, int flags);
|
extern int rtc_xopen(const char **default_rtc, int flags);
|
||||||
extern time_t rtc_read_time(int fd, int utc);
|
extern time_t rtc_read_time(int fd, int utc);
|
||||||
|
|
||||||
|
|
||||||
|
14
libbb/rtc.c
14
libbb/rtc.c
@ -40,21 +40,23 @@ int rtc_adjtime_is_utc(void)
|
|||||||
return utc;
|
return utc;
|
||||||
}
|
}
|
||||||
|
|
||||||
int rtc_xopen(const char *default_rtc, int flags)
|
int rtc_xopen(const char **default_rtc, int flags)
|
||||||
{
|
{
|
||||||
int rtc;
|
int rtc;
|
||||||
|
|
||||||
if (!default_rtc) {
|
if (!*default_rtc) {
|
||||||
rtc = open("/dev/rtc", flags);
|
*default_rtc = "/dev/rtc";
|
||||||
|
rtc = open(*default_rtc, flags);
|
||||||
if (rtc >= 0)
|
if (rtc >= 0)
|
||||||
return rtc;
|
return rtc;
|
||||||
rtc = open("/dev/rtc0", flags);
|
*default_rtc = "/dev/rtc0";
|
||||||
|
rtc = open(*default_rtc, flags);
|
||||||
if (rtc >= 0)
|
if (rtc >= 0)
|
||||||
return rtc;
|
return rtc;
|
||||||
default_rtc = "/dev/misc/rtc";
|
*default_rtc = "/dev/misc/rtc";
|
||||||
}
|
}
|
||||||
|
|
||||||
return xopen(default_rtc, flags);
|
return xopen(*default_rtc, flags);
|
||||||
}
|
}
|
||||||
|
|
||||||
time_t rtc_read_time(int fd, int utc)
|
time_t rtc_read_time(int fd, int utc)
|
||||||
|
@ -25,7 +25,7 @@ static time_t read_rtc(int utc)
|
|||||||
time_t ret;
|
time_t ret;
|
||||||
int fd;
|
int fd;
|
||||||
|
|
||||||
fd = rtc_xopen(rtcname, O_RDONLY);
|
fd = rtc_xopen(&rtcname, O_RDONLY);
|
||||||
ret = rtc_read_time(fd, utc);
|
ret = rtc_read_time(fd, utc);
|
||||||
close(fd);
|
close(fd);
|
||||||
|
|
||||||
@ -35,7 +35,7 @@ static time_t read_rtc(int utc)
|
|||||||
static void write_rtc(time_t t, int utc)
|
static void write_rtc(time_t t, int utc)
|
||||||
{
|
{
|
||||||
struct tm tm;
|
struct tm tm;
|
||||||
int rtc = rtc_xopen(rtcname, O_WRONLY);
|
int rtc = rtc_xopen(&rtcname, O_WRONLY);
|
||||||
|
|
||||||
tm = *(utc ? gmtime(&t) : localtime(&t));
|
tm = *(utc ? gmtime(&t) : localtime(&t));
|
||||||
tm.tm_isdst = 0;
|
tm.tm_isdst = 0;
|
||||||
|
@ -45,7 +45,7 @@ static int may_wakeup(const char *rtcname)
|
|||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/* wakeup events could be disabled or not supported */
|
/* wakeup events could be disabled or not supported */
|
||||||
return strcmp(buf, "enabled\n") == 0;
|
return strncmp(buf, "enabled\n", 8) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void setup_alarm(int fd, time_t *wakeup)
|
static void setup_alarm(int fd, time_t *wakeup)
|
||||||
@ -159,11 +159,11 @@ int rtcwake_main(int argc, char **argv)
|
|||||||
/* the rtcname is relative to /dev */
|
/* the rtcname is relative to /dev */
|
||||||
xchdir("/dev");
|
xchdir("/dev");
|
||||||
|
|
||||||
if (strcmp(suspend, "on") != 0 && !may_wakeup(rtcname))
|
|
||||||
bb_error_msg_and_die("%s not enabled for wakeup events", rtcname);
|
|
||||||
|
|
||||||
/* this RTC must exist and (if we'll sleep) be wakeup-enabled */
|
/* this RTC must exist and (if we'll sleep) be wakeup-enabled */
|
||||||
fd = rtc_xopen(rtcname, O_RDONLY);
|
fd = rtc_xopen(&rtcname, O_RDONLY);
|
||||||
|
|
||||||
|
if (strcmp(suspend, "on") && !may_wakeup(rtcname))
|
||||||
|
bb_error_msg_and_die("%s not enabled for wakeup events", rtcname);
|
||||||
|
|
||||||
/* relative or absolute alarm time, normalized to time_t */
|
/* relative or absolute alarm time, normalized to time_t */
|
||||||
sys_time = time(0);
|
sys_time = time(0);
|
||||||
@ -184,7 +184,7 @@ int rtcwake_main(int argc, char **argv)
|
|||||||
fflush(stdout);
|
fflush(stdout);
|
||||||
usleep(10 * 1000);
|
usleep(10 * 1000);
|
||||||
|
|
||||||
if (!strcmp(suspend, "on"))
|
if (strcmp(suspend, "on"))
|
||||||
suspend_system(suspend);
|
suspend_system(suspend);
|
||||||
else {
|
else {
|
||||||
/* "fake" suspend ... we'll do the delay ourselves */
|
/* "fake" suspend ... we'll do the delay ourselves */
|
||||||
|
Loading…
Reference in New Issue
Block a user