commit 37bacabf97b6bd7ea556cd7de8ebfa1649ba3545
Author: Thomas Schöpping <tschoepp@cit-ec.uni-bielefeld.de>
Date:   Fri Sep 14 16:15:06 2018 +0200

    Added some basics to mask pads during GPIO initialization (wip)

diff --git a/modules/DiWheelDrive_1-1/board.c b/modules/DiWheelDrive_1-1/board.c
index 0c3eb8e..7a7d01d 100644
--- a/modules/DiWheelDrive_1-1/board.c
+++ b/modules/DiWheelDrive_1-1/board.c
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   DiWheeDrive v1.1 Board specific initializations.
  *
  * @addtogroup diwheeldrive_board
diff --git a/modules/DiWheelDrive_1-1/board.h b/modules/DiWheelDrive_1-1/board.h
index 48d24a2..533cffc 100644
--- a/modules/DiWheelDrive_1-1/board.h
+++ b/modules/DiWheelDrive_1-1/board.h
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   DiWheeDrive v1.1 Board specific macros.
  *
  * @addtogroup diwheeldrive_board
@@ -252,6 +252,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PIN_CR(pin, mode, cnf)      (((mode) | ((cnf) << 2U)) << (((pin) % 8U) * 4U))
 #define PIN_ODR_LOW(n)              (0U << (n))
 #define PIN_ODR_HIGH(n)             (1U << (n))
+#define PIN_IGNORE(n)               (1U << (n))
 
 /*
  * GPIOA setup:
@@ -273,6 +274,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PA14 - SWCLK                     (input pullup)
  * PA15 - DRIVE_PWM2B               (alternate pushpull 50MHz)
  */
+#define VAL_GPIOAIGN                (PIN_IGNORE(GPIOA_LED)) & 0
 #define VAL_GPIOACRL                (PIN_CR(GPIOA_WKUP, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOA_LED, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_OPENDRAIN) |            \
                                      PIN_CR(GPIOA_DRIVE_PWM1A, PIN_MODE_OUTPUT_50M, PIN_CNF_ALTERNATE_PUSHPULL) |  \
@@ -326,6 +328,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PB14 - SYS_UART_UP               (output opendrain high 50MHz)
  * PB15 - ACCEL_INT_N               (input pullup)
  */
+#define VAL_GPIOBIGN                (PIN_IGNORE(GPIOB_SYS_UART_UP)) & 0
 #define VAL_GPIOBCRL                (PIN_CR(GPIOB_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOB_DRIVE_SENSE2, PIN_MODE_INPUT, PIN_CNF_INPUT_ANALOG) |            \
                                      PIN_CR(GPIOB_POWER_EN, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_PUSHPULL) |        \
@@ -379,8 +382,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PC14 - GYRO_SS_N                 (output pushpull high 50MHz)
  * PC15 - PIN15                     (input floating)
  */
+#define VAL_GPIOCIGN                (PIN_IGNORE(GPIOC_SYS_INT_N) |                                                 \
+                                     PIN_IGNORE(GPIOC_SYS_PD_N)) & 0
 #define VAL_GPIOCCRL                (PIN_CR(GPIOC_DRIVE_SENSE1, PIN_MODE_INPUT, PIN_CNF_INPUT_ANALOG) |            \
