From 27bdb83308301a1dbe3db9e1fbaf6560facda654 Mon Sep 17 00:00:00 2001 From: Andy Gross Date: Tue, 24 Apr 2018 13:27:59 -0500 Subject: [PATCH] rtc: Add prescalar configuration option This patch adds a prescaler configuration option that denotes the number of RTC ticks per second. This is used to calculate the value for 1 second. Signed-off-by: Andy Gross --- drivers/rtc/Kconfig.qmsi | 8 +++++++ drivers/rtc/rtc_qmsi.c | 2 +- include/rtc.h | 23 +------------------ .../rtc/rtc_basic_api/src/test_rtc_calendar.c | 2 +- 4 files changed, 11 insertions(+), 24 deletions(-) diff --git a/drivers/rtc/Kconfig.qmsi b/drivers/rtc/Kconfig.qmsi index 3be31fdd756..63a7199fbf2 100644 --- a/drivers/rtc/Kconfig.qmsi +++ b/drivers/rtc/Kconfig.qmsi @@ -18,4 +18,12 @@ config RTC_QMSI_API_REENTRANCY default n help Enable support for RTC shim driver API reentrancy. + +config RTC_PRESCALER + int + default 1 + prompt "Prescaler size" + help + RTC prescaler used to determine ticks per second + endif diff --git a/drivers/rtc/rtc_qmsi.c b/drivers/rtc/rtc_qmsi.c index 5ee44659eb8..27f56845acd 100644 --- a/drivers/rtc/rtc_qmsi.c +++ b/drivers/rtc/rtc_qmsi.c @@ -93,7 +93,7 @@ static int rtc_qmsi_set_config(struct device *dev, struct rtc_config *cfg) * values defined by clk_rtc_div and by QMSI's clk_rtc_div_t match for * both D2000 and SE. */ - qm_cfg.prescaler = (clk_rtc_div_t)RTC_DIVIDER; + qm_cfg.prescaler = (clk_rtc_div_t)CONFIG_RTC_PRESCALER; if (IS_ENABLED(CONFIG_RTC_QMSI_API_REENTRANCY)) { k_sem_take(RP_GET(dev), K_FOREVER); diff --git a/include/rtc.h b/include/rtc.h index 0d1077a404b..ee1a4b5daa6 100644 --- a/include/rtc.h +++ b/include/rtc.h @@ -14,29 +14,8 @@ extern "C" { #endif -enum clk_rtc_div { - RTC_CLK_DIV_1, - RTC_CLK_DIV_2, - RTC_CLK_DIV_4, - RTC_CLK_DIV_8, - RTC_CLK_DIV_16, - RTC_CLK_DIV_32, - RTC_CLK_DIV_64, - RTC_CLK_DIV_128, - RTC_CLK_DIV_256, - RTC_CLK_DIV_512, - RTC_CLK_DIV_1024, - RTC_CLK_DIV_2048, - RTC_CLK_DIV_4096, - RTC_CLK_DIV_8192, - RTC_CLK_DIV_16384, - RTC_CLK_DIV_32768 -}; - -#define RTC_DIVIDER RTC_CLK_DIV_1 - /** Number of RTC ticks in a second */ -#define RTC_ALARM_SECOND (32768 / (1UL << RTC_DIVIDER)) +#define RTC_ALARM_SECOND (32768 / CONFIG_RTC_PRESCALER) /** Number of RTC ticks in a minute */ #define RTC_ALARM_MINUTE (RTC_ALARM_SECOND * 60) diff --git a/tests/drivers/rtc/rtc_basic_api/src/test_rtc_calendar.c b/tests/drivers/rtc/rtc_basic_api/src/test_rtc_calendar.c index 9822396606c..7106f4d2e62 100644 --- a/tests/drivers/rtc/rtc_basic_api/src/test_rtc_calendar.c +++ b/tests/drivers/rtc/rtc_basic_api/src/test_rtc_calendar.c @@ -42,7 +42,7 @@ static int test_task(void) k_sleep(2000); val_2 = rtc_read(rtc); - TC_PRINT("val_1: %u, val_2: %u, delta: %lu:%lu\n", + TC_PRINT("val_1: %u, val_2: %u, delta: %u:%u\n", val_1, val_2, (val_2 - val_1) / RTC_ALARM_SECOND, (val_2 - val_1) % RTC_ALARM_SECOND);