Zephyr Project API 3.7.0
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
Devicetree SPI API

Macros

#define DT_SPI_HAS_CS_GPIOS(spi)   DT_NODE_HAS_PROP(spi, cs_gpios)
 Does a SPI controller node have chip select GPIOs configured?
 
#define DT_SPI_NUM_CS_GPIOS(spi)
 Number of chip select GPIOs in a SPI controller's cs-gpios property.
 
#define DT_SPI_DEV_HAS_CS_GPIOS(spi_dev)   DT_SPI_HAS_CS_GPIOS(DT_BUS(spi_dev))
 Does a SPI device have a chip select line configured? Example devicetree fragment:
 
#define DT_SPI_DEV_CS_GPIOS_CTLR(spi_dev)    DT_GPIO_CTLR_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))
 Get a SPI device's chip select GPIO controller's node identifier.
 
#define DT_SPI_DEV_CS_GPIOS_PIN(spi_dev)    DT_GPIO_PIN_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))
 Get a SPI device's chip select GPIO pin number.
 
#define DT_SPI_DEV_CS_GPIOS_FLAGS(spi_dev)    DT_GPIO_FLAGS_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))
 Get a SPI device's chip select GPIO flags.
 
#define DT_INST_SPI_DEV_HAS_CS_GPIOS(inst)    DT_SPI_DEV_HAS_CS_GPIOS(DT_DRV_INST(inst))
 Equivalent to DT_SPI_DEV_HAS_CS_GPIOS(DT_DRV_INST(inst)).
 
#define DT_INST_SPI_DEV_CS_GPIOS_CTLR(inst)    DT_SPI_DEV_CS_GPIOS_CTLR(DT_DRV_INST(inst))
 Get GPIO controller node identifier for a SPI device instance This is equivalent to DT_SPI_DEV_CS_GPIOS_CTLR(DT_DRV_INST(inst)).
 
#define DT_INST_SPI_DEV_CS_GPIOS_PIN(inst)    DT_SPI_DEV_CS_GPIOS_PIN(DT_DRV_INST(inst))
 Equivalent to DT_SPI_DEV_CS_GPIOS_PIN(DT_DRV_INST(inst)).
 
#define DT_INST_SPI_DEV_CS_GPIOS_FLAGS(inst)    DT_SPI_DEV_CS_GPIOS_FLAGS(DT_DRV_INST(inst))
 DT_SPI_DEV_CS_GPIOS_FLAGS(DT_DRV_INST(inst)).
 

Detailed Description

Macro Definition Documentation

◆ DT_INST_SPI_DEV_CS_GPIOS_CTLR

#define DT_INST_SPI_DEV_CS_GPIOS_CTLR (   inst)     DT_SPI_DEV_CS_GPIOS_CTLR(DT_DRV_INST(inst))

#include <include/zephyr/devicetree/spi.h>

Get GPIO controller node identifier for a SPI device instance This is equivalent to DT_SPI_DEV_CS_GPIOS_CTLR(DT_DRV_INST(inst)).

Parameters
instDT_DRV_COMPAT instance number
Returns
node identifier for instance's chip select GPIO controller
See also
DT_SPI_DEV_CS_GPIOS_CTLR()

◆ DT_INST_SPI_DEV_CS_GPIOS_FLAGS

#define DT_INST_SPI_DEV_CS_GPIOS_FLAGS (   inst)     DT_SPI_DEV_CS_GPIOS_FLAGS(DT_DRV_INST(inst))

#include <include/zephyr/devicetree/spi.h>

DT_SPI_DEV_CS_GPIOS_FLAGS(DT_DRV_INST(inst)).

Parameters
instDT_DRV_COMPAT instance number
Returns
flags value of the instance's chip select GPIO specifier, or zero if there is none
See also
DT_SPI_DEV_CS_GPIOS_FLAGS()

◆ DT_INST_SPI_DEV_CS_GPIOS_PIN

#define DT_INST_SPI_DEV_CS_GPIOS_PIN (   inst)     DT_SPI_DEV_CS_GPIOS_PIN(DT_DRV_INST(inst))

#include <include/zephyr/devicetree/spi.h>

Equivalent to DT_SPI_DEV_CS_GPIOS_PIN(DT_DRV_INST(inst)).

Parameters
instDT_DRV_COMPAT instance number
Returns
pin number of the instance's chip select GPIO
See also
DT_SPI_DEV_CS_GPIOS_PIN()

◆ DT_INST_SPI_DEV_HAS_CS_GPIOS

#define DT_INST_SPI_DEV_HAS_CS_GPIOS (   inst)     DT_SPI_DEV_HAS_CS_GPIOS(DT_DRV_INST(inst))

#include <include/zephyr/devicetree/spi.h>

Equivalent to DT_SPI_DEV_HAS_CS_GPIOS(DT_DRV_INST(inst)).

Parameters
instDT_DRV_COMPAT instance number
Returns
1 if the instance's bus has a CS pin at index DT_INST_REG_ADDR(inst), 0 otherwise
See also
DT_SPI_DEV_HAS_CS_GPIOS()

◆ DT_SPI_DEV_CS_GPIOS_CTLR

#define DT_SPI_DEV_CS_GPIOS_CTLR (   spi_dev)     DT_GPIO_CTLR_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))

#include <include/zephyr/devicetree/spi.h>

Get a SPI device's chip select GPIO controller's node identifier.

Example devicetree fragment:

gpio1: gpio@... { ... };

gpio2: gpio@... { ... };

spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                   <&gpio2 20 GPIO_ACTIVE_LOW>;

        a: spi-dev-a@0 {
                reg = <0>;
        };

        b: spi-dev-b@1 {
                reg = <1>;
        };
};

Example usage:

