Skip to content

Commit

Permalink
devicetree: Add DT_HAS_ALIAS macro
Browse files Browse the repository at this point in the history
Add 'DT_HAS_ALIAS' macro to verify node alias existence.

Signed-off-by: James Roy <[email protected]>
  • Loading branch information
rruuaanng committed Nov 6, 2024
1 parent 2f23313 commit 7bd2e7e
Show file tree
Hide file tree
Showing 3 changed files with 11 additions and 0 deletions.
2 changes: 2 additions & 0 deletions doc/build/dts/api-usage.rst
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,8 @@ By alias
:zephyr:code-sample:`blinky`, which uses the ``led0`` alias) that need to
refer to *some* device of a particular type ("the board's user LED") but
don't care which one is used.
You may also use :c:macro:`DT_HAS_ALIAS()` to verify whether an alias
node exists.

By instance number
This is done primarily by device drivers, as instance numbers are a way to
Expand Down
7 changes: 7 additions & 0 deletions include/zephyr/devicetree.h
Original file line number Diff line number Diff line change
Expand Up @@ -239,6 +239,13 @@
*/
#define DT_ALIAS(alias) DT_CAT(DT_N_ALIAS_, alias)

/**
* @brief Test if the devicetree has a given alias
* @param alias_name lowercase-and-underscores devicetree alias name
* @return 1 if the alias exists and refers to a node, 0 otherwise
*/
#define DT_HAS_ALIAS(alias_name) DT_NODE_EXISTS(DT_ALIAS(alias_name))

/**
* @brief Get a node identifier for an instance of a compatible
*
Expand Down
2 changes: 2 additions & 0 deletions tests/lib/devicetree/api/src/main.c
Original file line number Diff line number Diff line change
Expand Up @@ -127,6 +127,8 @@ ZTEST(devicetree_api, test_path_props)

ZTEST(devicetree_api, test_alias_props)
{
zassert_equal(DT_HAS_ALIAS(test_alias), 1, "");
zassert_equal(DT_HAS_ALIAS(test_alias_none), 0, "");
zassert_equal(DT_NUM_REGS(TEST_ALIAS), 1, "");
zassert_equal(DT_REG_ADDR(TEST_ALIAS), 0xdeadbeef, "");
zassert_equal(DT_REG_SIZE(TEST_ALIAS), 0x1000, "");
Expand Down

0 comments on commit 7bd2e7e

Please sign in to comment.