-                                     PIN_CR(GPIOC_SYS_INT_N, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_OPENDRAIN) |           \
+                                     PIN_CR(GPIOC_SYS_INT_N, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_OPENDRAIN) |      \
                                      PIN_CR(GPIOC_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOC_PATH_DCSTAT, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |           \
                                      PIN_CR(GPIOC_PIN4, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
@@ -432,6 +437,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PD14 - PIN14                     (input floating)
  * PD15 - PIN15                     (input floating)
  */
+#define VAL_GPIODIGN                0
 #define VAL_GPIODCRL                (PIN_CR(GPIOD_OSC_IN, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOD_OSC_OUT, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |               \
                                      PIN_CR(GPIOD_SYS_WARMRST_N, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_OPENDRAIN) |  \
@@ -485,6 +491,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PE14 - PIN14                     (input floating)
  * PE15 - PIN15                     (input floating)
  */
+#define VAL_GPIOEIGN                0
 #define VAL_GPIOECRL                (PIN_CR(GPIOE_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOE_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOE_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
@@ -538,6 +545,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PF14 - PIN14                     (input floating)
  * PF15 - PIN15                     (input floating)
  */
+#define VAL_GPIOFIGN                0
 #define VAL_GPIOFCRL                (PIN_CR(GPIOF_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOF_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOF_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
@@ -591,6 +599,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PG14 - PIN14                     (input floating)
  * PG15 - PIN15                     (input floating)
  */
+#define VAL_GPIOGIGN                0
 #define VAL_GPIOGCRL                (PIN_CR(GPIOG_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOG_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOG_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
diff --git a/modules/DiWheelDrive_1-1/module.h b/modules/DiWheelDrive_1-1/module.h
index e64dac1..b8d810a 100644
--- a/modules/DiWheelDrive_1-1/module.h
+++ b/modules/DiWheelDrive_1-1/module.h
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file   
+ * @file
  * @brief   Structures and constant for the DiWheelDrive module.
  *
  * @addtogroup diwheeldrive_module
diff --git a/modules/LightRing_1-0/board.c b/modules/LightRing_1-0/board.c
index 57d3b9b..41a9663 100644
--- a/modules/LightRing_1-0/board.c
+++ b/modules/LightRing_1-0/board.c
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   LightRing v1.0 Board specific initializations.
  *
  * @addtogroup lightring_board
diff --git a/modules/LightRing_1-0/board.h b/modules/LightRing_1-0/board.h
index be47183..a8858ec 100644
--- a/modules/LightRing_1-0/board.h
+++ b/modules/LightRing_1-0/board.h
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   LightRing v1.0 Board specific macros.
  *
  * @addtogroup lightring_board
@@ -236,6 +236,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #define PIN_CR(pin, mode, cnf)      (((mode) | ((cnf) << 2U)) << (((pin) % 8U) * 4U))
 #define PIN_ODR_LOW(n)              (0U << (n))
 #define PIN_ODR_HIGH(n)             (1U << (n))
+#define PIN_IGNORE(n)               (1U << (n))
 
 /*
  * GPIOA setup:
@@ -257,6 +258,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PA14 - SWCLK                     (input pullup)
  * PA15 - PIN15                     (input floating)
  */
+#define VAL_GPIOAIGN                0
 #define VAL_GPIOACRL                (PIN_CR(GPIOA_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOA_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOA_LASER_RX, PIN_MODE_OUTPUT_50M, PIN_CNF_ALTERNATE_PUSHPULL) |   \
@@ -310,6 +312,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PB14 - WL_MISO                   (input pullup)
  * PB15 - WL_MOSI                   (alternate pushpull 50MHz)
  */
+#define VAL_GPIOBIGN                (PIN_IGNORE(GPIOB_SYS_UART_DN)) & 0
 #define VAL_GPIOBCRL                (PIN_CR(GPIOB_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOB_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOB_LASER_EN, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_PUSHPULL) |      \
@@ -363,6 +366,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PC14 - SYS_PD_N                  (output opendrain high 50MHz)
  * PC15 - PIN15                     (input floating)
  */
+#define VAL_GPIOCIGN                (PIN_IGNORE(GPIOC_SYS_PD_N)) & 0
 #define VAL_GPIOCCRL                (PIN_CR(GPIOC_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOC_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
                                      PIN_CR(GPIOC_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                \
@@ -416,6 +420,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PD14 - PIN14                     (input floating)
  * PD15 - PIN15                     (input floating)
  */
+#define VAL_GPIODIGN                (PIN_IGNORE(GPIOD_SYS_INT_N)) & 0
 #define VAL_GPIODCRL                (PIN_CR(GPIOD_OSC_IN, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |              \
                                      PIN_CR(GPIOD_OSC_OUT, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |             \
                                      PIN_CR(GPIOD_SYS_INT_N, PIN_MODE_OUTPUT_50M, PIN_CNF_OUTPUT_OPENDRAIN) |    \
@@ -469,6 +474,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PE14 - PIN14                     (input floating)
  * PE15 - PIN15                     (input floating)
  */
+#define VAL_GPIOEIGN                0
 #define VAL_GPIOECRL                (PIN_CR(GPIOE_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOE_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOE_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
@@ -522,6 +528,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PF14 - PIN14                     (input floating)
  * PF15 - PIN15                     (input floating)
  */
+#define VAL_GPIOFIGN                0
 #define VAL_GPIOFCRL                (PIN_CR(GPIOF_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOF_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOF_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
@@ -575,6 +582,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PG14 - PIN14                     (input floating)
  * PG15 - PIN15                     (input floating)
  */
+#define VAL_GPIOGIGN                0
 #define VAL_GPIOGCRL                (PIN_CR(GPIOG_PIN0, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOG_PIN1, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
                                      PIN_CR(GPIOG_PIN2, PIN_MODE_INPUT, PIN_CNF_INPUT_FLOATING) |                  \
diff --git a/modules/PowerManagement_1-1/board.c b/modules/PowerManagement_1-1/board.c
index 31428ec..a8830a1 100644
--- a/modules/PowerManagement_1-1/board.c
+++ b/modules/PowerManagement_1-1/board.c
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   PowerManagement v1.1 Board specific initializations.
  *
  * @addtogroup powermanagement_board
@@ -28,122 +28,59 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 #include <stm32_gpio.h>
 
 /**
- * @brief   Type of STM32 GPIO port setup.
+ * @brief   GPIO initialization.
+ *
+ * @param[in]   gpiop   GPIO register block.
+ * @param[in]   config  GPIO configuration.
  */
-typedef struct {
-  uint32_t              moder;
-  uint32_t              otyper;
-  uint32_t              ospeedr;
-  uint32_t              pupdr;
-  uint32_t              odr;
-  uint32_t              afrl;
-  uint32_t              afrh;
-} gpio_setup_t;
 
-/**
- * @brief   Type of STM32 GPIO initialization data.
- */
-typedef struct {
-#if STM32_HAS_GPIOA || defined(__DOXYGEN__)
-  gpio_setup_t          PAData;
-#endif
-#if STM32_HAS_GPIOB || defined(__DOXYGEN__)
-  gpio_setup_t          PBData;
-#endif
-#if STM32_HAS_GPIOC || defined(__DOXYGEN__)
-  gpio_setup_t          PCData;
-#endif
-#if STM32_HAS_GPIOD || defined(__DOXYGEN__)
-  gpio_setup_t          PDData;
-#endif
-#if STM32_HAS_GPIOE || defined(__DOXYGEN__)
-  gpio_setup_t          PEData;
-#endif
-#if STM32_HAS_GPIOF || defined(__DOXYGEN__)
-  gpio_setup_t          PFData;
-#endif
-#if STM32_HAS_GPIOG || defined(__DOXYGEN__)
-  gpio_setup_t          PGData;
-#endif
-#if STM32_HAS_GPIOH || defined(__DOXYGEN__)
-  gpio_setup_t          PHData;
-#endif
-#if STM32_HAS_GPIOI || defined(__DOXYGEN__)
-  gpio_setup_t          PIData;
-#endif
-#if STM32_HAS_GPIOJ || defined(__DOXYGEN__)
-  gpio_setup_t          PJData;
-#endif
-#if STM32_HAS_GPIOK || defined(__DOXYGEN__)
-  gpio_setup_t          PKData;
-#endif
-} gpio_config_t;
 
-/**
- * @brief   STM32 GPIO static initialization data.
- */
-static const gpio_config_t gpio_default_config = {
-#if STM32_HAS_GPIOA
-  {VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR,
-   VAL_GPIOA_ODR,   VAL_GPIOA_AFRL,   VAL_GPIOA_AFRH},
-#endif
-#if STM32_HAS_GPIOB
-  {VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR,
-   VAL_GPIOB_ODR,   VAL_GPIOB_AFRL,   VAL_GPIOB_AFRH},
-#endif
-#if STM32_HAS_GPIOC
-  {VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR,
-   VAL_GPIOC_ODR,   VAL_GPIOC_AFRL,   VAL_GPIOC_AFRH},
-#endif
-#if STM32_HAS_GPIOD
-  {VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR,
-   VAL_GPIOD_ODR,   VAL_GPIOD_AFRL,   VAL_GPIOD_AFRH},
-#endif
-#if STM32_HAS_GPIOE
-  {VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR,
-   VAL_GPIOE_ODR,   VAL_GPIOE_AFRL,   VAL_GPIOE_AFRH},
-#endif
-#if STM32_HAS_GPIOF
-  {VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR,
-   VAL_GPIOF_ODR,   VAL_GPIOF_AFRL,   VAL_GPIOF_AFRH},
-#endif
-#if STM32_HAS_GPIOG
-  {VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR,
-   VAL_GPIOG_ODR,   VAL_GPIOG_AFRL,   VAL_GPIOG_AFRH},
-#endif
-#if STM32_HAS_GPIOH
-  {VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR,
-   VAL_GPIOH_ODR,   VAL_GPIOH_AFRL,   VAL_GPIOH_AFRH},
-#endif
-#if STM32_HAS_GPIOI
-  {VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR,
-   VAL_GPIOI_ODR,   VAL_GPIOI_AFRL,   VAL_GPIOI_AFRH},
-#endif
-#if STM32_HAS_GPIOJ
-  {VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR,
-   VAL_GPIOJ_ODR,   VAL_GPIOJ_AFRL,   VAL_GPIOJ_AFRH},
-#endif
-#if STM32_HAS_GPIOK
-  {VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR,
-   VAL_GPIOK_ODR,   VAL_GPIOK_AFRL,   VAL_GPIOK_AFRH}
-#endif
-};
 
 /**
  * @brief   GPIO initialization.
  *
- * @param[in]   gpiop   GPIO register block. 
- * @param[in]   config  GPIO configuration.
+ * @param[in] gpiop     GPIO register block.
+ * @param[in] moder     Mode register configuration.
+ * @param[in] otyper    Otype register configuration.
+ * @param[in] ospeedr   Ospeed register configuration.
+ * @param[in] pupdr     Pupd register configuration.
+ * @param[in] odr       OD register configuration.
+ * @param[in] afrl      AF register (low) configuration.
+ * @param[in] afrh      AF register (high ) configuration.
+ * @param[in] ignmask   Mask to ignore individual pads.
  */
-static void gpio_init(stm32_gpio_t *gpiop, const gpio_setup_t *config) {
-
-  gpiop->OTYPER  = config->otyper;
-  gpiop->OSPEEDR = config->ospeedr;
-  gpiop->PUPDR   = config->pupdr;
-  gpiop->ODR     = config->odr;
-  gpiop->AFRL    = config->afrl;
-  gpiop->AFRH    = config->afrh;
-  gpiop->MODER   = config->moder;
+static void gpio_init(stm32_gpio_t *gpiop,
+                      const uint32_t moder,
+                      const uint32_t otyper,
+                      const uint32_t ospeedr,
+                      const uint32_t pupdr,
+                      const uint32_t odr,
+                      const uint32_t afrl,
+                      const uint32_t afrh,
+                      const uint16_t ignmask) {
+
+  uint32_t ignmask2 = 0;
+  uint32_t ignmask4_low = 0;
+  uint32_t ignmask4_high = 0;
+
+  /* some bit-magic to fan out the mask */
+  const uint8_t lut[] = {0x00, 0x03, 0x0C, 0x0F,
+                         0x30, 0x33, 0x3C, 0x3F,
+                         0xC0, 0xC3, 0xCC, 0xCF,
+                         0xF0, 0xF3, 0xFC, 0xFF};
+  for (uint8_t i = 0; i < 4; ++i) {
+    ignmask2 |= lut[(ignmask >> 4*i) & 0x0F] << (8*i);
+    ignmask4_low |= lut[lut[(ignmask >> 2*i) & 0x03]] << (8*i);
+    ignmask4_high |= lut[lut[(ignmask >> (8 + 2*i)) & 0x03]] << (8*i);
+  }
+
+  gpiop->OTYPER  = (gpiop->OTYPER  & ignmask      ) | (otyper  & ~ignmask      );
+  gpiop->OSPEEDR = (gpiop->OSPEEDR & ignmask2     ) | (ospeedr & ~ignmask2     );
+  gpiop->PUPDR   = (gpiop->PUPDR   & ignmask2     ) | (pupdr   & ~ignmask2     );
+  gpiop->ODR     = (gpiop->ODR     & ignmask      ) | (odr     & ~ignmask      );
+  gpiop->AFRL    = (gpiop->AFRL    & ignmask4_low ) | (afrl    & ~ignmask4_low );
+  gpiop->AFRH    = (gpiop->AFRH    & ignmask4_high) | (afrh    & ~ignmask4_high);
+  gpiop->MODER   = (gpiop->MODER   & ignmask2     ) | (moder   & ~ignmask2     );
 }
 
 /**
@@ -158,37 +95,37 @@ static void stm32_gpio_init(void) {
 
   /* Initializing all the defined GPIO ports.*/
 #if STM32_HAS_GPIOA
-  gpio_init(GPIOA, &gpio_default_config.PAData);
+  gpio_init(GPIOA, VAL_GPIOA_MODER, VAL_GPIOA_OTYPER, VAL_GPIOA_OSPEEDR, VAL_GPIOA_PUPDR, VAL_GPIOA_ODR, VAL_GPIOA_AFRL, VAL_GPIOA_AFRH, VAL_GPIOA_IGNORE);
 #endif
 #if STM32_HAS_GPIOB
-  gpio_init(GPIOB, &gpio_default_config.PBData);
+  gpio_init(GPIOB, VAL_GPIOB_MODER, VAL_GPIOB_OTYPER, VAL_GPIOB_OSPEEDR, VAL_GPIOB_PUPDR, VAL_GPIOB_ODR, VAL_GPIOB_AFRL, VAL_GPIOB_AFRH, VAL_GPIOB_IGNORE);
 #endif
 #if STM32_HAS_GPIOC
-  gpio_init(GPIOC, &gpio_default_config.PCData);
+  gpio_init(GPIOC, VAL_GPIOC_MODER, VAL_GPIOC_OTYPER, VAL_GPIOC_OSPEEDR, VAL_GPIOC_PUPDR, VAL_GPIOC_ODR, VAL_GPIOC_AFRL, VAL_GPIOC_AFRH, VAL_GPIOC_IGNORE);
 #endif
 #if STM32_HAS_GPIOD
-  gpio_init(GPIOD, &gpio_default_config.PDData);
+  gpio_init(GPIOD, VAL_GPIOD_MODER, VAL_GPIOD_OTYPER, VAL_GPIOD_OSPEEDR, VAL_GPIOD_PUPDR, VAL_GPIOD_ODR, VAL_GPIOD_AFRL, VAL_GPIOD_AFRH, VAL_GPIOD_IGNORE);
 #endif
 #if STM32_HAS_GPIOE
-  gpio_init(GPIOE, &gpio_default_config.PEData);
+  gpio_init(GPIOE, VAL_GPIOE_MODER, VAL_GPIOE_OTYPER, VAL_GPIOE_OSPEEDR, VAL_GPIOE_PUPDR, VAL_GPIOE_ODR, VAL_GPIOE_AFRL, VAL_GPIOE_AFRH, VAL_GPIOE_IGNORE);
 #endif
 #if STM32_HAS_GPIOF
-  gpio_init(GPIOF, &gpio_default_config.PFData);
+  gpio_init(GPIOF, VAL_GPIOF_MODER, VAL_GPIOF_OTYPER, VAL_GPIOF_OSPEEDR, VAL_GPIOF_PUPDR, VAL_GPIOF_ODR, VAL_GPIOF_AFRL, VAL_GPIOF_AFRH, VAL_GPIOF_IGNORE);
 #endif
 #if STM32_HAS_GPIOG
-  gpio_init(GPIOG, &gpio_default_config.PGData);
+  gpio_init(GPIOG, VAL_GPIOG_MODER, VAL_GPIOG_OTYPER, VAL_GPIOG_OSPEEDR, VAL_GPIOG_PUPDR, VAL_GPIOG_ODR, VAL_GPIOG_AFRL, VAL_GPIOG_AFRH, VAL_GPIOG_IGNORE);
 #endif
 #if STM32_HAS_GPIOH
-  gpio_init(GPIOH, &gpio_default_config.PHData);
+  gpio_init(GPIOH, VAL_GPIOH_MODER, VAL_GPIOH_OTYPER, VAL_GPIOH_OSPEEDR, VAL_GPIOH_PUPDR, VAL_GPIOH_ODR, VAL_GPIOH_AFRL, VAL_GPIOH_AFRH, VAL_GPIOH_IGNORE);
 #endif
 #if STM32_HAS_GPIOI
-  gpio_init(GPIOI, &gpio_default_config.PIData);
+  gpio_init(GPIOI, VAL_GPIOI_MODER, VAL_GPIOI_OTYPER, VAL_GPIOI_OSPEEDR, VAL_GPIOI_PUPDR, VAL_GPIOI_ODR, VAL_GPIOI_AFRL, VAL_GPIOI_AFRH, VAL_GPIOI_IGNORE);
 #endif
 #if STM32_HAS_GPIOJ
-  gpio_init(GPIOJ, &gpio_default_config.PJData);
+  gpio_init(GPIOJ, VAL_GPIOJ_MODER, VAL_GPIOJ_OTYPER, VAL_GPIOJ_OSPEEDR, VAL_GPIOJ_PUPDR, VAL_GPIOJ_ODR, VAL_GPIOJ_AFRL, VAL_GPIOJ_AFRH, VAL_GPIOJ_IGNORE);
 #endif
 #if STM32_HAS_GPIOK
-  gpio_init(GPIOK, &gpio_default_config.PKData);
+  gpio_init(GPIOK, VAL_GPIOK_MODER, VAL_GPIOK_OTYPER, VAL_GPIOK_OSPEEDR, VAL_GPIOK_PUPDR, VAL_GPIOK_ODR, VAL_GPIOK_AFRL, VAL_GPIOK_AFRH, VAL_GPIOK_IGNORE);
 #endif
 }
 
diff --git a/modules/PowerManagement_1-1/board.h b/modules/PowerManagement_1-1/board.h
index 75b260b..ba05342 100644
--- a/modules/PowerManagement_1-1/board.h
+++ b/modules/PowerManagement_1-1/board.h
@@ -17,7 +17,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
 /**
- * @file    
+ * @file
  * @brief   PowerManagement v1.1 Board specific macros.
  *
  * @addtogroup powermanagement_board
@@ -299,6 +299,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * in the initialization code.
  * Please refer to the STM32 Reference Manual for details.
  */
+#define PIN_IGNORE(n)                   (1U << (n))
 #define PIN_MODE_INPUT(n)               (0U << ((n) * 2U))
 #define PIN_MODE_OUTPUT(n)              (1U << ((n) * 2U))
 #define PIN_MODE_ALTERNATE(n)           (2U << ((n) * 2U))
@@ -336,6 +337,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PA14 - SWCLK                         (alternate 0 pushpull floating)
  * PA15 - SYS_SPI_SS1_N                 (input floating)
  */
+#define VAL_GPIOA_IGNORE                0
 #define VAL_GPIOA_MODER                 (PIN_MODE_INPUT(GPIOA_WKUP) |                                 \
                                          PIN_MODE_INPUT(GPIOA_PIN1) |                                 \
                                          PIN_MODE_INPUT(GPIOA_SYS_UART_TX) |                          \
@@ -453,6 +455,10 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PB14 - BT_CTS                        (inout floating)
  * PB15 - SYS_UART_UP                   (output opendrain high)
  */
+#define VAL_GPIOB_IGNORE                (PIN_IGNORE(GPIOB_POWER_EN) |                                 \
+                                         PIN_IGNORE(GPIOB_SYS_UART_DN) |                              \
+                                         PIN_IGNORE(GPIOB_LED) |                                      \
+                                         PIN_IGNORE(GPIOB_SYS_UART_UP)) & 0
 #define VAL_GPIOB_MODER                 (PIN_MODE_INPUT(GPIOB_IR_INT1_N) |                            \
                                          PIN_MODE_ANALOG(GPIOB_VSYS_SENSE) |                          \
                                          PIN_MODE_OUTPUT(GPIOB_POWER_EN) |                            \
@@ -570,6 +576,9 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PC14 - SYS_WARMRST_N                 (output opendrain high)
  * PC15 - BT_RST                        (output opendrain high)
  */
+#define VAL_GPIOC_IGNORE                (PIN_IGNORE(GPIOC_CHARGE_EN1_N) |                             \
+                                         PIN_IGNORE(GPIOC_SYS_INT_N) |                                \
+                                         PIN_IGNORE(GPIOC_SYS_PD_N)) & 0
 #define VAL_GPIOC_MODER                 (PIN_MODE_INPUT(GPIOC_CHARGE_STAT1A) |                        \
                                          PIN_MODE_INPUT(GPIOC_GAUGE_BATLOW1) |                        \
                                          PIN_MODE_INPUT(GPIOC_GAUGE_BATGD1_N) |                       \
@@ -687,6 +696,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PD14 - PIN14                         (input floating)
  * PD15 - PIN15                         (input floating)
  */
+#define VAL_GPIOD_IGNORE                (PIN_IGNORE(GPIOD_CHARGE_EN2_N)) & 0
 #define VAL_GPIOD_MODER                 (PIN_MODE_INPUT(GPIOD_PIN0) |                                 \
                                          PIN_MODE_INPUT(GPIOD_PIN1) |                                 \
                                          PIN_MODE_OUTPUT(GPIOD_CHARGE_EN2_N) |                        \
@@ -804,6 +814,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PE14 - PIN14                         (input floating)
  * PE15 - PIN15                         (input floating)
  */
+#define VAL_GPIOE_IGNORE                0
 #define VAL_GPIOE_MODER                 (PIN_MODE_INPUT(GPIOE_PIN0) |                                 \
                                          PIN_MODE_INPUT(GPIOE_PIN1) |                                 \
                                          PIN_MODE_INPUT(GPIOE_PIN2) |                                 \
@@ -921,6 +932,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PF14 - PIN14                         (input floating)
  * PF15 - PIN15                         (input floating)
  */
+#define VAL_GPIOF_IGNORE                0
 #define VAL_GPIOF_MODER                 (PIN_MODE_INPUT(GPIOF_PIN0) |                                 \
                                          PIN_MODE_INPUT(GPIOF_PIN1) |                                 \
                                          PIN_MODE_INPUT(GPIOF_PIN2) |                                 \
@@ -1038,6 +1050,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PG14 - PIN14                         (input floating)
  * PG15 - PIN15                         (input floating)
  */
+#define VAL_GPIOG_IGNORE                0
 #define VAL_GPIOG_MODER                 (PIN_MODE_INPUT(GPIOG_PIN0) |                                 \
                                          PIN_MODE_INPUT(GPIOG_PIN1) |                                 \
                                          PIN_MODE_INPUT(GPIOG_PIN2) |                                 \
@@ -1155,6 +1168,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PH14 - PIN14                         (input floating)
  * PH15 - PIN15                         (input floating)
  */
+#define VAL_GPIOH_IGNORE                0
 #define VAL_GPIOH_MODER                 (PIN_MODE_INPUT(GPIOH_OSC_IN) |                               \
                                          PIN_MODE_INPUT(GPIOH_OSC_OUT) |                              \
                                          PIN_MODE_INPUT(GPIOH_PIN2) |                                 \
@@ -1272,6 +1286,7 @@ along with this program.  If not, see <http://www.gnu.org/licenses/>.
  * PI14 - PIN14                         (input floating)
  * PI15 - PIN15                         (input floating)
  */
+#define VAL_GPIOI_IGNORE                0
 #define VAL_GPIOI_MODER                 (PIN_MODE_INPUT(GPIOI_PIN0) |                                 \
                                          PIN_MODE_INPUT(GPIOI_PIN1) |                                 \
                                          PIN_MODE_INPUT(GPIOI_PIN2) |                                 \
