LCOV - code coverage report
Current view: top level - zephyr/dt-bindings/pinctrl - stm32f1-pinctrl.h Coverage Total Hit
Test: new.info Lines: 8.9 % 45 4
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2017 Linaro Limited
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_STM32F1_PINCTRL_H_
       8              : #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_STM32F1_PINCTRL_H_
       9              : 
      10              : #include <zephyr/dt-bindings/pinctrl/stm32-pinctrl-common.h>
      11              : #include <zephyr/dt-bindings/pinctrl/stm32f1-afio.h>
      12              : 
      13              : /* Adapted from Linux: include/dt-bindings/pinctrl/stm32-pinfunc.h */
      14              : 
      15              : /**
      16              :  * @brief Macro to generate pinmux int using port, pin number and mode arguments
      17              :  * This is adapted from Linux equivalent st,stm32f429-pinctrl binding
      18              :  */
      19              : 
      20            1 : #define STM32_MODE_SHIFT  0U
      21            0 : #define STM32_MODE_MASK   0x3U
      22            0 : #define STM32_LINE_SHIFT  2U
      23            0 : #define STM32_LINE_MASK   0xFU
      24            0 : #define STM32_PORT_SHIFT  6U
      25            0 : #define STM32_PORT_MASK   0xFU
      26            0 : #define STM32_REMAP_SHIFT 10U
      27            0 : #define STM32_REMAP_MASK  0x3FFU
      28              : 
      29              : /**
      30              :  * @brief Pin configuration configuration bit field.
      31              :  *
      32              :  * Fields:
      33              :  *
      34              :  * - mode  [ 0 : 1 ]
      35              :  * - line  [ 2 : 5 ]
      36              :  * - port  [ 6 : 9 ]
      37              :  * - remap [ 10 : 19 ]
      38              :  *
      39              :  * @param port Port ('A'..'K')
      40              :  * @param line Pin (0..15)
      41              :  * @param mode Pin mode (ANALOG, GPIO_IN, ALTERNATE).
      42              :  * @param remap Pin remapping configuration (NO_REMAP, REMAP_1, ...)
      43              :  */
      44            1 : #define STM32F1_PINMUX(port, line, mode, remap)                                \
      45              :                 (((((port) - 'A') & STM32_PORT_MASK) << STM32_PORT_SHIFT) |    \
      46              :                 (((line) & STM32_LINE_MASK) << STM32_LINE_SHIFT) |           \
      47              :                 (((mode) & STM32_MODE_MASK) << STM32_MODE_SHIFT) |           \
      48              :                 (((remap) & STM32_REMAP_MASK) << STM32_REMAP_SHIFT))
      49              : 
      50              : /**
      51              :  * @brief Pin modes
      52              :  */
      53              : 
      54            1 : #define ALTERNATE       0x0  /* Alternate function output */
      55            0 : #define GPIO_IN         0x1  /* Input */
      56            0 : #define ANALOG          0x2  /* Analog */
      57            0 : #define GPIO_OUT        0x3  /* Output */
      58              : 
      59              : /**
      60              :  * @brief PIN configuration bitfield
      61              :  *
      62              :  * Pin configuration is coded with the following
      63              :  * fields
      64              :  *    GPIO I/O Mode       [ 0 ]
      65              :  *    GPIO Input config   [ 1 : 2 ]
      66              :  *    GPIO Output speed   [ 3 : 4 ]
      67              :  *    GPIO Output PP/OD   [ 5 ]
      68              :  *    GPIO Output AF/GP   [ 6 ]
      69              :  *    GPIO PUPD Config    [ 7 : 8 ]
      70              :  *    GPIO ODR            [ 9 ]
      71              :  *
      72              :  * Applicable to STM32F1 series
      73              :  */
      74              : 
      75              : /* Port Mode */
      76            1 : #define STM32_MODE_INPUT                (0x0 << STM32_MODE_INOUT_SHIFT)
      77            0 : #define STM32_MODE_OUTPUT               (0x1 << STM32_MODE_INOUT_SHIFT)
      78            0 : #define STM32_MODE_INOUT_MASK           0x1
      79            0 : #define STM32_MODE_INOUT_SHIFT          0
      80              : 
      81              : /* Input Port configuration */
      82            0 : #define STM32_CNF_IN_ANALOG             (0x0 << STM32_CNF_IN_SHIFT)
      83            0 : #define STM32_CNF_IN_FLOAT              (0x1 << STM32_CNF_IN_SHIFT)
      84            0 : #define STM32_CNF_IN_PUPD               (0x2 << STM32_CNF_IN_SHIFT)
      85            0 : #define STM32_CNF_IN_MASK               0x3
      86            0 : #define STM32_CNF_IN_SHIFT              1
      87              : 
      88              : /* Output Port configuration */
      89            0 : #define STM32_MODE_OUTPUT_MAX_10        (0x0 << STM32_MODE_OSPEED_SHIFT)
      90            0 : #define STM32_MODE_OUTPUT_MAX_2         (0x1 << STM32_MODE_OSPEED_SHIFT)
      91            0 : #define STM32_MODE_OUTPUT_MAX_50        (0x2 << STM32_MODE_OSPEED_SHIFT)
      92            0 : #define STM32_MODE_OSPEED_MASK          0x3
      93            0 : #define STM32_MODE_OSPEED_SHIFT         3
      94              : 
      95            0 : #define STM32_CNF_PUSH_PULL             (0x0 << STM32_CNF_OUT_0_SHIFT)
      96            0 : #define STM32_CNF_OPEN_DRAIN            (0x1 << STM32_CNF_OUT_0_SHIFT)
      97            0 : #define STM32_CNF_OUT_0_MASK            0x1
      98            0 : #define STM32_CNF_OUT_0_SHIFT           5
      99              : 
     100            0 : #define STM32_CNF_GP_OUTPUT             (0x0 << STM32_CNF_OUT_1_SHIFT)
     101            0 : #define STM32_CNF_ALT_FUNC              (0x1 << STM32_CNF_OUT_1_SHIFT)
     102            0 : #define STM32_CNF_OUT_1_MASK            0x1
     103            0 : #define STM32_CNF_OUT_1_SHIFT           6
     104              : 
     105              : /* GPIO High impedance/Pull-up/Pull-down */
     106            0 : #define STM32_PUPD_NO_PULL              (0x0 << STM32_PUPD_SHIFT)
     107            0 : #define STM32_PUPD_PULL_UP              (0x1 << STM32_PUPD_SHIFT)
     108            0 : #define STM32_PUPD_PULL_DOWN            (0x2 << STM32_PUPD_SHIFT)
     109            0 : #define STM32_PUPD_MASK                 0x3
     110            0 : #define STM32_PUPD_SHIFT                7
     111              : 
     112              : /* GPIO plain output value */
     113            0 : #define STM32_ODR_0                     (0x0 << STM32_ODR_SHIFT)
     114            0 : #define STM32_ODR_1                     (0x1 << STM32_ODR_SHIFT)
     115            0 : #define STM32_ODR_MASK                  0x1
     116            0 : #define STM32_ODR_SHIFT                 9
     117              : 
     118              : #endif  /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_STM32F1_PINCTRL_H_ */
        

Generated by: LCOV version 2.0-1