LCOV - code coverage report
Current view: top level - zephyr/devicetree - reset.h Hit Total Coverage
Test: new.info Lines: 17 17 100.0 %
Date: 2024-12-22 00:14:23

          Line data    Source code
       1           1 : /**
       2             :  * @file
       3             :  * @brief Reset Controller Devicetree macro public API header file.
       4             :  */
       5             : 
       6             : /*
       7             :  * Copyright (c) 2022, Andrei-Edward Popa
       8             :  *
       9             :  * SPDX-License-Identifier: Apache-2.0
      10             :  */
      11             : 
      12             : #ifndef ZEPHYR_INCLUDE_DEVICETREE_RESET_H_
      13             : #define ZEPHYR_INCLUDE_DEVICETREE_RESET_H_
      14             : 
      15             : #ifdef __cplusplus
      16             : extern "C" {
      17             : #endif
      18             : 
      19             : /**
      20             :  * @defgroup devicetree-reset-controller Devicetree Reset Controller API
      21             :  * @ingroup devicetree
      22             :  * @{
      23             :  */
      24             : 
      25             : /**
      26             :  * @brief Get the node identifier for the controller phandle from a
      27             :  *        "resets" phandle-array property at an index
      28             :  *
      29             :  * Example devicetree fragment:
      30             :  *
      31             :  *     reset1: reset-controller@... { ... };
      32             :  *
      33             :  *     reset2: reset-controller@... { ... };
      34             :  *
      35             :  *     n: node {
      36             :  *             resets = <&reset1 10>, <&reset2 20>;
      37             :  *     };
      38             :  *
      39             :  * Example usage:
      40             :  *
      41             :  *     DT_RESET_CTLR_BY_IDX(DT_NODELABEL(n), 0)) // DT_NODELABEL(reset1)
      42             :  *     DT_RESET_CTLR_BY_IDX(DT_NODELABEL(n), 1)) // DT_NODELABEL(reset2)
      43             :  *
      44             :  * @param node_id node identifier
      45             :  * @param idx logical index into "resets"
      46             :  * @return the node identifier for the reset controller referenced at
      47             :  *         index "idx"
      48             :  * @see DT_PHANDLE_BY_IDX()
      49             :  */
      50           1 : #define DT_RESET_CTLR_BY_IDX(node_id, idx) \
      51             :         DT_PHANDLE_BY_IDX(node_id, resets, idx)
      52             : 
      53             : /**
      54             :  * @brief Equivalent to DT_RESET_CTLR_BY_IDX(node_id, 0)
      55             :  * @param node_id node identifier
      56             :  * @return a node identifier for the reset controller at index 0
      57             :  *         in "resets"
      58             :  * @see DT_RESET_CTLR_BY_IDX()
      59             :  */
      60           1 : #define DT_RESET_CTLR(node_id) \
      61             :         DT_RESET_CTLR_BY_IDX(node_id, 0)
      62             : 
      63             : /**
      64             :  * @brief Get the node identifier for the controller phandle from a
      65             :  *        resets phandle-array property by name
      66             :  *
      67             :  * Example devicetree fragment:
      68             :  *
      69             :  *     reset1: reset-controller@... { ... };
      70             :  *
      71             :  *     reset2: reset-controller@... { ... };
      72             :  *
      73             :  *     n: node {
      74             :  *             resets = <&reset1 10>, <&reset2 20>;
      75             :  *             reset-names = "alpha", "beta";
      76             :  *     };
      77             :  *
      78             :  * Example usage:
      79             :  *
      80             :  *     DT_RESET_CTLR_BY_NAME(DT_NODELABEL(n), alpha) // DT_NODELABEL(reset1)
      81             :  *     DT_RESET_CTLR_BY_NAME(DT_NODELABEL(n), beta) // DT_NODELABEL(reset2)
      82             :  *
      83             :  * @param node_id node identifier
      84             :  * @param name lowercase-and-underscores name of a resets element
      85             :  *             as defined by the node's reset-names property
      86             :  * @return the node identifier for the reset controller referenced by name
      87             :  * @see DT_PHANDLE_BY_NAME()
      88             :  */
      89           1 : #define DT_RESET_CTLR_BY_NAME(node_id, name) \
      90             :         DT_PHANDLE_BY_NAME(node_id, resets, name)
      91             : 
      92             : /**
      93             :  * @brief Get a reset specifier's cell value at an index
      94             :  *
      95             :  * Example devicetree fragment:
      96             :  *
      97             :  *     reset: reset-controller@... {
      98             :  *             compatible = "vnd,reset";
      99             :  *             #reset-cells = <1>;
     100             :  *     };
     101             :  *
     102             :  *     n: node {
     103             :  *             resets = <&reset 10>;
     104             :  *     };
     105             :  *
     106             :  * Bindings fragment for the vnd,reset compatible:
     107             :  *
     108             :  *     reset-cells:
     109             :  *       - id
     110             :  *
     111             :  * Example usage:
     112             :  *
     113             :  *     DT_RESET_CELL_BY_IDX(DT_NODELABEL(n), 0, id) // 10
     114             :  *
     115             :  * @param node_id node identifier for a node with a resets property
     116             :  * @param idx logical index into resets property
     117             :  * @param cell lowercase-and-underscores cell name
     118             :  * @return the cell value at index "idx"
     119             :  * @see DT_PHA_BY_IDX()
     120             :  */
     121           1 : #define DT_RESET_CELL_BY_IDX(node_id, idx, cell) \
     122             :         DT_PHA_BY_IDX(node_id, resets, idx, cell)
     123             : 
     124             : /**
     125             :  * @brief Get a reset specifier's cell value by name
     126             :  *
     127             :  * Example devicetree fragment:
     128             :  *
     129             :  *     reset: reset-controller@... {
     130             :  *             compatible = "vnd,reset";
     131             :  *             #reset-cells = <1>;
     132             :  *     };
     133             :  *
     134             :  *     n: node {
     135             :  *             resets = <&reset 10>;
     136             :  *             reset-names = "alpha";
     137             :  *     };
     138             :  *
     139             :  * Bindings fragment for the vnd,reset compatible:
     140             :  *
     141             :  *     reset-cells:
     142             :  *       - id
     143             :  *
     144             :  * Example usage:
     145             :  *
     146             :  *     DT_RESET_CELL_BY_NAME(DT_NODELABEL(n), alpha, id) // 10
     147             :  *
     148             :  * @param node_id node identifier for a node with a resets property
     149             :  * @param name lowercase-and-underscores name of a resets element
     150             :  *             as defined by the node's reset-names property
     151             :  * @param cell lowercase-and-underscores cell name
     152             :  * @return the cell value in the specifier at the named element
     153             :  * @see DT_PHA_BY_NAME()
     154             :  */
     155           1 : #define DT_RESET_CELL_BY_NAME(node_id, name, cell) \
     156             :         DT_PHA_BY_NAME(node_id, resets, name, cell)
     157             : 
     158             : /**
     159             :  * @brief Equivalent to DT_RESET_CELL_BY_IDX(node_id, 0, cell)
     160             :  * @param node_id node identifier for a node with a resets property
     161             :  * @param cell lowercase-and-underscores cell name
     162             :  * @return the cell value at index 0
     163             :  * @see DT_RESET_CELL_BY_IDX()
     164             :  */
     165           1 : #define DT_RESET_CELL(node_id, cell) \
     166             :         DT_RESET_CELL_BY_IDX(node_id, 0, cell)
     167             : 
     168             : /**
     169             :  * @brief Get the node identifier for the controller phandle from a
     170             :  *        "resets" phandle-array property at an index
     171             :  *
     172             :  * @param inst instance number
     173             :  * @param idx logical index into "resets"
     174             :  * @return the node identifier for the reset controller referenced at
     175             :  *         index "idx"
     176             :  * @see DT_RESET_CTLR_BY_IDX()
     177             :  */
     178           1 : #define DT_INST_RESET_CTLR_BY_IDX(inst, idx) \
     179             :         DT_RESET_CTLR_BY_IDX(DT_DRV_INST(inst), idx)
     180             : 
     181             : /**
     182             :  * @brief Equivalent to DT_INST_RESET_CTLR_BY_IDX(inst, 0)
     183             :  * @param inst instance number
     184             :  * @return a node identifier for the reset controller at index 0
     185             :  *         in "resets"
     186             :  * @see DT_RESET_CTLR()
     187             :  */
     188           1 : #define DT_INST_RESET_CTLR(inst) \
     189             :         DT_INST_RESET_CTLR_BY_IDX(inst, 0)
     190             : 
     191             : /**
     192             :  * @brief Get the node identifier for the controller phandle from a
     193             :  *        resets phandle-array property by name
     194             :  *
     195             :  * @param inst instance number
     196             :  * @param name lowercase-and-underscores name of a resets element
     197             :  *             as defined by the node's reset-names property
     198             :  * @return the node identifier for the reset controller referenced by
     199             :  *         the named element
     200             :  * @see DT_RESET_CTLR_BY_NAME()
     201             :  */
     202           1 : #define DT_INST_RESET_CTLR_BY_NAME(inst, name) \
     203             :         DT_RESET_CTLR_BY_NAME(DT_DRV_INST(inst), name)
     204             : 
     205             : /**
     206             :  * @brief Get a DT_DRV_COMPAT instance's reset specifier's cell value
     207             :  *        at an index
     208             :  * @param inst DT_DRV_COMPAT instance number
     209             :  * @param idx logical index into resets property
     210             :  * @param cell lowercase-and-underscores cell name
     211             :  * @return the cell value at index "idx"
     212             :  * @see DT_RESET_CELL_BY_IDX()
     213             :  */
     214           1 : #define DT_INST_RESET_CELL_BY_IDX(inst, idx, cell) \
     215             :         DT_RESET_CELL_BY_IDX(DT_DRV_INST(inst), idx, cell)
     216             : 
     217             : /**
     218             :  * @brief Get a DT_DRV_COMPAT instance's reset specifier's cell value by name
     219             :  * @param inst DT_DRV_COMPAT instance number
     220             :  * @param name lowercase-and-underscores name of a resets element
     221             :  *             as defined by the node's reset-names property
     222             :  * @param cell lowercase-and-underscores cell name
     223             :  * @return the cell value in the specifier at the named element
     224             :  * @see DT_RESET_CELL_BY_NAME()
     225             :  */
     226           1 : #define DT_INST_RESET_CELL_BY_NAME(inst, name, cell) \
     227             :         DT_RESET_CELL_BY_NAME(DT_DRV_INST(inst), name, cell)
     228             : 
     229             : /**
     230             :  * @brief Equivalent to DT_INST_RESET_CELL_BY_IDX(inst, 0, cell)
     231             :  * @param inst DT_DRV_COMPAT instance number
     232             :  * @param cell lowercase-and-underscores cell name
     233             :  * @return the value of the cell inside the specifier at index 0
     234             :  */
     235           1 : #define DT_INST_RESET_CELL(inst, cell) \
     236             :         DT_INST_RESET_CELL_BY_IDX(inst, 0, cell)
     237             : 
     238             : /**
     239             :  * @brief Get a Reset Controller specifier's id cell at an index
     240             :  *
     241             :  * This macro only works for Reset Controller specifiers with cells named "id".
     242             :  * Refer to the node's binding to check if necessary.
     243             :  *
     244             :  * Example devicetree fragment:
     245             :  *
     246             :  *     reset: reset-controller@... {
     247             :  *             compatible = "vnd,reset";
     248             :  *             #reset-cells = <1>;
     249             :  *     };
     250             :  *
     251             :  *     n: node {
     252             :  *             resets = <&reset 10>;
     253             :  *     };
     254             :  *
     255             :  * Bindings fragment for the vnd,reset compatible:
     256             :  *
     257             :  *     reset-cells:
     258             :  *       - id
     259             :  *
     260             :  * Example usage:
     261             :  *
     262             :  *     DT_RESET_ID_BY_IDX(DT_NODELABEL(n), 0) // 10
     263             :  *
     264             :  * @param node_id node identifier
     265             :  * @param idx logical index into "resets"
     266             :  * @return the id cell value at index "idx"
     267             :  * @see DT_PHA_BY_IDX()
     268             :  */
     269           1 : #define DT_RESET_ID_BY_IDX(node_id, idx) \
     270             :         DT_PHA_BY_IDX(node_id, resets, idx, id)
     271             : 
     272             : /**
     273             :  * @brief Equivalent to DT_RESET_ID_BY_IDX(node_id, 0)
     274             :  * @param node_id node identifier
     275             :  * @return the id cell value at index 0
     276             :  * @see DT_RESET_ID_BY_IDX()
     277             :  */
     278           1 : #define DT_RESET_ID(node_id) \
     279             :         DT_RESET_ID_BY_IDX(node_id, 0)
     280             : 
     281             : /**
     282             :  * @brief Get a DT_DRV_COMPAT instance's Reset Controller specifier's id cell value
     283             :  *        at an index
     284             :  * @param inst DT_DRV_COMPAT instance number
     285             :  * @param idx logical index into "resets"
     286             :  * @return the id cell value at index "idx"
     287             :  * @see DT_RESET_ID_BY_IDX()
     288             :  */
     289           1 : #define DT_INST_RESET_ID_BY_IDX(inst, idx) \
     290             :         DT_RESET_ID_BY_IDX(DT_DRV_INST(inst), idx)
     291             : 
     292             : /**
     293             :  * @brief Equivalent to DT_INST_RESET_ID_BY_IDX(inst, 0)
     294             :  * @param inst DT_DRV_COMPAT instance number
     295             :  * @return the id cell value at index 0
     296             :  * @see DT_INST_RESET_ID_BY_IDX()
     297             :  */
     298           1 : #define DT_INST_RESET_ID(inst) \
     299             :         DT_INST_RESET_ID_BY_IDX(inst, 0)
     300             : 
     301             : /**
     302             :  * @}
     303             :  */
     304             : 
     305             : #ifdef __cplusplus
     306             : }
     307             : #endif
     308             : 
     309             : #endif  /* ZEPHYR_INCLUDE_DEVICETREE_RESET_H_ */

Generated by: LCOV version 1.14