]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py
82fa6ea267b07072b1c629589cdea8b71c8a8ed0
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / amlogic / meson_g12_common / pin.py
1 """
2 G12A, G12B, and SM1 Common Definitions
3 Ref:
4 Linux kernel 4.9.y (hardkernel)
5     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
6 Linux kernel 5.4.y (mainline)
7     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
8     linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
9 """
10
11 import re
12 import gpiod
13 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
14
15 chip0 = gpiod.Chip("0")
16 chip1 = gpiod.Chip("1")
17
18 if chip0.num_lines() < 20:
19     aobus = 0
20     periphs = 1
21     periphs_offset = chip1.num_lines() - 85
22 else:
23     aobus = 1
24     periphs = 0
25     periphs_offset = chip0.num_lines() - 85
26
27 chip0.close()
28 chip1.close()
29
30 GPIOAO_0 = GPIO496 = Pin((aobus, 0))
31 GPIOAO_1 = GPIO497 = Pin((aobus, 1))
32 GPIOAO_2 = GPIO498 = Pin((aobus, 2))
33 GPIOAO_3 = GPIO499 = Pin((aobus, 3))
34 GPIOAO_4 = GPIO500 = Pin((aobus, 4))
35 GPIOAO_5 = GPIO501 = Pin((aobus, 5))
36 GPIOAO_6 = GPIO502 = Pin((aobus, 6))
37 GPIOAO_7 = GPIO503 = Pin((aobus, 7))
38 GPIOAO_8 = GPIO504 = Pin((aobus, 8))
39 GPIOAO_9 = GPIO505 = Pin((aobus, 9))
40 GPIOAO_10 = GPIO506 = Pin((aobus, 10))
41 GPIOAO_11 = GPIO507 = Pin((aobus, 11))
42 GPIOE_0 = GPIO508 = Pin((aobus, 12))
43 GPIOE_1 = GPIO509 = Pin((aobus, 13))
44 GPIOE_2 = GPIO510 = Pin((aobus, 14))
45 GPIO_TEST_N = GPIO511 = Pin((aobus, 15))
46
47 GPIOH_0 = GPIO427 = Pin((periphs, 16 + periphs_offset))
48 GPIOH_1 = GPIO428 = Pin((periphs, 17 + periphs_offset))
49 GPIOH_2 = GPIO429 = Pin((periphs, 18 + periphs_offset))
50 GPIOH_3 = GPIO430 = Pin((periphs, 19 + periphs_offset))
51 GPIOH_4 = GPIO431 = Pin((periphs, 20 + periphs_offset))
52 GPIOH_5 = GPIO432 = Pin((periphs, 21 + periphs_offset))
53 GPIOH_6 = GPIO433 = Pin((periphs, 22 + periphs_offset))
54 GPIOH_7 = GPIO434 = Pin((periphs, 23 + periphs_offset))
55 GPIOH_8 = GPIO435 = Pin((periphs, 24 + periphs_offset))
56
57 GPIOA_0 = GPIO460 = Pin((periphs, 49 + periphs_offset))
58 GPIOA_1 = GPIO461 = Pin((periphs, 50 + periphs_offset))
59 GPIOA_2 = GPIO462 = Pin((periphs, 51 + periphs_offset))
60 GPIOA_3 = GPIO463 = Pin((periphs, 52 + periphs_offset))
61 GPIOA_4 = GPIO464 = Pin((periphs, 53 + periphs_offset))
62 GPIOA_5 = GPIO465 = Pin((periphs, 54 + periphs_offset))
63 GPIOA_6 = GPIO466 = Pin((periphs, 55 + periphs_offset))
64 GPIOA_7 = GPIO467 = Pin((periphs, 56 + periphs_offset))
65 GPIOA_8 = GPIO468 = Pin((periphs, 57 + periphs_offset))
66 GPIOA_9 = GPIO469 = Pin((periphs, 58 + periphs_offset))
67 GPIOA_10 = GPIO470 = Pin((periphs, 59 + periphs_offset))
68 GPIOA_11 = GPIO471 = Pin((periphs, 60 + periphs_offset))
69 GPIOA_12 = GPIO472 = Pin((periphs, 61 + periphs_offset))
70 GPIOA_13 = GPIO473 = Pin((periphs, 62 + periphs_offset))
71 GPIOA_14 = GPIO474 = Pin((periphs, 63 + periphs_offset))
72 GPIOA_15 = GPIO475 = Pin((periphs, 64 + periphs_offset))
73
74 GPIOX_0 = GPIO476 = Pin((periphs, 65 + periphs_offset))
75 GPIOX_1 = GPIO477 = Pin((periphs, 66 + periphs_offset))
76 GPIOX_2 = GPIO478 = Pin((periphs, 67 + periphs_offset))
77 GPIOX_3 = GPIO479 = Pin((periphs, 68 + periphs_offset))
78 GPIOX_4 = GPIO480 = Pin((periphs, 69 + periphs_offset))
79 GPIOX_5 = GPIO481 = Pin((periphs, 70 + periphs_offset))
80 GPIOX_6 = GPIO482 = Pin((periphs, 71 + periphs_offset))
81 GPIOX_7 = GPIO483 = Pin((periphs, 72 + periphs_offset))
82 GPIOX_8 = GPIO484 = Pin((periphs, 73 + periphs_offset))
83 GPIOX_9 = GPIO485 = Pin((periphs, 74 + periphs_offset))
84 GPIOX_10 = GPIO486 = Pin((periphs, 75 + periphs_offset))
85 GPIOX_11 = GPIO487 = Pin((periphs, 76 + periphs_offset))
86 GPIOX_12 = GPIO488 = Pin((periphs, 77 + periphs_offset))
87 GPIOX_13 = GPIO489 = Pin((periphs, 78 + periphs_offset))
88 GPIOX_14 = GPIO490 = Pin((periphs, 79 + periphs_offset))
89 GPIOX_15 = GPIO491 = Pin((periphs, 80 + periphs_offset))
90 GPIOX_16 = GPIO492 = Pin((periphs, 81 + periphs_offset))
91 GPIOX_17 = GPIO493 = Pin((periphs, 82 + periphs_offset))
92 GPIOX_18 = GPIO494 = Pin((periphs, 83 + periphs_offset))
93 GPIOX_19 = GPIO495 = Pin((periphs, 84 + periphs_offset))
94
95 SPI0_SCLK = GPIOX_11
96 SPI0_MISO = GPIOX_9
97 SPI0_MOSI = GPIOX_8
98 SPI0_CS0 = GPIOX_10
99
100 # ordered as spiId, sckId, mosiId, misoId
101 spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO),)
102
103 UART1_TX = GPIOX_12
104 UART1_RX = GPIOX_13
105
106 # ordered as uartId, txId, rxId
107 uartPorts = ((1, UART1_TX, UART1_RX),)
108
109
110 def get_dts_alias(device: str) -> str:
111     """Get the Device Tree Alias"""
112     uevent_path = "/sys/bus/platform/devices/" + device + "/uevent"
113     with open(uevent_path, "r") as fd:
114         pattern = r"^OF_ALIAS_0=(.*)$"
115         uevent = fd.read().split("\n")
116         for line in uevent:
117             match = re.search(pattern, line)
118             if match:
119                 return match.group(1).upper()
120
121         return None
122
123
124 # ordered as i2cId, sclId, sdaId
125 i2cPorts = []
126
127 alias = get_dts_alias("ffd1d000.i2c")
128 if alias is not None:
129     globals()[alias + "_SCL"] = GPIOX_18
130     globals()[alias + "_SDA"] = GPIOX_17
131     i2cPorts.append((int(alias[3]), GPIOX_18, GPIOX_17))
132
133 alias = get_dts_alias("ffd1c000.i2c")
134 if alias is not None:
135     globals()[alias + "_SCL"] = GPIOA_15
136     globals()[alias + "_SDA"] = GPIOA_14
137     i2cPorts.append((int(alias[3]), GPIOA_15, GPIOA_14))
138
139 i2cPorts = tuple(i2cPorts)