11#ifndef ZEPHYR_INCLUDE_DRIVERS_PINCTRL_H_
12#define ZEPHYR_INCLUDE_DRIVERS_PINCTRL_H_
24#include <pinctrl_soc.h>
38#define PINCTRL_STATE_DEFAULT 0U
40#define PINCTRL_STATE_SLEEP 1U
43#define PINCTRL_STATE_PRIV_START 2U
50 const pinctrl_soc_pin_t *
pins;
59#if defined(CONFIG_PINCTRL_STORE_REG) || defined(__DOXYGEN__)
73#define PINCTRL_REG_NONE 0U
77#ifndef CONFIG_PM_DEVICE
79#define PINCTRL_SKIP_SLEEP 1
88#define Z_PINCTRL_STATE_ID(state_idx, node_id) \
89 _CONCAT(PINCTRL_STATE_, \
90 DT_PINCTRL_IDX_TO_NAME_UPPER_TOKEN(node_id, state_idx))
98#define Z_PINCTRL_DEV_CONFIG_NAME(node_id) \
99 _CONCAT(__pinctrl_dev_config, DEVICE_DT_NAME_GET(node_id))
107#define Z_PINCTRL_STATES_NAME(node_id) \
108 _CONCAT(__pinctrl_states, DEVICE_DT_NAME_GET(node_id))
117#define Z_PINCTRL_STATE_PINS_NAME(state_idx, node_id) \
118 _CONCAT(__pinctrl_state_pins_ ## state_idx, DEVICE_DT_NAME_GET(node_id))
131#define Z_PINCTRL_SKIP_STATE(state_idx, node_id) \
132 _CONCAT(PINCTRL_SKIP_, \
133 DT_PINCTRL_IDX_TO_NAME_UPPER_TOKEN(node_id, state_idx))
141#define Z_PINCTRL_STATE_PINS_DEFINE(state_idx, node_id) \
142 COND_CODE_1(Z_PINCTRL_SKIP_STATE(state_idx, node_id), (), \
143 (static const pinctrl_soc_pin_t \
144 Z_PINCTRL_STATE_PINS_NAME(state_idx, node_id)[] = \
145 Z_PINCTRL_STATE_PINS_INIT(node_id, pinctrl_ ## state_idx)))
153#define Z_PINCTRL_STATE_INIT(state_idx, node_id) \
154 COND_CODE_1(Z_PINCTRL_SKIP_STATE(state_idx, node_id), (), \
156 .id = Z_PINCTRL_STATE_ID(state_idx, node_id), \
157 .pins = Z_PINCTRL_STATE_PINS_NAME(state_idx, node_id), \
158 .pin_cnt = ARRAY_SIZE(Z_PINCTRL_STATE_PINS_NAME(state_idx, \
167#define Z_PINCTRL_STATES_DEFINE(node_id) \
168 static const struct pinctrl_state \
169 Z_PINCTRL_STATES_NAME(node_id)[] = { \
170 LISTIFY(DT_NUM_PINCTRL_STATES(node_id), \
171 Z_PINCTRL_STATE_INIT, (,), node_id) \
174#ifdef CONFIG_PINCTRL_STORE_REG
180#define Z_PINCTRL_DEV_CONFIG_INIT(node_id) \
182 .reg = DT_REG_ADDR(node_id), \
183 .states = Z_PINCTRL_STATES_NAME(node_id), \
184 .state_cnt = ARRAY_SIZE(Z_PINCTRL_STATES_NAME(node_id)), \
187#define Z_PINCTRL_DEV_CONFIG_INIT(node_id) \
189 .states = Z_PINCTRL_STATES_NAME(node_id), \
190 .state_cnt = ARRAY_SIZE(Z_PINCTRL_STATES_NAME(node_id)), \
194#ifdef CONFIG_PINCTRL_NON_STATIC
195#define Z_PINCTRL_DEV_CONFIG_STATIC
197#define Z_PINCTRL_DEV_CONFIG_STATIC static
200#ifdef CONFIG_PINCTRL_DYNAMIC
201#define Z_PINCTRL_DEV_CONFIG_CONST
203#define Z_PINCTRL_DEV_CONFIG_CONST const
208#if defined(CONFIG_PINCTRL_NON_STATIC) || defined(__DOXYGEN__)
221#define PINCTRL_DT_DEV_CONFIG_DECLARE(node_id) \
222 extern Z_PINCTRL_DEV_CONFIG_CONST struct pinctrl_dev_config \
223 Z_PINCTRL_DEV_CONFIG_NAME(node_id)
237#define PINCTRL_DT_DEFINE(node_id) \
238 LISTIFY(DT_NUM_PINCTRL_STATES(node_id), \
239 Z_PINCTRL_STATE_PINS_DEFINE, (;), node_id); \
240 Z_PINCTRL_STATES_DEFINE(node_id) \
241 Z_PINCTRL_DEV_CONFIG_STATIC Z_PINCTRL_DEV_CONFIG_CONST \
242 struct pinctrl_dev_config Z_PINCTRL_DEV_CONFIG_NAME(node_id) = \
243 Z_PINCTRL_DEV_CONFIG_INIT(node_id)
252#define PINCTRL_DT_INST_DEFINE(inst) PINCTRL_DT_DEFINE(DT_DRV_INST(inst))
260#define PINCTRL_DT_DEV_CONFIG_GET(node_id) &Z_PINCTRL_DEV_CONFIG_NAME(node_id)
270#define PINCTRL_DT_INST_DEV_CONFIG_GET(inst) \
271 PINCTRL_DT_DEV_CONFIG_GET(DT_DRV_INST(inst))
320#ifdef CONFIG_PINCTRL_STORE_REG
354#if defined(CONFIG_PINCTRL_DYNAMIC) || defined(__DOXYGEN__)
372#define PINCTRL_DT_STATE_PINS_DEFINE(node_id, prop) \
373 static const pinctrl_soc_pin_t prop ## _pins[] = \
374 Z_PINCTRL_STATE_PINS_INIT(node_id, prop); \
411#define PINCTRL_DT_STATE_INIT(prop, state) \
414 .pins = prop ## _pins, \
415 .pin_cnt = ARRAY_SIZE(prop ## _pins) \
447 ARG_UNUSED(state_cnt);
Devicetree pin control helpers.
int pinctrl_update_states(struct pinctrl_dev_config *config, const struct pinctrl_state *states, uint8_t state_cnt)
Update states with a new set.
static int pinctrl_apply_state(const struct pinctrl_dev_config *config, uint8_t id)
Apply a state from the given device configuration.
Definition: pinctrl.h:340
int pinctrl_configure_pins(const pinctrl_soc_pin_t *pins, uint8_t pin_cnt, uintptr_t reg)
Configure a set of pins.
static int pinctrl_apply_state_direct(const struct pinctrl_dev_config *config, const struct pinctrl_state *state)
Apply a state directly from the provided state configuration.
Definition: pinctrl.h:314
int pinctrl_lookup_state(const struct pinctrl_dev_config *config, uint8_t id, const struct pinctrl_state **state)
Find the state configuration for the given state id.
#define PINCTRL_REG_NONE
Definition: pinctrl.h:73
#define ENOSYS
Definition: errno.h:83
state
Definition: http_parser_state.h:29
static ZTEST_BMEM volatile int ret
Definition: k_float_disable.c:28
__UINT8_TYPE__ uint8_t
Definition: stdint.h:88
__UINTPTR_TYPE__ uintptr_t
Definition: stdint.h:105
uint8_t state_cnt
Definition: pinctrl.h:69
const struct pinctrl_state * states
Definition: pinctrl.h:67
uintptr_t reg
Definition: pinctrl.h:64
const pinctrl_soc_pin_t * pins
Definition: pinctrl.h:50
uint8_t pin_cnt
Definition: pinctrl.h:52
uint8_t id
Definition: pinctrl.h:54