diff --git a/drivers/timers/Kconfig b/drivers/timers/Kconfig index 37a8561c8a..0fd4074727 100644 --- a/drivers/timers/Kconfig +++ b/drivers/timers/Kconfig @@ -339,6 +339,13 @@ config RTC_MCP794XX if RTC_MCP794XX +config MCP794XX_DATETIME_UTC + bool "Store datetime in UTC" + default n + ---help--- + If set, the datetime is stored in UTC timezone instead of timezone + defined by local time. + config MCP794XX_I2C_FREQUENCY int "MCP794XX I2C frequency" default 400000 diff --git a/drivers/timers/mcp794xx.c b/drivers/timers/mcp794xx.c index 71881a9d43..54953a0c73 100644 --- a/drivers/timers/mcp794xx.c +++ b/drivers/timers/mcp794xx.c @@ -407,11 +407,23 @@ int up_rtc_settime(FAR const struct timespec *tp) newtime++; } +#ifndef CONFIG_MCP794XX_DATETIME_UTC + /* Save datetime in local time. */ + if (localtime_r(&newtime, &newtm) == NULL) { rtcerr("ERROR: localtime_r failed\n"); return -EINVAL; } +#else + /* Save datetime in UTC time. */ + + if (gmtime_r(&newtime, &newtm) == NULL) + { + rtcerr("ERROR: gmtime_r failed\n"); + return -EINVAL; + } +#endif rtc_dumptime(&newtm, "New time");