Message ID | 1429555051-22335-7-git-send-email-sjg@chromium.org |
---|---|
State | Accepted |
Delegated to: | Simon Glass |
Headers | show |
Hello Simon, Am 20.04.2015 20:37, schrieb Simon Glass: > Change this function name to something more descriptive. Also return a > failure code if it cannot calculate a correct value. > > Signed-off-by: Simon Glass <sjg@chromium.org> > --- > > common/cmd_date.c | 2 +- > drivers/rtc/date.c | 9 +++++++-- > drivers/rtc/ds1306.c | 2 +- > include/rtc.h | 12 +++++++++++- > 4 files changed, 20 insertions(+), 5 deletions(-) Acked-by: Heiko Schocher <hs@denx.de> bye, Heiko > > diff --git a/common/cmd_date.c b/common/cmd_date.c > index e349166..3b7ac3e 100644 > --- a/common/cmd_date.c > +++ b/common/cmd_date.c > @@ -196,7 +196,7 @@ int mk_date (const char *datestr, struct rtc_time *tmp) > tmp->tm_min = val; > > /* calculate day of week */ > - GregorianDay (tmp); > + rtc_calc_weekday(tmp); > > return (0); > default: > diff --git a/drivers/rtc/date.c b/drivers/rtc/date.c > index 15e6db0..2000565 100644 > --- a/drivers/rtc/date.c > +++ b/drivers/rtc/date.c > @@ -11,6 +11,7 @@ > > #include <common.h> > #include <command.h> > +#include <errno.h> > #include <rtc.h> > > #if defined(CONFIG_CMD_DATE) || defined(CONFIG_TIMESTAMP) > @@ -30,13 +31,15 @@ static int month_days[12] = { > /* > * This only works for the Gregorian calendar - i.e. after 1752 (in the UK) > */ > -void GregorianDay(struct rtc_time * tm) > +int rtc_calc_weekday(struct rtc_time *tm) > { > int leapsToDate; > int lastYear; > int day; > int MonthOffset[] = { 0,31,59,90,120,151,181,212,243,273,304,334 }; > > + if (tm->tm_year < 1753) > + return -EINVAL; > lastYear=tm->tm_year-1; > > /* > @@ -64,6 +67,8 @@ void GregorianDay(struct rtc_time * tm) > day += lastYear*365 + leapsToDate + MonthOffset[tm->tm_mon-1] + tm->tm_mday; > > tm->tm_wday=day%7; > + > + return 0; > } > > void to_tm(int tim, struct rtc_time * tm) > @@ -101,7 +106,7 @@ void to_tm(int tim, struct rtc_time * tm) > /* > * Determine the day of week > */ > - GregorianDay(tm); > + rtc_calc_weekday(tm); > } > > /* Converts Gregorian date to seconds since 1970-01-01 00:00:00. > diff --git a/drivers/rtc/ds1306.c b/drivers/rtc/ds1306.c > index 1ec1837..3fe6721 100644 > --- a/drivers/rtc/ds1306.c > +++ b/drivers/rtc/ds1306.c > @@ -110,7 +110,7 @@ int rtc_get (struct rtc_time *tmp) > immap->im_cpm.cp_pbdat &= ~PB_SPI_CE; /* Disable DS1306 Chip */ > udelay (10); > > - GregorianDay (tmp); /* Determine the day of week */ > + rtc_calc_weekday(tmp); /* Determine the day of week */ > > debug ("Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n", > tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, > diff --git a/include/rtc.h b/include/rtc.h > index 54e361e..96c696a 100644 > --- a/include/rtc.h > +++ b/include/rtc.h > @@ -45,7 +45,6 @@ int rtc_get (struct rtc_time *); > int rtc_set (struct rtc_time *); > void rtc_reset (void); > > -void GregorianDay (struct rtc_time *); > void to_tm (int, struct rtc_time *); > unsigned long mktime (unsigned int, unsigned int, unsigned int, > unsigned int, unsigned int, unsigned int); > @@ -87,4 +86,15 @@ void rtc_write32(int reg, u32 value); > */ > void rtc_init(void); > > +/** > + * rtc_calc_weekday() - Work out the weekday from a time > + * > + * This only works for the Gregorian calendar - i.e. after 1752 (in the UK). > + * It sets time->tm_wdaay to the correct day of the week. > + * > + * @time: Time to inspect. tm_wday is updated > + * @return 0 if OK, -EINVAL if the weekday could not be determined > + */ > +int rtc_calc_weekday(struct rtc_time *time); > + > #endif /* _RTC_H_ */ >
On 20 April 2015 at 23:13, Heiko Schocher <hs@denx.de> wrote: > Hello Simon, > > Am 20.04.2015 20:37, schrieb Simon Glass: >> >> Change this function name to something more descriptive. Also return a >> failure code if it cannot calculate a correct value. >> >> Signed-off-by: Simon Glass <sjg@chromium.org> >> --- >> >> common/cmd_date.c | 2 +- >> drivers/rtc/date.c | 9 +++++++-- >> drivers/rtc/ds1306.c | 2 +- >> include/rtc.h | 12 +++++++++++- >> 4 files changed, 20 insertions(+), 5 deletions(-) > > > Acked-by: Heiko Schocher <hs@denx.de> Applied to u-boot-dm.
diff --git a/common/cmd_date.c b/common/cmd_date.c index e349166..3b7ac3e 100644 --- a/common/cmd_date.c +++ b/common/cmd_date.c @@ -196,7 +196,7 @@ int mk_date (const char *datestr, struct rtc_time *tmp) tmp->tm_min = val; /* calculate day of week */ - GregorianDay (tmp); + rtc_calc_weekday(tmp); return (0); default: diff --git a/drivers/rtc/date.c b/drivers/rtc/date.c index 15e6db0..2000565 100644 --- a/drivers/rtc/date.c +++ b/drivers/rtc/date.c @@ -11,6 +11,7 @@ #include <common.h> #include <command.h> +#include <errno.h> #include <rtc.h> #if defined(CONFIG_CMD_DATE) || defined(CONFIG_TIMESTAMP) @@ -30,13 +31,15 @@ static int month_days[12] = { /* * This only works for the Gregorian calendar - i.e. after 1752 (in the UK) */ -void GregorianDay(struct rtc_time * tm) +int rtc_calc_weekday(struct rtc_time *tm) { int leapsToDate; int lastYear; int day; int MonthOffset[] = { 0,31,59,90,120,151,181,212,243,273,304,334 }; + if (tm->tm_year < 1753) + return -EINVAL; lastYear=tm->tm_year-1; /* @@ -64,6 +67,8 @@ void GregorianDay(struct rtc_time * tm) day += lastYear*365 + leapsToDate + MonthOffset[tm->tm_mon-1] + tm->tm_mday; tm->tm_wday=day%7; + + return 0; } void to_tm(int tim, struct rtc_time * tm) @@ -101,7 +106,7 @@ void to_tm(int tim, struct rtc_time * tm) /* * Determine the day of week */ - GregorianDay(tm); + rtc_calc_weekday(tm); } /* Converts Gregorian date to seconds since 1970-01-01 00:00:00. diff --git a/drivers/rtc/ds1306.c b/drivers/rtc/ds1306.c index 1ec1837..3fe6721 100644 --- a/drivers/rtc/ds1306.c +++ b/drivers/rtc/ds1306.c @@ -110,7 +110,7 @@ int rtc_get (struct rtc_time *tmp) immap->im_cpm.cp_pbdat &= ~PB_SPI_CE; /* Disable DS1306 Chip */ udelay (10); - GregorianDay (tmp); /* Determine the day of week */ + rtc_calc_weekday(tmp); /* Determine the day of week */ debug ("Get DATE: %4d-%02d-%02d (wday=%d) TIME: %2d:%02d:%02d\n", tmp->tm_year, tmp->tm_mon, tmp->tm_mday, tmp->tm_wday, diff --git a/include/rtc.h b/include/rtc.h index 54e361e..96c696a 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -45,7 +45,6 @@ int rtc_get (struct rtc_time *); int rtc_set (struct rtc_time *); void rtc_reset (void); -void GregorianDay (struct rtc_time *); void to_tm (int, struct rtc_time *); unsigned long mktime (unsigned int, unsigned int, unsigned int, unsigned int, unsigned int, unsigned int); @@ -87,4 +86,15 @@ void rtc_write32(int reg, u32 value); */ void rtc_init(void); +/** + * rtc_calc_weekday() - Work out the weekday from a time + * + * This only works for the Gregorian calendar - i.e. after 1752 (in the UK). + * It sets time->tm_wdaay to the correct day of the week. + * + * @time: Time to inspect. tm_wday is updated + * @return 0 if OK, -EINVAL if the weekday could not be determined + */ +int rtc_calc_weekday(struct rtc_time *time); + #endif /* _RTC_H_ */
Change this function name to something more descriptive. Also return a failure code if it cannot calculate a correct value. Signed-off-by: Simon Glass <sjg@chromium.org> --- common/cmd_date.c | 2 +- drivers/rtc/date.c | 9 +++++++-- drivers/rtc/ds1306.c | 2 +- include/rtc.h | 12 +++++++++++- 4 files changed, 20 insertions(+), 5 deletions(-)