Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
ch570-pinctrl.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2026 SMILE (smile.eu)
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 *
6 * NOTE: This pin controller configuration header supports WCH CH570/CH572 SoCs only.
7 */
8
30
31#ifndef ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_CH570_PINCTRL_H_
32#define ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_CH570_PINCTRL_H_
33
38
40#define CH570_PINCTRL_PIN_NOT_DEFINED 0xF
41
43#define CH570_PINCTRL_UART_RXD 0
45#define CH570_PINCTRL_UART_TXD 3
47#define CH570_PINCTRL_TMR 6
49#define CH570_PINCTRL_SPI_CS 8
51#define CH570_PINCTRL_I2C_PIN 9
53#define CH570_PINCTRL_SPI_CLK 11
55#define CH570_PINCTRL_OSC_25M_ENABLE 12
57#define CH570_PINCTRL_NO_ALTERNATE 16
58
60#define CH570_PINCTRL_UART_RXD_ALT_WIDTH 3
62#define CH570_PINCTRL_UART_TXD_ALT_WIDTH 3
64#define CH570_PINCTRL_TMR_ALT_WIDTH 2
66#define CH570_PINCTRL_SPI_CS_ALT_WIDTH 1
68#define CH570_PINCTRL_I2C_PIN_ALT_WIDTH 2
70#define CH570_PINCTRL_SPI_CLK_ALT_WIDTH 1
72#define CH570_PINCTRL_OSC_25M_ENABLE_ALT_WIDTH 1
74#define CH570_PINCTRL_NO_ALTERNATE_ALT_WIDTH 0
75
77
82
84#define CH570_PINCTRL_PIN_SHIFT 0
86#define CH570_PINCTRL_PIN_MASK GENMASK(3, 0)
87
89#define CH570_PINCTRL_ALT_FIELD_OFFSET_SHIFT 4
91#define CH570_PINCTRL_ALT_FIELD_OFFSET_MASK GENMASK(8, 4)
92
94#define CH570_PINCTRL_ALT_FIELD_WIDTH_SHIFT 9
96#define CH570_PINCTRL_ALT_FIELD_WIDTH_MASK GENMASK(10, 9)
97
99#define CH570_PINCTRL_ALT_FUNC_SHIFT 11
101#define CH570_PINCTRL_ALT_FUNC_MASK GENMASK(13, 11)
102
104
113#define CH570_PINMUX_DEFINE(pin, peripheral, remapping) \
114 ((pin << CH570_PINCTRL_PIN_SHIFT) | \
115 (CH570_PINCTRL_##peripheral << CH570_PINCTRL_ALT_FIELD_OFFSET_SHIFT) | \
116 (CH570_PINCTRL_##peripheral##_ALT_WIDTH << CH570_PINCTRL_ALT_FIELD_WIDTH_SHIFT) | \
117 (remapping << CH570_PINCTRL_ALT_FUNC_SHIFT))
118
124#define UART_TXD_PA3_0 CH570_PINMUX_DEFINE(3, UART_TXD, 0)
126#define UART_TXD_PA2_1 CH570_PINMUX_DEFINE(2, UART_TXD, 1)
128#define UART_TXD_PA1_2 CH570_PINMUX_DEFINE(1, UART_TXD, 2)
130#define UART_TXD_PA0_3 CH570_PINMUX_DEFINE(0, UART_TXD, 3)
132#define UART_TXD_PA7_4 CH570_PINMUX_DEFINE(7, UART_TXD, 4)
134#define UART_TXD_PA8_5 CH570_PINMUX_DEFINE(8, UART_TXD, 5)
136#define UART_TXD_PA11_6 CH570_PINMUX_DEFINE(11, UART_TXD, 6)
138#define UART_TXD_PA10_7 CH570_PINMUX_DEFINE(10, UART_TXD, 7)
139
140/*
141 * Documentation is inconsistent for UART RXD_4. AF table lists UART RXD on PA4 (config 4),
142 * while the pinout section shows PA6. PA6 is used in practice.
143 */
145#define UART_RXD_PA2_0 CH570_PINMUX_DEFINE(2, UART_RXD, 0)
147#define UART_RXD_PA3_1 CH570_PINMUX_DEFINE(3, UART_RXD, 1)
149#define UART_RXD_PA0_2 CH570_PINMUX_DEFINE(0, UART_RXD, 2)
151#define UART_RXD_PA1_3 CH570_PINMUX_DEFINE(1, UART_RXD, 3)
153#define UART_RXD_PA6_4 CH570_PINMUX_DEFINE(6, UART_RXD, 4)
155#define UART_RXD_PA9_5 CH570_PINMUX_DEFINE(9, UART_RXD, 5)
157#define UART_RXD_PA10_6 CH570_PINMUX_DEFINE(10, UART_RXD, 6)
159#define UART_RXD_PA11_7 CH570_PINMUX_DEFINE(11, UART_RXD, 7)
161
167#define TMR_PWM0_CAPIN1_PA7_0 CH570_PINMUX_DEFINE(7, TMR, 0)
169#define TMR_PWM0_CAPIN1_PA2_1 CH570_PINMUX_DEFINE(2, TMR, 1)
171#define TMR_PWM0_CAPIN1_PA4_2 CH570_PINMUX_DEFINE(4, TMR, 2)
173#define TMR_PWM0_CAPIN1_PA9_3 CH570_PINMUX_DEFINE(9, TMR, 3)
175#define TMR_CAPIN2_PA2_0 CH570_PINMUX_DEFINE(2, TMR, 0)
177#define TMR_CAPIN2_PA7_1 CH570_PINMUX_DEFINE(7, TMR, 1)
179#define TMR_CAPIN2_PA9_2 CH570_PINMUX_DEFINE(9, TMR, 2)
181#define TMR_CAPIN2_PA4_3 CH570_PINMUX_DEFINE(4, TMR, 3)
183
189#define SPI_CS_PA4_0 CH570_PINMUX_DEFINE(4, SPI_CS, 0)
191#define SPI_CS_PA2_1 CH570_PINMUX_DEFINE(2, SPI_CS, 1)
193#define SPI_CLK_PA5_0 CH570_PINMUX_DEFINE(5, SPI_CLK, 0)
195#define SPI_CLK_PA3_1 CH570_PINMUX_DEFINE(3, SPI_CLK, 1)
197#define SPI_MOSI_PA7_0 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 0)
199#define SPI_MISO_PA6_0 CH570_PINMUX_DEFINE(6, NO_ALTERNATE, 0)
201
207#define I2C_SCL_PA8_0 CH570_PINMUX_DEFINE(8, I2C_PIN, 0)
209#define I2C_SCL_PA0_1 CH570_PINMUX_DEFINE(0, I2C_PIN, 1)
211#define I2C_SCL_PA3_2 CH570_PINMUX_DEFINE(3, I2C_PIN, 2)
213#define I2C_SCL_PA5_3 CH570_PINMUX_DEFINE(5, I2C_PIN, 3)
215#define I2C_SDA_PA9_0 CH570_PINMUX_DEFINE(9, I2C_PIN, 0)
217#define I2C_SDA_PA1_1 CH570_PINMUX_DEFINE(1, I2C_PIN, 1)
219#define I2C_SDA_PA2_2 CH570_PINMUX_DEFINE(2, I2C_PIN, 2)
221#define I2C_SDA_PA6_3 CH570_PINMUX_DEFINE(6, I2C_PIN, 3)
223
229#define KEYSCAN_0_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
231#define KEYSCAN_1_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
233#define KEYSCAN_2_PA8_0 CH570_PINMUX_DEFINE(8, NO_ALTERNATE, 0)
235#define KEYSCAN_3_PA10_0 CH570_PINMUX_DEFINE(10, NO_ALTERNATE, 0)
237#define KEYSCAN_4_PA11_0 CH570_PINMUX_DEFINE(11, NO_ALTERNATE, 0)
239
245#define CMP_P_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
247#define CMP_P_PA7_1 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 1)
249#define CMP_N_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
251#define CMP_N_CMP_VREF_1 CH570_PINMUX_DEFINE(CH570_PINCTRL_PIN_NOT_DEFINED, NO_ALTERNATE, 1)
253
259#define PWM1_PA7_0 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 0)
261#define PWM2_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
263#define PWM3_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
265#define PWM4_PA4_0 CH570_PINMUX_DEFINE(4, NO_ALTERNATE, 0)
267#define PWM5_PA8_0 CH570_PINMUX_DEFINE(8, NO_ALTERNATE, 0)
269
275#define OSC25M_ENABLE_PA4_0 CH570_PINMUX_DEFINE(4, OSC_25M_ENABLE, 1)
277
278#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_CH570_PINCTRL_H_ */