LCOV - code coverage report
Current view: top level - zephyr/drivers/pinctrl - pinctrl_soc_sam_common.h Coverage Total Hit
Test: new.info Lines: 15.8 % 19 3
Test Date: 2025-03-11 06:50:38

            Line data    Source code
       1            1 : /*
       2              :  * Copyright (c) 2022, Gerson Fernando Budke <nandojve@gmail.com>
       3              :  *
       4              :  * SPDX-License-Identifier: Apache-2.0
       5              :  */
       6              : 
       7              : /**
       8              :  * @file
       9              :  * Atmel SAM SoC specific helpers for pinctrl driver
      10              :  */
      11              : 
      12              : #ifndef ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_SOC_SAM_COMMON_H_
      13              : #define ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_SOC_SAM_COMMON_H_
      14              : 
      15              : #include <zephyr/devicetree.h>
      16              : #include <zephyr/types.h>
      17              : #include <dt-bindings/pinctrl/atmel_sam_pinctrl.h>
      18              : 
      19              : #ifdef __cplusplus
      20              : extern "C" {
      21              : #endif
      22              : 
      23              : /** @cond INTERNAL_HIDDEN */
      24              : 
      25              : /** @brief Type for SAM pin.
      26              :  *
      27              :  * Bits:
      28              :  * -  0-15: SAM pinmux bit field (@ref SAM_PINMUX).
      29              :  * - 16-21: Pin flags bit field (@ref SAM_PINFLAGS).
      30              :  * - 22-31: Reserved.
      31              :  */
      32              : typedef uint32_t pinctrl_soc_pin_t;
      33              : 
      34              : /**
      35              :  * @brief Utility macro to initialize each pin.
      36              :  *
      37              :  * @param node_id Node identifier.
      38              :  * @param prop Property name.
      39              :  * @param idx Property entry index.
      40              :  */
      41              : #if defined(CONFIG_SOC_FAMILY_ATMEL_SAM)
      42              : #define Z_PINCTRL_STATE_PIN_INIT(node_id, prop, idx)                            \
      43              :         ((DT_PROP_BY_IDX(node_id, prop, idx)   << SAM_PINCTRL_PINMUX_POS) \
      44              :          | (DT_PROP(node_id, bias_pull_up)     << SAM_PINCTRL_PULLUP_POS) \
      45              :          | (DT_PROP(node_id, bias_pull_down)   << SAM_PINCTRL_PULLDOWN_POS)       \
      46              :          | (DT_PROP(node_id, drive_open_drain) << SAM_PINCTRL_OPENDRAIN_POS)      \
      47              :         ),
      48              : #else /* CONFIG_SOC_FAMILY_ATMEL_SAM0 */
      49              : #define Z_PINCTRL_STATE_PIN_INIT(node_id, prop, idx)                              \
      50              :         ((DT_PROP_BY_IDX(node_id, prop, idx)     << SAM_PINCTRL_PINMUX_POS)         \
      51              :          | (DT_PROP(node_id, bias_pull_up)       << SAM_PINCTRL_PULLUP_POS)         \
      52              :          | (DT_PROP(node_id, bias_pull_down)     << SAM_PINCTRL_PULLDOWN_POS)       \
      53              :          | (DT_PROP(node_id, input_enable)       << SAM_PINCTRL_INPUTENABLE_POS)  \
      54              :          | (DT_PROP(node_id, output_enable)      << SAM_PINCTRL_OUTPUTENABLE_POS) \
      55              :          | (DT_ENUM_IDX(node_id, drive_strength) << SAM_PINCTRL_DRIVESTRENGTH_POS)\
      56              :         ),
      57              : #endif
      58              : 
      59              : /**
      60              :  * @brief Utility macro to initialize state pins contained in a given property.
      61              :  *
      62              :  * @param node_id Node identifier.
      63              :  * @param prop Property name describing state pins.
      64              :  */
      65              : #define Z_PINCTRL_STATE_PINS_INIT(node_id, prop)                                \
      66              :         {DT_FOREACH_CHILD_VARGS(DT_PHANDLE(node_id, prop),                      \
      67              :                                 DT_FOREACH_PROP_ELEM, pinmux,                   \
      68              :                                 Z_PINCTRL_STATE_PIN_INIT)}
      69              : 
      70              : /** @endcond */
      71              : 
      72              : 
      73              : /**
      74              :  * @brief Pin flags/attributes
      75              :  * @anchor SAM_PINFLAGS
      76              :  *
      77              :  * @{
      78              :  */
      79              : 
      80            1 : #define SAM_PINCTRL_FLAGS_DEFAULT       (0U)
      81            0 : #define SAM_PINCTRL_FLAGS_POS           (0U)
      82            0 : #define SAM_PINCTRL_FLAGS_MASK          (0x3F << SAM_PINCTRL_FLAGS_POS)
      83            0 : #define SAM_PINCTRL_FLAG_MASK           (1U)
      84            0 : #define SAM_PINCTRL_PULLUP_POS          (SAM_PINCTRL_FLAGS_POS)
      85            0 : #define SAM_PINCTRL_PULLUP              (1U << SAM_PINCTRL_PULLUP_POS)
      86            0 : #define SAM_PINCTRL_PULLDOWN_POS        (SAM_PINCTRL_PULLUP_POS + 1U)
      87            0 : #define SAM_PINCTRL_PULLDOWN            (1U << SAM_PINCTRL_PULLDOWN_POS)
      88            0 : #define SAM_PINCTRL_OPENDRAIN_POS       (SAM_PINCTRL_PULLDOWN_POS + 1U)
      89            0 : #define SAM_PINCTRL_OPENDRAIN           (1U << SAM_PINCTRL_OPENDRAIN_POS)
      90            0 : #define SAM_PINCTRL_INPUTENABLE_POS     (SAM_PINCTRL_OPENDRAIN_POS + 1U)
      91            0 : #define SAM_PINCTRL_INPUTENABLE         (1U << SAM_PINCTRL_INPUTENABLE_POS)
      92            0 : #define SAM_PINCTRL_OUTPUTENABLE_POS    (SAM_PINCTRL_INPUTENABLE_POS + 1U)
      93            0 : #define SAM_PINCTRL_OUTPUTENABLE        (1U << SAM_PINCTRL_OUTPUTENABLE_POS)
      94            0 : #define SAM_PINCTRL_DRIVESTRENGTH_POS   (SAM_PINCTRL_OUTPUTENABLE_POS + 1U)
      95            0 : #define SAM_PINCTRL_DRIVESTRENGTH       (1U << SAM_PINCTRL_DRIVESTRENGTH_POS)
      96              : 
      97              : /** @} */
      98              : 
      99              : /**
     100              :  * Obtain Flag value from pinctrl_soc_pin_t configuration.
     101              :  *
     102              :  * @param pincfg pinctrl_soc_pin_t bit field value.
     103              :  * @param pos    attribute/flags bit position (@ref SAM_PINFLAGS).
     104              :  */
     105            1 : #define SAM_PINCTRL_FLAG_GET(pincfg, pos) \
     106              :         (((pincfg) >> pos) & SAM_PINCTRL_FLAG_MASK)
     107              : 
     108            0 : #define SAM_PINCTRL_FLAGS_GET(pincfg) \
     109              :         (((pincfg) >> SAM_PINCTRL_FLAGS_POS) & SAM_PINCTRL_FLAGS_MASK)
     110              : 
     111              : #ifdef __cplusplus
     112              : }
     113              : #endif
     114              : 
     115              : #endif /* ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_SOC_SAM_COMMON_H_ */
        

Generated by: LCOV version 2.0-1