]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py
c18e9d940aa974461cfca41f5918dfb5a086a7bb
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / amlogic / meson_g12_common / pin.py
1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
2 # SPDX-FileCopyrightText: 2023 Steve Jeong for Hardkernel
3 #
4 # SPDX-License-Identifier: MIT
5 """
6 G12A, G12B, and SM1 Common Definitions
7 Ref:
8 Linux kernel 4.9.y (hardkernel)
9     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
10 Linux kernel 5.4.y (mainline)
11     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
12     linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
13 """
14
15 from adafruit_blinka.agnostic import detector
16 from adafruit_blinka.microcontroller.alias import get_dts_alias, get_pwm_chipid
17 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
18
19 try:
20     import gpiod
21 except ImportError:
22     raise ImportError(
23         "libgpiod Python bindings not found, please install and try again!"
24     ) from ImportError
25
26 if hasattr(gpiod, "Chip"):
27     chip0 = gpiod.Chip("0")
28     chip1 = gpiod.Chip("1")
29 else:
30     chip0 = gpiod.chip("0")
31     chip1 = gpiod.chip("1")
32
33 if callable(chip0.num_lines):
34     chip0lines = chip0.num_lines()
35 else:
36     chip0lines = chip0.num_lines
37
38 if callable(chip1.num_lines):
39     chip1lines = chip1.num_lines()
40 else:
41     chip1lines = chip1.num_lines
42
43 if chip0lines < 20:
44     aobus = 0
45     periphs = 1
46     periphs_offset = chip1lines - 85
47 else:
48     aobus = 1
49     periphs = 0
50     periphs_offset = chip0lines - 85
51
52 del chip0
53 del chip1
54
55 GPIOAO_0 = GPIO496 = Pin((aobus, 0))
56 GPIOAO_1 = GPIO497 = Pin((aobus, 1))
57 GPIOAO_2 = GPIO498 = Pin((aobus, 2))
58 GPIOAO_3 = GPIO499 = Pin((aobus, 3))
59 GPIOAO_4 = GPIO500 = Pin((aobus, 4))
60 GPIOAO_5 = GPIO501 = Pin((aobus, 5))
61 GPIOAO_6 = GPIO502 = Pin((aobus, 6))
62 GPIOAO_7 = GPIO503 = Pin((aobus, 7))
63 GPIOAO_8 = GPIO504 = Pin((aobus, 8))
64 GPIOAO_9 = GPIO505 = Pin((aobus, 9))
65 GPIOAO_10 = GPIO506 = Pin((aobus, 10))
66 GPIOAO_11 = GPIO507 = Pin((aobus, 11))
67 GPIOE_0 = GPIO508 = Pin((aobus, 12))
68 GPIOE_1 = GPIO509 = Pin((aobus, 13))
69 GPIOE_2 = GPIO510 = Pin((aobus, 14))
70 GPIO_TEST_N = GPIO511 = Pin((aobus, 15))
71
72 GPIOH_0 = GPIO427 = Pin((periphs, 16 + periphs_offset))
73 GPIOH_1 = GPIO428 = Pin((periphs, 17 + periphs_offset))
74 GPIOH_2 = GPIO429 = Pin((periphs, 18 + periphs_offset))
75 GPIOH_3 = GPIO430 = Pin((periphs, 19 + periphs_offset))
76 GPIOH_4 = GPIO431 = Pin((periphs, 20 + periphs_offset))
77 GPIOH_5 = GPIO432 = Pin((periphs, 21 + periphs_offset))
78 GPIOH_6 = GPIO433 = Pin((periphs, 22 + periphs_offset))
79 GPIOH_7 = GPIO434 = Pin((periphs, 23 + periphs_offset))
80 GPIOH_8 = GPIO435 = Pin((periphs, 24 + periphs_offset))
81
82 GPIOA_0 = GPIO460 = Pin((periphs, 49 + periphs_offset))
83 GPIOA_1 = GPIO461 = Pin((periphs, 50 + periphs_offset))
84 GPIOA_2 = GPIO462 = Pin((periphs, 51 + periphs_offset))
85 GPIOA_3 = GPIO463 = Pin((periphs, 52 + periphs_offset))
86 GPIOA_4 = GPIO464 = Pin((periphs, 53 + periphs_offset))
87 GPIOA_5 = GPIO465 = Pin((periphs, 54 + periphs_offset))
88 GPIOA_6 = GPIO466 = Pin((periphs, 55 + periphs_offset))
89 GPIOA_7 = GPIO467 = Pin((periphs, 56 + periphs_offset))
90 GPIOA_8 = GPIO468 = Pin((periphs, 57 + periphs_offset))
91 GPIOA_9 = GPIO469 = Pin((periphs, 58 + periphs_offset))
92 GPIOA_10 = GPIO470 = Pin((periphs, 59 + periphs_offset))
93 GPIOA_11 = GPIO471 = Pin((periphs, 60 + periphs_offset))
94 GPIOA_12 = GPIO472 = Pin((periphs, 61 + periphs_offset))
95 GPIOA_13 = GPIO473 = Pin((periphs, 62 + periphs_offset))
96 GPIOA_14 = GPIO474 = Pin((periphs, 63 + periphs_offset))
97 GPIOA_15 = GPIO475 = Pin((periphs, 64 + periphs_offset))
98
99 GPIOX_0 = GPIO476 = Pin((periphs, 65 + periphs_offset))
100 GPIOX_1 = GPIO477 = Pin((periphs, 66 + periphs_offset))
101 GPIOX_2 = GPIO478 = Pin((periphs, 67 + periphs_offset))
102 GPIOX_3 = GPIO479 = Pin((periphs, 68 + periphs_offset))
103 GPIOX_4 = GPIO480 = Pin((periphs, 69 + periphs_offset))
104 GPIOX_5 = GPIO481 = Pin((periphs, 70 + periphs_offset))
105 GPIOX_6 = GPIO482 = Pin((periphs, 71 + periphs_offset))
106 GPIOX_7 = GPIO483 = Pin((periphs, 72 + periphs_offset))
107 GPIOX_8 = GPIO484 = Pin((periphs, 73 + periphs_offset))
108 GPIOX_9 = GPIO485 = Pin((periphs, 74 + periphs_offset))
109 GPIOX_10 = GPIO486 = Pin((periphs, 75 + periphs_offset))
110 GPIOX_11 = GPIO487 = Pin((periphs, 76 + periphs_offset))
111 GPIOX_12 = GPIO488 = Pin((periphs, 77 + periphs_offset))
112 GPIOX_13 = GPIO489 = Pin((periphs, 78 + periphs_offset))
113 GPIOX_14 = GPIO490 = Pin((periphs, 79 + periphs_offset))
114 GPIOX_15 = GPIO491 = Pin((periphs, 80 + periphs_offset))
115 GPIOX_16 = GPIO492 = Pin((periphs, 81 + periphs_offset))
116 GPIOX_17 = GPIO493 = Pin((periphs, 82 + periphs_offset))
117 GPIOX_18 = GPIO494 = Pin((periphs, 83 + periphs_offset))
118 GPIOX_19 = GPIO495 = Pin((periphs, 84 + periphs_offset))
119
120 SPI0_SCLK = GPIOX_11
121 SPI0_MISO = GPIOX_9
122 SPI0_MOSI = GPIOX_8
123 SPI0_CS0 = GPIOX_10
124
125 UART1_TX = GPIOX_12
126 UART1_RX = GPIOX_13
127
128 # ordered as i2cId, sclId, sdaId
129 i2cPorts = []
130
131 # ordered as spiId, sckId, mosiId, misoId
132 spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO),)
133
134 # SysFs pwm outputs, pwm channel and pin in first tuple
135 pwmOuts = []
136
137 # ordered as uartId, txId, rxId
138 uartPorts = [
139     (1, UART1_TX, UART1_RX),
140 ]
141
142 # SysFS analog inputs, Ordered as analog analogInId, device, and channel
143 analogIns = []
144
145 board = detector.board.id
146 if board in ("ODROID_C4", "ODROID_N2"):
147     alias = get_dts_alias("ffd1d000.i2c")
148     if alias is not None:
149         globals()[alias + "_SCL"] = GPIOX_18
150         globals()[alias + "_SDA"] = GPIOX_17
151         i2cPorts.append((int(alias[-1]), GPIOX_18, GPIOX_17))
152     alias = get_dts_alias("ffd1c000.i2c")
153     if alias is not None:
154         globals()[alias + "_SCL"] = GPIOA_15
155         globals()[alias + "_SDA"] = GPIOA_14
156         i2cPorts.append((int(alias[-1]), GPIOA_15, GPIOA_14))
157     alias = get_dts_alias("ffd24000.serial")
158     if alias is not None:
159         globals()[alias + "_TX"] = GPIOX_12
160         globals()[alias + "_RX"] = GPIOX_13
161         uartPorts.append((int(alias[-1]), GPIOX_12, GPIOX_13))
162     alias = get_dts_alias("ffd23000.serial")
163     if alias is not None:
164         globals()[alias + "_TX"] = GPIOX_6
165         globals()[alias + "_RX"] = GPIOX_7
166         uartPorts.append((int(alias[-1]), GPIOX_6, GPIOX_7))
167
168 if board in ("ODROID_C4"):
169     alias = get_pwm_chipid("ffd1b000.pwm")
170     if alias is not None:
171         globals()["PWMA"] = GPIOX_6
172         globals()["PWMB"] = GPIOX_19
173         pwmOuts.append(((int(alias[-1]), 0), GPIOX_6))
174         pwmOuts.append(((int(alias[-1]), 1), GPIOX_19))
175     alias = get_pwm_chipid("ffd1a000.pwm")
176     if alias is not None:
177         globals()["PWMC"] = GPIOX_5
178         globals()["PWMD"] = GPIOX_3
179         pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
180         pwmOuts.append(((int(alias[-1]), 1), GPIOX_3))
181     alias = get_pwm_chipid("ffd19000.pwm")
182     if alias is not None:
183         globals()["PWME"] = GPIOX_16
184         globals()["PWMF"] = GPIOH_5
185         pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
186         pwmOuts.append(((int(alias[-1]), 1), GPIOH_5))
187     analogIns.append((37, 0, 2))
188     analogIns.append((40, 0, 0))
189 if board in ("ODROID_N2"):
190     alias = get_pwm_chipid("ffd1a000.pwm")
191     if alias is not None:
192         globals()["PWMC"] = GPIOX_5
193         globals()["PWMD"] = GPIOX_6
194         pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
195         pwmOuts.append(((int(alias[-1]), 1), GPIOX_6))
196     alias = get_pwm_chipid("ffd19000.pwm")
197     if alias is not None:
198         globals()["PWME"] = GPIOX_16
199         globals()["PWMF"] = GPIOX_7
200         pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
201         pwmOuts.append(((int(alias[-1]), 1), GPIOX_7))
202     analogIns.append((37, 0, 3))
203     analogIns.append((40, 0, 2))
204
205 analogIns = tuple(analogIns)
206 i2cPorts = tuple(i2cPorts)
207 pwmOuts = tuple(pwmOuts)
208 uartPorts = tuple(uartPorts)