Zephyr API Documentation  3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
Devicetree GPIO API

Macros

#define DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, idx)    DT_PHANDLE_BY_IDX(node_id, gpio_pha, idx)
 Get the node identifier for the controller phandle from a gpio phandle-array property at an index.
 
#define DT_GPIO_CTLR(node_id, gpio_pha)    DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, 0)
 Equivalent to DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, 0)
 
#define DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, idx)    DT_PHA_BY_IDX(node_id, gpio_pha, idx, pin)
 Get a GPIO specifier's pin cell at an index.
 
#define DT_GPIO_PIN(node_id, gpio_pha)    DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0)
 Equivalent to DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0)
 
#define DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, idx)    DT_PHA_BY_IDX_OR(node_id, gpio_pha, idx, flags, 0)
 Get a GPIO specifier's flags cell at an index.
 
#define DT_GPIO_FLAGS(node_id, gpio_pha)    DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0)
 Equivalent to DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0)
 
#define DT_NUM_GPIO_HOGS(node_id)
 Get the number of GPIO hogs in a node.
 
#define DT_GPIO_HOG_PIN_BY_IDX(node_id, idx)    DT_CAT4(node_id, _GPIO_HOGS_IDX_, idx, _VAL_pin)
 Get a GPIO hog specifier's pin cell at an index.
 
#define DT_GPIO_HOG_FLAGS_BY_IDX(node_id, idx)
 Get a GPIO hog specifier's flags cell at an index.
 
#define DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, idx)    DT_GPIO_PIN_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx)
 Get a DT_DRV_COMPAT instance's GPIO specifier's pin cell value at an index.
 
#define DT_INST_GPIO_PIN(inst, gpio_pha)    DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0)
 Equivalent to DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0)
 
#define DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, idx)    DT_GPIO_FLAGS_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx)
 Get a DT_DRV_COMPAT instance's GPIO specifier's flags cell at an index.
 
#define DT_INST_GPIO_FLAGS(inst, gpio_pha)    DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0)
 Equivalent to DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0)
 

Detailed Description

Macro Definition Documentation

◆ DT_GPIO_CTLR

#define DT_GPIO_CTLR (   node_id,
  gpio_pha 
)     DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, 0)

#include <zephyr/devicetree/gpio.h>

Equivalent to DT_GPIO_CTLR_BY_IDX(node_id, gpio_pha, 0)

Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
Returns
a node identifier for the gpio controller at index 0 in "gpio_pha"
See also
DT_GPIO_CTLR_BY_IDX()

◆ DT_GPIO_CTLR_BY_IDX

#define DT_GPIO_CTLR_BY_IDX (   node_id,
  gpio_pha,
  idx 
)     DT_PHANDLE_BY_IDX(node_id, gpio_pha, idx)

#include <zephyr/devicetree/gpio.h>

Get the node identifier for the controller phandle from a gpio phandle-array property at an index.

Example devicetree fragment:

gpio1: gpio@... { };

gpio2: gpio@... { };

n: node {
        gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                <&gpio2 30 GPIO_ACTIVE_HIGH>;
};

Example usage:

DT_GPIO_CTLR_BY_IDX(DT_NODELABEL(n), gpios, 1) // DT_NODELABEL(gpio2)
Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
idxlogical index into "gpio_pha"
Returns
the node identifier for the gpio controller referenced at index "idx"
See also
DT_PHANDLE_BY_IDX()

◆ DT_GPIO_FLAGS

#define DT_GPIO_FLAGS (   node_id,
  gpio_pha 
)     DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0)

#include <zephyr/devicetree/gpio.h>

Equivalent to DT_GPIO_FLAGS_BY_IDX(node_id, gpio_pha, 0)

Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
Returns
the flags cell value at index 0, or zero if there is none
See also
DT_GPIO_FLAGS_BY_IDX()

◆ DT_GPIO_FLAGS_BY_IDX

#define DT_GPIO_FLAGS_BY_IDX (   node_id,
  gpio_pha,
  idx 
)     DT_PHA_BY_IDX_OR(node_id, gpio_pha, idx, flags, 0)

#include <zephyr/devicetree/gpio.h>

Get a GPIO specifier's flags cell at an index.

This macro expects GPIO specifiers with cells named "flags". If there is no "flags" cell in the GPIO specifier, zero is returned. Refer to the node's binding to check specifier cell names if necessary.

Example devicetree fragment:

gpio1: gpio@... {
        compatible = "vnd,gpio";
        #gpio-cells = <2>;
};

gpio2: gpio@... {
        compatible = "vnd,gpio";
        #gpio-cells = <2>;
};

n: node {
        gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                <&gpio2 30 GPIO_ACTIVE_HIGH>;
};