DT_SPI_DEV_CS_GPIOS_CTLR(DT_NODELABEL(a)) // DT_NODELABEL(gpio1)
DT_SPI_DEV_CS_GPIOS_CTLR(DT_NODELABEL(b)) // DT_NODELABEL(gpio2)
Parameters
spi_deva SPI device node identifier
Returns
node identifier for spi_dev's chip select GPIO controller

◆ DT_SPI_DEV_CS_GPIOS_FLAGS

#define DT_SPI_DEV_CS_GPIOS_FLAGS (   spi_dev)     DT_GPIO_FLAGS_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))

#include <include/zephyr/devicetree/spi.h>

Get a SPI device's chip select GPIO flags.

Example devicetree fragment:

spi1: spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>;

        a: spi-dev-a@0 {
                reg = <0>;
        };
};

Example usage:

DT_SPI_DEV_CS_GPIOS_FLAGS(DT_NODELABEL(a)) // GPIO_ACTIVE_LOW

If the GPIO specifier for spi_dev's entry in its bus node's cs-gpios property has no flags cell, this expands to zero.

Parameters
spi_deva SPI device node identifier
Returns
flags value of spi_dev's chip select GPIO specifier, or zero if there is none

◆ DT_SPI_DEV_CS_GPIOS_PIN

#define DT_SPI_DEV_CS_GPIOS_PIN (   spi_dev)     DT_GPIO_PIN_BY_IDX(DT_BUS(spi_dev), cs_gpios, DT_REG_ADDR(spi_dev))

#include <include/zephyr/devicetree/spi.h>

Get a SPI device's chip select GPIO pin number.

It's an error if the GPIO specifier for spi_dev's entry in its bus node's cs-gpios property has no pin cell.

Example devicetree fragment:

spi1: spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                   <&gpio2 20 GPIO_ACTIVE_LOW>;

        a: spi-dev-a@0 {
                reg = <0>;
        };

        b: spi-dev-b@1 {
                reg = <1>;
        };
};

Example usage:

DT_SPI_DEV_CS_GPIOS_PIN(DT_NODELABEL(a)) // 10
DT_SPI_DEV_CS_GPIOS_PIN(DT_NODELABEL(b)) // 20
Parameters
spi_deva SPI device node identifier
Returns
pin number of spi_dev's chip select GPIO

◆ DT_SPI_DEV_HAS_CS_GPIOS

#define DT_SPI_DEV_HAS_CS_GPIOS (   spi_dev)    DT_SPI_HAS_CS_GPIOS(DT_BUS(spi_dev))

#include <include/zephyr/devicetree/spi.h>

Does a SPI device have a chip select line configured? Example devicetree fragment:

spi1: spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                   <&gpio2 20 GPIO_ACTIVE_LOW>;

        a: spi-dev-a@0 {
                reg = <0>;
        };

        b: spi-dev-b@1 {
                reg = <1>;
        };
};

spi2: spi@... {
        compatible = "vnd,spi";
        c: spi-dev-c@0 {
                reg = <0>;
        };
};

Example usage:

DT_SPI_DEV_HAS_CS_GPIOS(DT_NODELABEL(a)) // 1
DT_SPI_DEV_HAS_CS_GPIOS(DT_NODELABEL(b)) // 1
DT_SPI_DEV_HAS_CS_GPIOS(DT_NODELABEL(c)) // 0
Parameters
spi_deva SPI device node identifier
Returns
1 if spi_dev's bus node DT_BUS(spi_dev) has a chip select pin at index DT_REG_ADDR(spi_dev), 0 otherwise

◆ DT_SPI_HAS_CS_GPIOS

#define DT_SPI_HAS_CS_GPIOS (   spi)    DT_NODE_HAS_PROP(spi, cs_gpios)

#include <include/zephyr/devicetree/spi.h>

Does a SPI controller node have chip select GPIOs configured?

SPI bus controllers use the "cs-gpios" property for configuring chip select GPIOs. Its value is a phandle-array which specifies the chip select lines.

Example devicetree fragment:

spi1: spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                   <&gpio2 20 GPIO_ACTIVE_LOW>;
};

spi2: spi@... {
        compatible = "vnd,spi";
};

Example usage:

DT_SPI_HAS_CS_GPIOS(DT_NODELABEL(spi1)) // 1
DT_SPI_HAS_CS_GPIOS(DT_NODELABEL(spi2)) // 0
Parameters
spia SPI bus controller node identifier
Returns
1 if "spi" has a cs-gpios property, 0 otherwise

◆ DT_SPI_NUM_CS_GPIOS

#define DT_SPI_NUM_CS_GPIOS (   spi)

#include <include/zephyr/devicetree/spi.h>

Value:
(DT_PROP_LEN(spi, cs_gpios)), (0))
#define DT_PROP_LEN(node_id, prop)
Get a property's logical length.
Definition devicetree.h:697
#define DT_SPI_HAS_CS_GPIOS(spi)
Does a SPI controller node have chip select GPIOs configured?
Definition spi.h:52
#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

Number of chip select GPIOs in a SPI controller's cs-gpios property.

Example devicetree fragment:

spi1: spi@... {
        compatible = "vnd,spi";
        cs-gpios = <&gpio1 10 GPIO_ACTIVE_LOW>,
                   <&gpio2 20 GPIO_ACTIVE_LOW>;
};

spi2: spi@... {
        compatible = "vnd,spi";
};

Example usage:

DT_SPI_NUM_CS_GPIOS(DT_NODELABEL(spi1)) // 2
DT_SPI_NUM_CS_GPIOS(DT_NODELABEL(spi2)) // 0
Parameters
spia SPI bus controller node identifier
Returns
Logical length of spi's cs-gpios property, or 0 if "spi" doesn't have a cs-gpios property