summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/include/io.h2
-rw-r--r--c/src/lib/libbsp/arm/lpc24xx/misc/io.c24
2 files changed, 26 insertions, 0 deletions
diff --git a/c/src/lib/libbsp/arm/lpc24xx/include/io.h b/c/src/lib/libbsp/arm/lpc24xx/include/io.h
index 03ae472790..f77b44717e 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/include/io.h
+++ b/c/src/lib/libbsp/arm/lpc24xx/include/io.h
@@ -147,6 +147,8 @@ rtems_status_code lpc24xx_module_disable(
lpc24xx_module module
);
+bool lpc24xx_module_is_enabled(lpc24xx_module module);
+
rtems_status_code lpc24xx_gpio_config(
unsigned index,
lpc24xx_gpio_settings settings
diff --git a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
index 1141b718ad..ad74164b80 100644
--- a/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
+++ b/c/src/lib/libbsp/arm/lpc24xx/misc/io.c
@@ -327,6 +327,30 @@ rtems_status_code lpc24xx_module_disable(
);
}
+bool lpc24xx_module_is_enabled(lpc24xx_module module)
+{
+ bool enabled = false;
+
+ if ((unsigned) module < LPC24XX_MODULE_COUNT) {
+ bool has_power = lpc24xx_module_table [module].power;
+
+ if (has_power) {
+ unsigned index = lpc24xx_module_table [module].index;
+ #ifdef ARM_MULTILIB_ARCH_V4
+ uint32_t pconp = PCONP;
+ #else
+ uint32_t pconp = LPC17XX_SCB.pconp;
+ #endif
+
+ enabled = (pconp & (1U << index)) != 0;
+ } else {
+ enabled = true;
+ }
+ }
+
+ return enabled;
+}
+
typedef rtems_status_code (*lpc24xx_pin_visitor)(
#ifdef ARM_MULTILIB_ARCH_V4
volatile uint32_t *pinsel,