Bindings fragment for the vnd,gpio compatible:

gpio-cells:
  - pin
  - flags

Example usage:

DT_GPIO_FLAGS_BY_IDX(DT_NODELABEL(n), gpios, 0) // GPIO_ACTIVE_LOW
DT_GPIO_FLAGS_BY_IDX(DT_NODELABEL(n), gpios, 1) // GPIO_ACTIVE_HIGH
Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
idxlogical index into "gpio_pha"
Returns
the flags cell value at index "idx", or zero if there is none
See also
DT_PHA_BY_IDX()

◆ DT_GPIO_HOG_FLAGS_BY_IDX

#define DT_GPIO_HOG_FLAGS_BY_IDX (   node_id,
  idx 
)

#include <zephyr/devicetree/gpio.h>

Value:
COND_CODE_1(IS_ENABLED(DT_CAT4(node_id, _GPIO_HOGS_IDX_, idx, _VAL_flags_EXISTS)), \
(DT_CAT4(node_id, _GPIO_HOGS_IDX_, idx, _VAL_flags)), (0))
#define IS_ENABLED(config_macro)
Check for macro definition in compiler-visible expressions.
Definition: util_macro.h:124
#define COND_CODE_1(_flag, _if_1_code, _else_code)
Insert code depending on whether _flag expands to 1 or not.
Definition: util_macro.h:179

Get a GPIO hog specifier's flags cell at an index.

This macro expects GPIO specifiers with cells named "flags". If there is no "flags" cell in the GPIO specifier, zero is returned. Refer to the node's binding to check specifier cell names if necessary.

Example devicetree fragment:

gpio1: gpio@... {
  compatible = "vnd,gpio";
  #gpio-cells = <2>;

  n1: node-1 {
          gpio-hog;
          gpios = <0 GPIO_ACTIVE_HIGH>, <1 GPIO_ACTIVE_LOW>;
          output-high;
  };

  n2: node-2 {
          gpio-hog;
          gpios = <3 GPIO_ACTIVE_HIGH>;
          output-low;
  };
};

Bindings fragment for the vnd,gpio compatible:

gpio-cells:
  - pin
  - flags

Example usage:

DT_GPIO_HOG_FLAGS_BY_IDX(DT_NODELABEL(n1), 0) // GPIO_ACTIVE_HIGH
DT_GPIO_HOG_FLAGS_BY_IDX(DT_NODELABEL(n1), 1) // GPIO_ACTIVE_LOW
DT_GPIO_HOG_FLAGS_BY_IDX(DT_NODELABEL(n2), 0) // GPIO_ACTIVE_HIGH
Parameters
node_idnode identifier
idxlogical index into "gpios"
Returns
the flags cell value at index "idx", or zero if there is none

◆ DT_GPIO_HOG_PIN_BY_IDX

#define DT_GPIO_HOG_PIN_BY_IDX (   node_id,
  idx 
)     DT_CAT4(node_id, _GPIO_HOGS_IDX_, idx, _VAL_pin)

#include <zephyr/devicetree/gpio.h>

Get a GPIO hog specifier's pin cell at an index.

This macro only works for GPIO specifiers with cells named "pin". Refer to the node's binding to check if necessary.

Example devicetree fragment:

gpio1: gpio@... {
  compatible = "vnd,gpio";
  #gpio-cells = <2>;

  n1: node-1 {
          gpio-hog;
          gpios = <0 GPIO_ACTIVE_HIGH>, <1 GPIO_ACTIVE_LOW>;
          output-high;
  };

  n2: node-2 {
          gpio-hog;
          gpios = <3 GPIO_ACTIVE_HIGH>;
          output-low;
  };
};

Bindings fragment for the vnd,gpio compatible:

gpio-cells:
  - pin
  - flags

Example usage:

DT_GPIO_HOG_PIN_BY_IDX(DT_NODELABEL(n1), 0) // 0
DT_GPIO_HOG_PIN_BY_IDX(DT_NODELABEL(n1), 1) // 1
DT_GPIO_HOG_PIN_BY_IDX(DT_NODELABEL(n2), 0) // 3
Parameters
node_idnode identifier
idxlogical index into "gpios"
Returns
the pin cell value at index "idx"

◆ DT_GPIO_PIN

#define DT_GPIO_PIN (   node_id,
  gpio_pha 
)     DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0)

#include <zephyr/devicetree/gpio.h>

Equivalent to DT_GPIO_PIN_BY_IDX(node_id, gpio_pha, 0)

Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
Returns
the pin cell value at index 0
See also
DT_GPIO_PIN_BY_IDX()

◆ DT_GPIO_PIN_BY_IDX

#define DT_GPIO_PIN_BY_IDX (   node_id,
  gpio_pha,
  idx 
)     DT_PHA_BY_IDX(node_id, gpio_pha, idx, pin)

