| /** |
| * @file |
| * @brief GPIO Devicetree macro public API header file. |
| */ |
| |
| /* |
| * Copyright (c) 2020, Linaro Ltd. |
| * Copyright (c) 2020 Nordic Semiconductor |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| #ifndef ZEPHYR_INCLUDE_DEVICETREE_GPIO_H_ |
| #define ZEPHYR_INCLUDE_DEVICETREE_GPIO_H_ |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /** |
| * @defgroup devicetree-gpio Devicetree GPIO API |
| * @ingroup devicetree |
| * @{ |
| */ |
| |
| /** |
| * @brief Get gpio controller "name" (label property) at an index |
| * |
| * It's an error if the GPIO controller referenced by the phandle |
| * in property "gpio_pha" at index "idx" has no label property. |
| * |
| * Example devicetree fragment: |
| * |
| * gpio1: gpio@... { |
| * label = "GPIO_1"; |
| * }; |
| * |
| * gpio2: gpio@... { |
| * label = "GPIO_2"; |
| * }; |
| * |
| * n: node { |
| * gpios = <&gpio1 10 20>, <&gpio2 30 40>; |
| * }; |
| * |
| * Example usage: |
| * |
| * DT_GPIO_LABEL_BY_IDX(DT_NODELABEL(n), gpios, 1) // "GPIO_2" |
| * |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return the label property for the referenced node at index idx |
| * @see DT_PHANDLE_BY_IDX() |
| */ |
| #define DT_GPIO_LABEL_BY_IDX(node_id, gpio_pha, idx) \ |
| DT_PROP_BY_PHANDLE_IDX(node_id, gpio_pha, idx, label) |
| |
| /** |
| * @brief Equivalent to DT_GPIO_LABEL_BY_IDX(node_id, gpio_pha, 0) |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the label property for the named specifier at index 0 |
| * @see DT_GPIO_LABEL_BY_IDX() |
| */ |
| #define DT_GPIO_LABEL(node_id, gpio_pha) \ |
| DT_GPIO_LABEL_BY_IDX(node_id, gpio_pha, 0) |
| |
| /** |
| * @brief Get gpio controller 'pin' at an index |
| * |
| * This macro only works for GPIO controllers that specify a 'pin' |
| * field in the phandle-array specifier. Refer to the specific GPIO |
| * controller binding if needed. |
| * |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return the pin value for the named specifier at index idx |
| * @see DT_PHA_BY_IDX() |
| * @see DT_PHA() |
| */ |
| #define DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, idx) \ |
| DT_PHA_BY_IDX(node_id, gpio_pha, idx, pin) |
| |
| /** |
| * @brief Equivalent to DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0) |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the pin value for the named specifier at index idx |
| * @see DT_GPIO_PIN_BY_IDX() |
| */ |
| #define DT_GPIO_PIN(node_id, gpio_pha) \ |
| DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0) |
| |
| /** |
| * @brief Get gpio controller 'flags' at an index |
| * |
| * This macro only works for GPIO controllers that specify a 'flags' |
| * field in the phandle-array specifier. Refer to the specific GPIO |
| * controller binding if needed. |
| * |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return the flags value for the named specifier at index idx |
| * @see DT_PHA_BY_IDX() |
| * @see DT_PHA() |
| */ |
| #define DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, idx) \ |
| DT_PHA_BY_IDX(node_id, gpio_pha, idx, flags) |
| |
| /** |
| * @brief Equivalent to DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0) |
| * @param node_id node identifier |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the flags value for the named specifier at index idx |
| * @see DT_GPIO_FLAGS_BY_IDX() |
| */ |
| #define DT_GPIO_FLAGS(node_id, gpio_pha) \ |
| DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0) |
| |
| /** |
| * @brief Get gpio controller "name" at an index (see @ref DT_GPIO_LABEL_BY_IDX) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return the label property for the named specifier at index idx |
| */ |
| #define DT_INST_GPIO_LABEL_BY_IDX(inst, gpio_pha, idx) \ |
| DT_GPIO_LABEL_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx) |
| |
| /** |
| * @brief Equivalent to DT_INST_GPIO_LABEL_BY_IDX(inst, gpio_pha, 0) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the label property for the named specifier at index 0 |
| */ |
| #define DT_INST_GPIO_LABEL(inst, gpio_pha) \ |
| DT_INST_GPIO_LABEL_BY_IDX(inst, gpio_pha, 0) |
| |
| /** |
| * @brief Get gpio controller "pin" at an index (see @ref DT_GPIO_PIN_BY_IDX) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return the pin value for the named specifier at index idx |
| */ |
| #define DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, idx) \ |
| DT_GPIO_PIN_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx) |
| |
| /** |
| * @brief Equivalent to DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the pin value for the named specifier at index 0 |
| * @see DT_INST_GPIO_PIN_BY_IDX() |
| */ |
| #define DT_INST_GPIO_PIN(inst, gpio_pha) \ |
| DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0) |
| |
| /** |
| * @brief Get a devicetree property value (see @ref DT_GPIO_FLAGS_BY_IDX) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @param idx logical index into the property |
| * @return a representation of the property's value |
| */ |
| #define DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, idx) \ |
| DT_GPIO_FLAGS_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx) |
| |
| /** |
| * @brief Equivalent to DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0) |
| * @param inst instance number |
| * @param gpio_pha lowercase-and-underscores GPIO property with |
| * type "phandle-array" |
| * @return the flags value for the named specifier at index 0 |
| * @see DT_INST_GPIO_FLAGS_BY_IDX() |
| */ |
| #define DT_INST_GPIO_FLAGS(inst, gpio_pha) \ |
| DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0) |
| |
| /** |
| * @} |
| */ |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| |
| |
| #endif /* ZEPHYR_INCLUDE_DEVICETREE_GPIO_H_ */ |