Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
pinctrl_rp1_common.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 TOKITA Hiroshi
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7#ifndef ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_RP1_COMMON_H_
8#define ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_RP1_COMMON_H_
9
14
15#include <stdint.h>
17
25#define RP1_GET_PIN_NUM(pinctrl) (((pinctrl) >> RP1_PIN_NUM_POS) & RP1_PIN_NUM_MASK)
26
33#define RP1_GET_ALT_FUNC(pinctrl) (((pinctrl) >> RP1_ALT_FUNC_POS) & RP1_ALT_FUNC_MASK)
34
38
39/* Initialize one RP1 pinctrl entry from a devicetree property item. */
40#define RASPBERRYPI_RP1_PINCTRL_STATE_PIN_INIT(node_id, prop, idx) \
41 { \
42 .pin_num = RP1_GET_PIN_NUM(DT_PROP_BY_IDX(node_id, prop, idx)), \
43 .alt_func = RP1_GET_ALT_FUNC(DT_PROP_BY_IDX(node_id, prop, idx)), \
44 .f_m = DT_PROP(node_id, raspberrypi_f_m), \
45 .oe_override = DT_PROP(node_id, raspberrypi_oe_override), \
46 .out_override = DT_PROP(node_id, raspberrypi_out_override), \
47 .in_override = DT_PROP(node_id, raspberrypi_in_override), \
48 .irqmask_edge_low = DT_PROP(node_id, raspberrypi_irqmask_edge_low), \
49 .irqmask_edge_high = DT_PROP(node_id, raspberrypi_irqmask_edge_high), \
50 .irqmask_level_low = DT_PROP(node_id, raspberrypi_irqmask_level_low), \
51 .irqmask_level_high = DT_PROP(node_id, raspberrypi_irqmask_level_high), \
52 .irqmask_f_edge_low = DT_PROP(node_id, raspberrypi_irqmask_f_edge_low), \
53 .irqmask_f_edge_high = DT_PROP(node_id, raspberrypi_irqmask_f_edge_high), \
54 .irqmask_db_level_low = DT_PROP(node_id, raspberrypi_irqmask_db_level_low), \
55 .irqmask_db_level_high = DT_PROP(node_id, raspberrypi_irqmask_db_level_high), \
56 .irq_override = DT_PROP(node_id, raspberrypi_irq_override), \
57 .slew_rate = DT_ENUM_IDX(node_id, slew_rate), \
58 .schmitt_enable = DT_PROP(node_id, input_schmitt_enable), \
59 .pulldown = DT_PROP(node_id, bias_pull_down), \
60 .pullup = DT_PROP(node_id, bias_pull_up), \
61 .drive_strength = DT_ENUM_IDX(node_id, drive_strength), \
62 .input_enable = DT_PROP(node_id, input_enable), \
63 .output_disable = DT_PROP(node_id, output_disable), \
64 }
65
66/* Per-pin RP1 pinctrl settings expanded from devicetree properties. */
67struct raspberrypi_rp1_pinctrl_pinconfig {
68 uint32_t pin_num: 5;
69 uint32_t alt_func: 5;
70 uint32_t f_m: 7;
71 uint32_t oe_override: 2;
72 uint32_t out_override: 2;
73 uint32_t in_override: 2;
74 uint32_t irqmask_edge_low: 1;
75 uint32_t irqmask_edge_high: 1;
76 uint32_t irqmask_level_low: 1;
77 uint32_t irqmask_level_high: 1;
78 uint32_t irqmask_f_edge_low: 1;
79 uint32_t irqmask_f_edge_high: 1;
80 uint32_t irqmask_db_level_low: 1;
81 uint32_t irqmask_db_level_high: 1;
82 uint32_t irq_override: 2;
83 uint32_t slew_rate: 1;
84 uint32_t schmitt_enable: 1;
85 uint32_t pulldown: 1;
86 uint32_t pullup: 1;
87 uint32_t drive_strength: 2;
88 uint32_t input_enable: 1;
89 uint32_t output_disable: 1;
90};
91
92/* Apply one RP1 pin configuration entry. */
93int raspberrypi_rp1_pinctrl_configure_pin(const struct raspberrypi_rp1_pinctrl_pinconfig *pin);
94
98
99#endif /* ZEPHYR_INCLUDE_DRIVERS_PINCTRL_PINCTRL_RP1_COMMON_H_ */
Devicetree pin control helpers for Raspberry Pi RP1.
__UINT32_TYPE__ uint32_t
Definition stdint.h:90