#include <zephyr/devicetree/gpio.h>

Get a GPIO specifier's pin cell at an index.

This macro only works for GPIO specifiers with cells named "pin". Refer to the node's binding to check if necessary.

Example devicetree fragment:

gpio1: gpio@... {
        compatible = "vnd,gpio";
        #gpio-cells = <2>;
};

gpio2: gpio@... {
        compatible = "vnd,gpio";
        #gpio-cells = <2>;
};

n: node {
        gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                <&gpio2 30 GPIO_ACTIVE_HIGH>;
};

Bindings fragment for the vnd,gpio compatible:

gpio-cells:
  - pin
  - flags

Example usage:

DT_GPIO_PIN_BY_IDX(DT_NODELABEL(n), gpios, 0) // 10
DT_GPIO_PIN_BY_IDX(DT_NODELABEL(n), gpios, 1) // 30
Parameters
node_idnode identifier
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
idxlogical index into "gpio_pha"
Returns
the pin cell value at index "idx"
See also
DT_PHA_BY_IDX()

◆ DT_INST_GPIO_FLAGS

#define DT_INST_GPIO_FLAGS (   inst,
  gpio_pha 
)     DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0)

#include <zephyr/devicetree/gpio.h>

Equivalent to DT_INST_GPIO_FLAGS_BY_IDX(inst, gpio_pha, 0)

Parameters
instDT_DRV_COMPAT instance number
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
Returns
the flags cell value at index 0, or zero if there is none
See also
DT_INST_GPIO_FLAGS_BY_IDX()

◆ DT_INST_GPIO_FLAGS_BY_IDX

#define DT_INST_GPIO_FLAGS_BY_IDX (   inst,
  gpio_pha,
  idx 
)     DT_GPIO_FLAGS_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx)

#include <zephyr/devicetree/gpio.h>

Get a DT_DRV_COMPAT instance's GPIO specifier's flags cell at an index.

Parameters
instDT_DRV_COMPAT instance number
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
idxlogical index into "gpio_pha"
Returns
the flags cell value at index "idx", or zero if there is none
See also
DT_GPIO_FLAGS_BY_IDX()

◆ DT_INST_GPIO_PIN

#define DT_INST_GPIO_PIN (   inst,
  gpio_pha 
)     DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0)

#include <zephyr/devicetree/gpio.h>

Equivalent to DT_INST_GPIO_PIN_BY_IDX(inst, gpio_pha, 0)

Parameters
instDT_DRV_COMPAT instance number
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
Returns
the pin cell value at index 0
See also
DT_INST_GPIO_PIN_BY_IDX()

◆ DT_INST_GPIO_PIN_BY_IDX

#define DT_INST_GPIO_PIN_BY_IDX (   inst,
  gpio_pha,
  idx 
)     DT_GPIO_PIN_BY_IDX(DT_DRV_INST(inst), gpio_pha, idx)

#include <zephyr/devicetree/gpio.h>

Get a DT_DRV_COMPAT instance's GPIO specifier's pin cell value at an index.

Parameters
instDT_DRV_COMPAT instance number
gpio_phalowercase-and-underscores GPIO property with type "phandle-array"
idxlogical index into "gpio_pha"
Returns
the pin cell value at index "idx"
See also
DT_GPIO_PIN_BY_IDX()

◆ DT_NUM_GPIO_HOGS

#define DT_NUM_GPIO_HOGS (   node_id)

#include <zephyr/devicetree/gpio.h>

Value:
COND_CODE_1(IS_ENABLED(DT_CAT(node_id, _GPIO_HOGS_EXISTS)), \
(DT_CAT(node_id, _GPIO_HOGS_NUM)), (0))

Get the number of GPIO hogs in a node.

This expands to the number of hogged GPIOs, or zero if there are none.

Example devicetree fragment:

gpio1: gpio@... {
  compatible = "vnd,gpio";
  #gpio-cells = <2>;

  n1: node-1 {
          gpio-hog;
          gpios = <0 GPIO_ACTIVE_HIGH>, <1 GPIO_ACTIVE_LOW>;
          output-high;
  };

  n2: node-2 {
          gpio-hog;
          gpios = <3 GPIO_ACTIVE_HIGH>;
          output-low;
  };
};

Bindings fragment for the vnd,gpio compatible:

gpio-cells:
  - pin
  - flags

Example usage:

DT_NUM_GPIO_HOGS(DT_NODELABEL(n1)) // 2
DT_NUM_GPIO_HOGS(DT_NODELABEL(n2)) // 1
Parameters
node_idnode identifier; may or may not be a GPIO hog node.
Returns
number of hogged GPIOs in the node