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_UART_RXD 0
42#define CH570_PINCTRL_UART_TXD 3
44#define CH570_PINCTRL_TMR 6
46#define CH570_PINCTRL_SPI_CS 8
48#define CH570_PINCTRL_I2C_PIN 9
50#define CH570_PINCTRL_SPI_CLK 11
52#define CH570_PINCTRL_OSC_25M_ENABLE 12
54#define CH570_PINCTRL_NO_ALTERNATE 16
55
57#define CH570_PINCTRL_UART_RXD_ALT_WIDTH 3
59#define CH570_PINCTRL_UART_TXD_ALT_WIDTH 3
61#define CH570_PINCTRL_TMR_ALT_WIDTH 2
63#define CH570_PINCTRL_SPI_CS_ALT_WIDTH 1
65#define CH570_PINCTRL_I2C_PIN_ALT_WIDTH 2
67#define CH570_PINCTRL_SPI_CLK_ALT_WIDTH 1
69#define CH570_PINCTRL_OSC_25M_ENABLE_ALT_WIDTH 1
71#define CH570_PINCTRL_NO_ALTERNATE_ALT_WIDTH 0
72
74
79
81#define CH570_PINCTRL_PIN_SHIFT 0
83#define CH570_PINCTRL_PIN_MASK GENMASK(3, 0)
84
86#define CH570_PINCTRL_ALT_FIELD_OFFSET_SHIFT 4
88#define CH570_PINCTRL_ALT_FIELD_OFFSET_MASK GENMASK(8, 4)
89
91#define CH570_PINCTRL_ALT_FIELD_WIDTH_SHIFT 9
93#define CH570_PINCTRL_ALT_FIELD_WIDTH_MASK GENMASK(10, 9)
94
96#define CH570_PINCTRL_ALT_FUNC_SHIFT 11
98#define CH570_PINCTRL_ALT_FUNC_MASK GENMASK(13, 11)
99
101
110#define CH570_PINMUX_DEFINE(pin, peripheral, remapping) \
111 ((pin << CH570_PINCTRL_PIN_SHIFT) | \
112 (CH570_PINCTRL_##peripheral << CH570_PINCTRL_ALT_FIELD_OFFSET_SHIFT) | \
113 (CH570_PINCTRL_##peripheral##_ALT_WIDTH << CH570_PINCTRL_ALT_FIELD_WIDTH_SHIFT) | \
114 (remapping << CH570_PINCTRL_ALT_FUNC_SHIFT))
115
121#define UART_TXD_PA3_0 CH570_PINMUX_DEFINE(3, UART_TXD, 0)
123#define UART_TXD_PA2_1 CH570_PINMUX_DEFINE(2, UART_TXD, 1)
125#define UART_TXD_PA1_2 CH570_PINMUX_DEFINE(1, UART_TXD, 2)
127#define UART_TXD_PA0_3 CH570_PINMUX_DEFINE(0, UART_TXD, 3)
129#define UART_TXD_PA7_4 CH570_PINMUX_DEFINE(7, UART_TXD, 4)
131#define UART_TXD_PA8_5 CH570_PINMUX_DEFINE(8, UART_TXD, 5)
133#define UART_TXD_PA11_6 CH570_PINMUX_DEFINE(11, UART_TXD, 6)
135#define UART_TXD_PA10_7 CH570_PINMUX_DEFINE(10, UART_TXD, 7)
136
137/*
138 * Documentation is inconsistent for UART RXD_4. AF table lists UART RXD on PA4 (config 4),
139 * while the pinout section shows PA6. PA6 is used in practice.
140 */
142#define UART_RXD_PA2_0 CH570_PINMUX_DEFINE(2, UART_RXD, 0)
144#define UART_RXD_PA3_1 CH570_PINMUX_DEFINE(3, UART_RXD, 1)
146#define UART_RXD_PA0_2 CH570_PINMUX_DEFINE(0, UART_RXD, 2)
148#define UART_RXD_PA1_3 CH570_PINMUX_DEFINE(1, UART_RXD, 3)
150#define UART_RXD_PA6_4 CH570_PINMUX_DEFINE(6, UART_RXD, 4)
152#define UART_RXD_PA9_5 CH570_PINMUX_DEFINE(9, UART_RXD, 5)
154#define UART_RXD_PA10_6 CH570_PINMUX_DEFINE(10, UART_RXD, 6)
156#define UART_RXD_PA11_7 CH570_PINMUX_DEFINE(11, UART_RXD, 7)
158
164#define TMR_PWM0_CAPIN1_PA7_0 CH570_PINMUX_DEFINE(7, TMR, 0)
166#define TMR_PWM0_CAPIN1_PA2_1 CH570_PINMUX_DEFINE(2, TMR, 1)
168#define TMR_PWM0_CAPIN1_PA4_2 CH570_PINMUX_DEFINE(4, TMR, 2)
170#define TMR_PWM0_CAPIN1_PA9_3 CH570_PINMUX_DEFINE(9, TMR, 3)
172#define TMR_CAPIN2_PA2_0 CH570_PINMUX_DEFINE(2, TMR, 0)
174#define TMR_CAPIN2_PA7_1 CH570_PINMUX_DEFINE(7, TMR, 1)
176#define TMR_CAPIN2_PA9_2 CH570_PINMUX_DEFINE(9, TMR, 2)
178#define TMR_CAPIN2_PA4_3 CH570_PINMUX_DEFINE(4, TMR, 3)
180
186#define SPI_CS_PA4_0 CH570_PINMUX_DEFINE(4, SPI_CS, 0)
188#define SPI_CS_PA2_1 CH570_PINMUX_DEFINE(2, SPI_CS, 1)
190#define SPI_CLK_PA5_0 CH570_PINMUX_DEFINE(5, SPI_CLK, 0)
192#define SPI_CLK_PA3_1 CH570_PINMUX_DEFINE(3, SPI_CLK, 1)
194#define SPI_MOSI_PA7_0 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 0)
196#define SPI_MISO_PA6_0 CH570_PINMUX_DEFINE(6, NO_ALTERNATE, 0)
198
204#define I2C_SCL_PA8_0 CH570_PINMUX_DEFINE(8, I2C_PIN, 0)
206#define I2C_SCL_PA0_1 CH570_PINMUX_DEFINE(0, I2C_PIN, 1)
208#define I2C_SCL_PA3_2 CH570_PINMUX_DEFINE(3, I2C_PIN, 2)
210#define I2C_SCL_PA5_3 CH570_PINMUX_DEFINE(5, I2C_PIN, 3)
212#define I2C_SDA_PA9_0 CH570_PINMUX_DEFINE(9, I2C_PIN, 0)
214#define I2C_SDA_PA1_1 CH570_PINMUX_DEFINE(1, I2C_PIN, 1)
216#define I2C_SDA_PA2_2 CH570_PINMUX_DEFINE(2, I2C_PIN, 2)
218#define I2C_SDA_PA6_3 CH570_PINMUX_DEFINE(6, I2C_PIN, 3)
220
226#define KEYSCAN_0_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
228#define KEYSCAN_1_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
230#define KEYSCAN_2_PA8_0 CH570_PINMUX_DEFINE(8, NO_ALTERNATE, 0)
232#define KEYSCAN_3_PA10_0 CH570_PINMUX_DEFINE(10, NO_ALTERNATE, 0)
234#define KEYSCAN_4_PA11_0 CH570_PINMUX_DEFINE(11, NO_ALTERNATE, 0)
236
242#define CMP_P0_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
244#define CMP_P1_PA7_0 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 0)
246#define CMP_N_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
248
254#define PWM1_PA7_0 CH570_PINMUX_DEFINE(7, NO_ALTERNATE, 0)
256#define PWM2_PA2_0 CH570_PINMUX_DEFINE(2, NO_ALTERNATE, 0)
258#define PWM3_PA3_0 CH570_PINMUX_DEFINE(3, NO_ALTERNATE, 0)
260#define PWM4_PA4_0 CH570_PINMUX_DEFINE(4, NO_ALTERNATE, 0)
262#define PWM5_PA8_0 CH570_PINMUX_DEFINE(8, NO_ALTERNATE, 0)
264
270#define OSC25M_ENABLE_PA4_0 CH570_PINMUX_DEFINE(4, OSC_25M_ENABLE, 1)
272
273#endif /* ZEPHYR_INCLUDE_DT_BINDINGS_PINCTRL_CH570_PINCTRL_H_ */