LCOV - code coverage report
Current view: top level - zephyr/dt-bindings/pinctrl - silabs-pinctrl-dbus.h Coverage Total Hit
Test: new.info Lines: 0.0 % 17 0
Test Date: 2025-09-05 16:43:28

            Line data    Source code
       1            0 : /*
       2              :  * Copyright (c) 2024 Silicon Labs
       3              :  * SPDX-License-Identifier: Apache-2.0
       4              :  */
       5              : 
       6              : #ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_SILABS_PINCTRL_DBUS_H_
       7              : #define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_SILABS_PINCTRL_DBUS_H_
       8              : 
       9              : #include <zephyr/dt-bindings/dt-util.h>
      10              : 
      11              : /*
      12              :  * Silabs Series 2 DBUS configuration is encoded in a 32-bit bitfield organized as follows:
      13              :  *
      14              :  * 31    : Whether the configuration represents an analog pin
      15              :  * If digital (bit 31 == 0):
      16              :  * 30    : Reserved
      17              :  * 29    : Route register presence (fixed routes have no route register)
      18              :  * 28..24: Route register offset in words from peripheral config (offset of <fun>ROUTE
      19              :  *         register in GPIO_<periph>ROUTE_TypeDef)
      20              :  * 23..19: Enable bit (offset into ROUTEEN register for given function)
      21              :  * 18    : Enable bit presence (some inputs are auto-enabled)
      22              :  * 17..8 : Peripheral config offset in words from DBUS base within GPIO (offset of <periph>ROUTE[n]
      23              :  *         register in GPIO_TypeDef minus offset of first route register [DBGROUTEPEN, 0x440])
      24              :  *  7..4 : GPIO pin
      25              :  *  3..0 : GPIO port
      26              :  * If analog (bit 31 == 1):
      27              :  * 15..14: Bus selection (A, B, CD)
      28              :  * 13..12: Bus selection (EVEN0, EVEN1, ODD0, ODD1)
      29              :  * 11..8 : Peripheral selection (bit in GPIO_nBUSALLOC bitfield)
      30              :  * 7 ..0 : Reserved
      31              :  */
      32              : 
      33            0 : #define SILABS_PINCTRL_GPIO_PORT_MASK   0x0000000FUL
      34            0 : #define SILABS_PINCTRL_GPIO_PIN_MASK    0x000000F0UL
      35            0 : #define SILABS_PINCTRL_PERIPH_BASE_MASK 0x0003FF00UL
      36            0 : #define SILABS_PINCTRL_HAVE_EN_MASK     0x00040000UL
      37            0 : #define SILABS_PINCTRL_EN_BIT_MASK      0x00F80000UL
      38            0 : #define SILABS_PINCTRL_ROUTE_MASK       0x1F000000UL
      39            0 : #define SILABS_PINCTRL_HAVE_ROUTE_MASK  0x20000000UL
      40              : 
      41            0 : #define SILABS_PINCTRL_ANALOG_MASK      0x80000000UL
      42            0 : #define SILABS_PINCTRL_ABUS_BUS_MASK    0x0000C000UL
      43            0 : #define SILABS_PINCTRL_ABUS_PARITY_MASK 0x00003000UL
      44            0 : #define SILABS_PINCTRL_ABUS_PERIPH_MASK 0x00000F00UL
      45              : 
      46            0 : #define SILABS_PINCTRL_UNUSED 0xFF
      47            0 : #define SILABS_PINCTRL_ANALOG 0xAA
      48              : 
      49            0 : #define SILABS_DBUS(port, pin, periph_base, en_present, en_bit, route)                             \
      50              :         (FIELD_PREP(SILABS_PINCTRL_GPIO_PORT_MASK, port) |                                         \
      51              :          FIELD_PREP(SILABS_PINCTRL_GPIO_PIN_MASK, pin) |                                           \
      52              :          FIELD_PREP(SILABS_PINCTRL_PERIPH_BASE_MASK, periph_base) |                                \
      53              :          FIELD_PREP(SILABS_PINCTRL_HAVE_EN_MASK, en_present) |                                     \
      54              :          FIELD_PREP(SILABS_PINCTRL_EN_BIT_MASK, en_bit) |                                          \
      55              :          FIELD_PREP(SILABS_PINCTRL_ROUTE_MASK, route) |                                            \
      56              :          FIELD_PREP(SILABS_PINCTRL_HAVE_ROUTE_MASK, 1))
      57              : 
      58            0 : #define SILABS_FIXED_ROUTE(port, pin, periph_base, en_bit)                                         \
      59              :         (FIELD_PREP(SILABS_PINCTRL_GPIO_PORT_MASK, port) |                                         \
      60              :          FIELD_PREP(SILABS_PINCTRL_GPIO_PIN_MASK, pin) |                                           \
      61              :          FIELD_PREP(SILABS_PINCTRL_PERIPH_BASE_MASK, periph_base) |                                \
      62              :          FIELD_PREP(SILABS_PINCTRL_HAVE_EN_MASK, 1) |                                              \
      63              :          FIELD_PREP(SILABS_PINCTRL_EN_BIT_MASK, en_bit) |                                          \
      64              :          FIELD_PREP(SILABS_PINCTRL_HAVE_ROUTE_MASK, 0))
      65              : 
      66            0 : #define SILABS_ABUS(bus, parity, peripheral)                                                       \
      67              :         (FIELD_PREP(SILABS_PINCTRL_ANALOG_MASK, 1) |                                               \
      68              :          FIELD_PREP(SILABS_PINCTRL_ABUS_BUS_MASK, bus) |                                           \
      69              :          FIELD_PREP(SILABS_PINCTRL_ABUS_PARITY_MASK, parity) |                                     \
      70              :          FIELD_PREP(SILABS_PINCTRL_ABUS_PERIPH_MASK, peripheral))
      71              : 
      72              : #endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_SILABS_PINCTRL_DBUS_H_ */
        

Generated by: LCOV version 2.0-1