This is an automated email from the ASF dual-hosted git repository. xiaoxiang781216 pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/nuttx.git
commit f86b05351f51a3a99f3a3837aa46f4bd136c1392 Author: raiden00pl <[email protected]> AuthorDate: Thu Sep 24 15:32:29 2026 +0200 arm/nrf52,nrf53,nrf91: fix RTC driver bugs - setcc/getcc accepted channel index equal to the channel count - init never marked the instance as in use - NRFxx_RTC_GETCC called setcc instead of getcc Assisted-by: Claude Code Signed-off-by: raiden00pl <[email protected]> --- arch/arm/src/nrf52/nrf52_rtc.c | 8 ++++++-- arch/arm/src/nrf52/nrf52_rtc.h | 2 +- arch/arm/src/nrf53/nrf53_rtc.c | 8 ++++++-- arch/arm/src/nrf53/nrf53_rtc.h | 2 +- arch/arm/src/nrf91/nrf91_rtc.c | 8 ++++++-- arch/arm/src/nrf91/nrf91_rtc.h | 2 +- 6 files changed, 21 insertions(+), 9 deletions(-) diff --git a/arch/arm/src/nrf52/nrf52_rtc.c b/arch/arm/src/nrf52/nrf52_rtc.c index 1cb618612f4..a99e80c79f6 100644 --- a/arch/arm/src/nrf52/nrf52_rtc.c +++ b/arch/arm/src/nrf52/nrf52_rtc.c @@ -405,7 +405,7 @@ static int nrf52_rtc_setcc(struct nrf52_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -435,7 +435,7 @@ static int nrf52_rtc_getcc(struct nrf52_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -797,6 +797,10 @@ struct nrf52_rtc_dev_s *nrf52_rtc_init(int rtc) priv = NULL; } + else + { + priv->inuse = true; + } errout: return (struct nrf52_rtc_dev_s *)priv; diff --git a/arch/arm/src/nrf52/nrf52_rtc.h b/arch/arm/src/nrf52/nrf52_rtc.h index 80b704e6f54..39eb3710209 100644 --- a/arch/arm/src/nrf52/nrf52_rtc.h +++ b/arch/arm/src/nrf52/nrf52_rtc.h @@ -45,7 +45,7 @@ #define NRF52_RTC_TRGOVRFLW(d) ((d)->ops->trgovrflw(d)) #define NRF52_RTC_GETCOUNTER(d, c) ((d)->ops->getcounter(d, c)) #define NRF52_RTC_SETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) -#define NRF52_RTC_GETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) +#define NRF52_RTC_GETCC(d, i, cc) ((d)->ops->getcc(d, i, cc)) #define NRF52_RTC_SETPRE(d, pre) ((d)->ops->setpre(d, pre)) #define NRF52_RTC_SETISR(d, hnd, arg) ((d)->ops->setisr(d, hnd, arg)) #define NRF52_RTC_ENABLEINT(d, s) ((d)->ops->enableint(d, s)) diff --git a/arch/arm/src/nrf53/nrf53_rtc.c b/arch/arm/src/nrf53/nrf53_rtc.c index e02543279b3..4d492e7ed16 100644 --- a/arch/arm/src/nrf53/nrf53_rtc.c +++ b/arch/arm/src/nrf53/nrf53_rtc.c @@ -392,7 +392,7 @@ static int nrf53_rtc_setcc(struct nrf53_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -422,7 +422,7 @@ static int nrf53_rtc_getcc(struct nrf53_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -776,6 +776,10 @@ struct nrf53_rtc_dev_s *nrf53_rtc_init(int rtc) priv = NULL; } + else + { + priv->inuse = true; + } errout: return (struct nrf53_rtc_dev_s *)priv; diff --git a/arch/arm/src/nrf53/nrf53_rtc.h b/arch/arm/src/nrf53/nrf53_rtc.h index d74e1186158..5f9d1262c2f 100644 --- a/arch/arm/src/nrf53/nrf53_rtc.h +++ b/arch/arm/src/nrf53/nrf53_rtc.h @@ -45,7 +45,7 @@ #define NRF53_RTC_TRGOVRFLW(d) ((d)->ops->trgovrflw(d)) #define NRF53_RTC_GETCOUNTER(d, c) ((d)->ops->getcounter(d, c)) #define NRF53_RTC_SETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) -#define NRF53_RTC_GETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) +#define NRF53_RTC_GETCC(d, i, cc) ((d)->ops->getcc(d, i, cc)) #define NRF53_RTC_SETPRE(d, pre) ((d)->ops->setpre(d, pre)) #define NRF53_RTC_SETISR(d, hnd, arg) ((d)->ops->setisr(d, hnd, arg)) #define NRF53_RTC_ENABLEINT(d, s) ((d)->ops->enableint(d, s)) diff --git a/arch/arm/src/nrf91/nrf91_rtc.c b/arch/arm/src/nrf91/nrf91_rtc.c index d45fd2ab9b9..7905973b42c 100644 --- a/arch/arm/src/nrf91/nrf91_rtc.c +++ b/arch/arm/src/nrf91/nrf91_rtc.c @@ -392,7 +392,7 @@ static int nrf91_rtc_setcc(struct nrf91_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -422,7 +422,7 @@ static int nrf91_rtc_getcc(struct nrf91_rtc_dev_s *dev, uint8_t i, /* Is the channel supported? */ - if (i > rtc->chan) + if (i >= rtc->chan) { rtcerr("ERROR: unsupported RTCER channel %d\n", i); ret = -EINVAL; @@ -776,6 +776,10 @@ struct nrf91_rtc_dev_s *nrf91_rtc_init(int rtc) priv = NULL; } + else + { + priv->inuse = true; + } errout: return (struct nrf91_rtc_dev_s *)priv; diff --git a/arch/arm/src/nrf91/nrf91_rtc.h b/arch/arm/src/nrf91/nrf91_rtc.h index 5d0ed48eb0a..2a566822cf0 100644 --- a/arch/arm/src/nrf91/nrf91_rtc.h +++ b/arch/arm/src/nrf91/nrf91_rtc.h @@ -45,7 +45,7 @@ #define NRF91_RTC_TRGOVRFLW(d) ((d)->ops->trgovrflw(d)) #define NRF91_RTC_GETCOUNTER(d, c) ((d)->ops->getcounter(d, c)) #define NRF91_RTC_SETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) -#define NRF91_RTC_GETCC(d, i, cc) ((d)->ops->setcc(d, i, cc)) +#define NRF91_RTC_GETCC(d, i, cc) ((d)->ops->getcc(d, i, cc)) #define NRF91_RTC_SETPRE(d, pre) ((d)->ops->setpre(d, pre)) #define NRF91_RTC_SETISR(d, hnd, arg) ((d)->ops->setisr(d, hnd, arg)) #define NRF91_RTC_ENABLEINT(d, s) ((d)->ops->enableint(d, s))
