[PATCH 1/3] dt-bindings: pinctrl: Add pinctrl for Sophgo SG2042 series SoC
Inochi Amaoto
inochiama at gmail.com
Mon Oct 28 20:40:35 PDT 2024
On Tue, Oct 29, 2024 at 09:59:33AM +0800, Chen Wang wrote:
> Hello ~
>
> On 2024/10/24 14:43, Inochi Amaoto wrote:
> > SG2042 introduces a simple pinctrl device for all configurable pins.
> > The pinconf and pinmux are mixed in a 16 bits register for each pin.
> Can we change this sentence to "For the SG2042 pinctl register file, each
> register (32 bits) is responsible for two pins, each occupying the upper 16
> bits and lower 16 bits of the register."
Yeah, it look like more clear. I will take it, thanks.
> > It supports setting pull up/down, drive strength and input schmitt
> > trigger.
> >
> > Add support for SG2042 pinctrl device.
> >
> > Signed-off-by: Inochi Amaoto <inochiama at gmail.com>
> > ---
> > .../pinctrl/sophgo,sg2042-pinctrl.yaml | 96 +++++++++
> > include/dt-bindings/pinctrl/pinctrl-sg2042.h | 196 ++++++++++++++++++
> > 2 files changed, 292 insertions(+)
> > create mode 100644 Documentation/devicetree/bindings/pinctrl/sophgo,sg2042-pinctrl.yaml
> > create mode 100644 include/dt-bindings/pinctrl/pinctrl-sg2042.h
> >
> > diff --git a/Documentation/devicetree/bindings/pinctrl/sophgo,sg2042-pinctrl.yaml b/Documentation/devicetree/bindings/pinctrl/sophgo,sg2042-pinctrl.yaml
> > new file mode 100644
> > index 000000000000..5060deacd580
> > --- /dev/null
> > +++ b/Documentation/devicetree/bindings/pinctrl/sophgo,sg2042-pinctrl.yaml
> > @@ -0,0 +1,96 @@
> > +# SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause
> > +%YAML 1.2
> > +---
> > +$id: http://devicetree.org/schemas/pinctrl/sophgo,sg2042-pinctrl.yaml#
> > +$schema: http://devicetree.org/meta-schemas/core.yaml#
> > +
> > +title: Sophgo SG2042 Pin Controller
> > +
> > +maintainers:
> > + - Inochi Amaoto <inochiama at outlook.com>
> > +
> > +properties:
> > + compatible:
> > + enum:
> > + - sophgo,sg2042-pinctrl
> > +
> > + reg:
> > + maxItems: 1
> > +
> > +patternProperties:
> > + '-cfg$':
> > + type: object
> > + description:
> > + A pinctrl node should contain at least one subnode representing the
> > + pinctrl groups available on the machine.
> > +
> > + additionalProperties: false
> > +
> > + patternProperties:
> > + '-pins$':
> > + type: object
> > + description: |
> > + Each subnode will list the pins it needs, and how they should
> > + be configured, with regard to muxer configuration, bias input
> > + enable/disable, input schmitt trigger enable, drive strength
> > + output enable/disable state. For configuration detail,
> > + refer to https://github.com/sophgo/sophgo-doc/.
> More accurate: https://github.com/sophgo/sophgo-doc/tree/main/SG2042/TRM
> > +
> > + allOf:
> > + - $ref: pincfg-node.yaml#
> > + - $ref: pinmux-node.yaml#
> > +
> > + properties:
> > + pinmux:
> > + description: |
> > + The list of GPIOs and their mux settings that properties in the
> > + node apply to. This should be set using the GPIOMUX
> Not GPIOMUX, should be PINMUX.
I will fix it.
> > + macro.
> > +
> > + bias-disable: true
> > +
> > + bias-pull-up:
> > + type: boolean
> > +
> > + bias-pull-down:
> > + type: boolean
> > +
> > + drive-strength-microamp:
> > + description: typical current when output high level.
> > + enum: [ 4300, 6400, 8500, 10600, 12800, 14900, 17000, 19100,
> > + 21200, 23300, 25500, 27600, 29700, 31800, 33900, 36000]
> Where can I find these enum values in TRM? I just see the field "Driving
> Selector" occupies 4 bits for each pin.
This is based on the electrical characteristics of the SG2042. However, this
document is not opened, you may ask sophgo to open it.
> > + input-schmitt-enable: true
> > +
> > + input-schmitt-disable: true
> > +
> > + required:
> > + - pinmux
> > +
> > + additionalProperties: false
> > +
> > +required:
> > + - compatible
> > + - reg
> > +
> > +additionalProperties: false
> > +
> > +examples:
> > + - |
> > + #include <dt-bindings/pinctrl/pinctrl-sg2042.h>
> > +
> > + pinctrl at 30011000 {
> > + compatible = "sophgo,sg2042-pinctrl";
> > + reg = <30011000 0x1000>;
> > +
> > + uart0_cfg: uart0-cfg {
> > + uart0-pins {
> > + pinmux = <PINMUX(PIN_UART0_TX, 0)>,
> > + <PINMUX(PIN_UART0_RX, 0)>;
> > + bias-pull-up;
> > + drive-strength-microamp = <10600>;
> > + };
> > + };
> > + };
> > +
> > +...
> > diff --git a/include/dt-bindings/pinctrl/pinctrl-sg2042.h b/include/dt-bindings/pinctrl/pinctrl-sg2042.h
> > new file mode 100644
> > index 000000000000..79d5bb8e04f8
> > --- /dev/null
> > +++ b/include/dt-bindings/pinctrl/pinctrl-sg2042.h
> > @@ -0,0 +1,196 @@
> > +/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */
> > +/*
> > + * Copyright (C) 2024 Inochi Amaoto <inochiama at outlook.com>
> > + *
> > + */
> > +
> > +#ifndef _DT_BINDINGS_PINCTRL_SG2042_H
> > +#define _DT_BINDINGS_PINCTRL_SG2042_H
> > +
> > +#define PINMUX(pin, mux) \
> > + (((pin) & 0xffff) | (((mux) & 0xff) << 16))
> > +
> > +#define PIN_LPC_LCLK 0
> > +#define PIN_LPC_LFRAME 1
> > +#define PIN_LPC_LAD0 2
> > +#define PIN_LPC_LAD1 3
> > +#define PIN_LPC_LAD2 4
> > +#define PIN_LPC_LAD3 5
> > +#define PIN_LPC_LDRQ0 6
> > +#define PIN_LPC_LDRQ1 7
> > +#define PIN_LPC_SERIRQ 8
> > +#define PIN_LPC_CLKRUN 9
> > +#define PIN_LPC_LPME 10
> > +#define PIN_LPC_LPCPD 11
> > +#define PIN_LPC_LSMI 12
> > +#define PIN_PCIE0_L0_RESET 13
> > +#define PIN_PCIE0_L1_RESET 14
> > +#define PIN_PCIE0_L0_WAKEUP 15
> > +#define PIN_PCIE0_L1_WAKEUP 16
> > +#define PIN_PCIE0_L0_CLKREQ_IN 17
> > +#define PIN_PCIE0_L1_CLKREQ_IN 18
> > +#define PIN_PCIE1_L0_RESET 19
> > +#define PIN_PCIE1_L1_RESET 20
> > +#define PIN_PCIE1_L0_WAKEUP 21
> > +#define PIN_PCIE1_L1_WAKEUP 22
> > +#define PIN_PCIE1_L0_CLKREQ_IN 23
> > +#define PIN_PCIE1_L1_CLKREQ_IN 24
> > +#define PIN_SPIF0_CLK_SEL1 25
> > +#define PIN_SPIF0_CLK_SEL0 26
> > +#define PIN_SPIF0_WP 27
> > +#define PIN_SPIF0_HOLD 28
> > +#define PIN_SPIF0_SDI 29
> > +#define PIN_SPIF0_CS 30
> > +#define PIN_SPIF0_SCK 31
> > +#define PIN_SPIF0_SDO 32
> > +#define PIN_SPIF1_CLK_SEL1 33
> > +#define PIN_SPIF1_CLK_SEL0 34
> > +#define PIN_SPIF1_WP 35
> > +#define PIN_SPIF1_HOLD 36
> > +#define PIN_SPIF1_SDI 37
> > +#define PIN_SPIF1_CS 38
> > +#define PIN_SPIF1_SCK 39
> > +#define PIN_SPIF1_SDO 40
> > +#define PIN_EMMC_WP 41
> > +#define PIN_EMMC_CD 42
> > +#define PIN_EMMC_RST 43
> > +#define PIN_EMMC_PWR_EN 44
> > +#define PIN_SDIO_CD 45
> > +#define PIN_SDIO_WP 46
> > +#define PIN_SDIO_RST 47
> > +#define PIN_SDIO_PWR_EN 48
> > +#define PIN_RGMII0_TXD0 49
> > +#define PIN_RGMII0_TXD1 50
> > +#define PIN_RGMII0_TXD2 51
> > +#define PIN_RGMII0_TXD3 52
> > +#define PIN_RGMII0_TXCTRL 53
> > +#define PIN_RGMII0_RXD0 54
> > +#define PIN_RGMII0_RXD1 55
> > +#define PIN_RGMII0_RXD2 56
> > +#define PIN_RGMII0_RXD3 57
> > +#define PIN_RGMII0_RXCTRL 58
> > +#define PIN_RGMII0_TXC 59
> > +#define PIN_RGMII0_RXC 60
> > +#define PIN_RGMII0_REFCLKO 61
> > +#define PIN_RGMII0_IRQ 62
> > +#define PIN_RGMII0_MDC 63
> > +#define PIN_RGMII0_MDIO 64
> > +#define PIN_PWM0 65
> > +#define PIN_PWM1 66
> > +#define PIN_PWM2 67
> > +#define PIN_PWM3 68
> > +#define PIN_FAN0 69
> > +#define PIN_FAN1 70
> > +#define PIN_FAN2 71
> > +#define PIN_FAN3 72
> > +#define PIN_IIC0_SDA 73
> > +#define PIN_IIC0_SCL 74
> > +#define PIN_IIC1_SDA 75
> > +#define PIN_IIC1_SCL 76
> > +#define PIN_IIC2_SDA 77
> > +#define PIN_IIC2_SCL 78
> > +#define PIN_IIC3_SDA 79
> > +#define PIN_IIC3_SCL 80
> > +#define PIN_UART0_TX 81
> > +#define PIN_UART0_RX 82
> > +#define PIN_UART0_RTS 83
> > +#define PIN_UART0_CTS 84
> > +#define PIN_UART1_TX 85
> > +#define PIN_UART1_RX 86
> > +#define PIN_UART1_RTS 87
> > +#define PIN_UART1_CTS 88
> > +#define PIN_UART2_TX 89
> > +#define PIN_UART2_RX 90
> > +#define PIN_UART2_RTS 91
> > +#define PIN_UART2_CTS 92
> > +#define PIN_UART3_TX 93
> > +#define PIN_UART3_RX 94
> > +#define PIN_UART3_RTS 95
> > +#define PIN_UART3_CTS 96
> > +#define PIN_SPI0_CS0 97
> > +#define PIN_SPI0_CS1 98
> > +#define PIN_SPI0_SDI 99
> > +#define PIN_SPI0_SDO 100
> > +#define PIN_SPI0_SCK 101
> > +#define PIN_SPI1_CS0 102
> > +#define PIN_SPI1_CS1 103
> > +#define PIN_SPI1_SDI 104
> > +#define PIN_SPI1_SDO 105
> > +#define PIN_SPI1_SCK 106
> > +#define PIN_JTAG0_TDO 107
> > +#define PIN_JTAG0_TCK 108
> > +#define PIN_JTAG0_TDI 109
> > +#define PIN_JTAG0_TMS 110
> > +#define PIN_JTAG0_TRST 111
> > +#define PIN_JTAG0_SRST 112
> > +#define PIN_JTAG1_TDO 113
> > +#define PIN_JTAG1_TCK 114
> > +#define PIN_JTAG1_TDI 115
> > +#define PIN_JTAG1_TMS 116
> > +#define PIN_JTAG1_TRST 117
> > +#define PIN_JTAG1_SRST 118
> > +#define PIN_JTAG2_TDO 119
> > +#define PIN_JTAG2_TCK 120
> > +#define PIN_JTAG2_TDI 121
> > +#define PIN_JTAG2_TMS 122
> > +#define PIN_JTAG2_TRST 123
> > +#define PIN_JTAG2_SRST 124
> > +#define PIN_GPIO0 125
> > +#define PIN_GPIO1 126
> > +#define PIN_GPIO2 127
> > +#define PIN_GPIO3 128
> > +#define PIN_GPIO4 129
> > +#define PIN_GPIO5 130
> > +#define PIN_GPIO6 131
> > +#define PIN_GPIO7 132
> > +#define PIN_GPIO8 133
> > +#define PIN_GPIO9 134
> > +#define PIN_GPIO10 135
> > +#define PIN_GPIO11 136
> > +#define PIN_GPIO12 137
> > +#define PIN_GPIO13 138
> > +#define PIN_GPIO14 139
> > +#define PIN_GPIO15 140
> > +#define PIN_GPIO16 141
> > +#define PIN_GPIO17 142
> > +#define PIN_GPIO18 143
> > +#define PIN_GPIO19 144
> > +#define PIN_GPIO20 145
> > +#define PIN_GPIO21 146
> > +#define PIN_GPIO22 147
> > +#define PIN_GPIO23 148
> > +#define PIN_GPIO24 149
> > +#define PIN_GPIO25 150
> > +#define PIN_GPIO26 151
> > +#define PIN_GPIO27 152
> > +#define PIN_GPIO28 153
> > +#define PIN_GPIO29 154
> > +#define PIN_GPIO30 155
> > +#define PIN_GPIO31 156
> > +#define PIN_MODE_SEL0 157
> > +#define PIN_MODE_SEL1 158
> > +#define PIN_MODE_SEL2 159
> > +#define PIN_BOOT_SEL0 160
> > +#define PIN_BOOT_SEL1 161
> > +#define PIN_BOOT_SEL2 162
> > +#define PIN_BOOT_SEL3 163
> > +#define PIN_BOOT_SEL4 164
> > +#define PIN_BOOT_SEL5 165
> > +#define PIN_BOOT_SEL6 166
> > +#define PIN_BOOT_SEL7 167
> > +#define PIN_MULTI_SCKT 168
> > +#define PIN_SCKT_ID0 169
> > +#define PIN_SCKT_ID1 170
> > +#define PIN_PLL_CLK_IN_MAIN 171
> > +#define PIN_PLL_CLK_IN_DDR_L 172
> > +#define PIN_PLL_CLK_IN_DDR_R 173
> > +#define PIN_XTAL_32K 174
> > +#define PIN_SYS_RST 175
> > +#define PIN_PWR_BUTTON 176
> > +#define PIN_TEST_EN 177
> > +#define PIN_TEST_MODE_MBIST 178
> > +#define PIN_TEST_MODE_SCAN 179
> > +#define PIN_TEST_MODE_BSD 180
> > +#define PIN_BISR_BYP 181
> > +
> > +#endif /* _DT_BINDINGS_PINCTRL_SG2042_H */
More information about the linux-riscv
mailing list