]> Repositories - Adafruit_Blinka-hackapet.git/blob - src/adafruit_blinka/microcontroller/quectel/qcm6490/pin.py
Support for Particle Tachyon
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / quectel / qcm6490 / pin.py
1 # SPDX-FileCopyrightText: 2025 Brett Walach for Particle
2 #
3 # SPDX-License-Identifier: MIT
4 """Quectel QCM6490 pin names"""
5 # from adafruit_blinka.microcontroller.generic_linux.sysfs_pin import Pin
6 # from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
7 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin as GenericLinuxPin
8
9 import os
10
11 # Release (unexport)  all pins on init and set to INPUT mode
12 class Pin(GenericLinuxPin):
13     def __init__(self, pin_id):
14         self._release_sysfs_gpio(pin_id)
15         super().__init__(pin_id)
16
17     def _release_sysfs_gpio(self, pin_id, base_offset=336):
18         # pin_id might be a tuple like (chip_id, line_number)
19         if isinstance(pin_id, tuple):
20             _, line_number = pin_id
21         else:
22             line_number = pin_id
23
24         gpio_num = base_offset + int(line_number)
25         gpio_path = f"/sys/class/gpio/gpio{gpio_num}"
26
27         try:
28             if not os.path.exists(gpio_path):
29                 with open("/sys/class/gpio/export", "w") as f:
30                     f.write(f"{gpio_num}")
31             with open(f"{gpio_path}/direction", "w") as f:
32                 f.write("in")
33             with open("/sys/class/gpio/unexport", "w") as f:
34                 f.write(f"{gpio_num}")
35         except Exception:
36             # fail silently if not allowed
37             pass
38
39 # Use with sysfs_pin
40 # GPIO_BASE = 336
41
42 # Use with libgpiod_pin
43 GPIO_BASE = 0
44
45 GPIO_6 = Pin(GPIO_BASE + 6)
46 UART01_TXD = GPIO_6
47 PWM1 = GPIO_6
48 GPIO_8 = Pin(GPIO_BASE + 8)
49 I2C02_SDA = GPIO_8
50 SDA = GPIO_8
51 GPIO_9 = Pin(GPIO_BASE + 9)
52 I2C02_SCL = GPIO_9
53 SCL = GPIO_9
54 GPIO_18 = Pin(GPIO_BASE + 18)
55 UART04_TXD = GPIO_18
56 SPI04_CLK = GPIO_18
57 GPIO_19 = Pin(GPIO_BASE + 19)
58 UART04_RXD = GPIO_19
59 SPI04_CS0 = GPIO_19
60 GPIO_24 = Pin(GPIO_BASE + 24)
61 GPIO_33 = Pin(GPIO_BASE + 33)
62 UART10_RTS = GPIO_33
63 SPI10_MOSI = GPIO_33
64 I2C10_SCL = GPIO_33
65 GPIO_34 = Pin(GPIO_BASE + 34)
66 UART10_TXD = GPIO_34
67 SPI10_CLK = GPIO_34
68 GPIO_36 = Pin(GPIO_BASE + 36)
69 UART11_CTS = GPIO_36
70 SPI11_MISO = GPIO_36
71 I2C11_SDA = GPIO_36
72 EEPROM_SDA = GPIO_36
73 GPIO_37 = Pin(GPIO_BASE + 37)
74 UART11_RTS = GPIO_37
75 SPI11_MOSI = GPIO_37
76 I2C11_SCL = GPIO_37
77 GPIO_48 = Pin(GPIO_BASE + 48)
78 UART14_CTS = GPIO_48
79 I2C14_SDA = GPIO_48
80 SPI14_MISO = GPIO_48
81 CTS = GPIO_48
82 GPIO_49 = Pin(GPIO_BASE + 49)
83 UART14_RTS = GPIO_49
84 I2C14_SCL = GPIO_49
85 SPI14_MOSI = GPIO_49
86 RTS = GPIO_49
87 GPIO_50 = Pin(GPIO_BASE + 50)
88 UART14_TXD = GPIO_50
89 SPI14_CLK = GPIO_50
90 SPI16_CS3 = GPIO_50
91 TX = GPIO_50
92 GPIO_51 = Pin(GPIO_BASE + 51)
93 UART14_RXD = GPIO_51
94 SPI14_CS0 = GPIO_51
95 RX = GPIO_51
96 GPIO_56 = Pin(GPIO_BASE + 56)
97 MISO = GPIO_56
98 GPIO_57 = Pin(GPIO_BASE + 57)
99 SPI16_MOSI = GPIO_57
100 I2C16_SCL = GPIO_57
101 UART16_RTS = GPIO_57
102 SPI16_MISO = GPIO_57
103 I2C16_SDA = GPIO_57
104 UART16_CTS = GPIO_57
105 MOSI = GPIO_57
106 GPIO_58 = Pin(GPIO_BASE + 58)
107 SPI16_CLK = GPIO_58
108 UART16_TXD = GPIO_58
109 SCK = GPIO_58
110 GPIO_59 = Pin(GPIO_BASE + 59)
111 SPI16_CS0 = GPIO_59
112 UART16_RXD = GPIO_59
113 GPIO_61 = Pin((0, GPIO_BASE + 61))
114 GPIO_62 = Pin(GPIO_BASE + 62)
115 SPI16_CS1 = GPIO_62
116 GPIO_106 = Pin(GPIO_BASE + 106)
117 UART13_TXD = GPIO_106
118 SPI13_CLK = GPIO_106
119 GPIO_144 = Pin(GPIO_BASE + 144)
120 PRI_MI2S_MCLK = GPIO_144
121 GPIO_145 = Pin(GPIO_BASE + 145)
122 MI2S0_WS = GPIO_145
123 MISO1 = GPIO_145
124 GPIO_146 = Pin(GPIO_BASE + 146)
125 MI2S0_DATA0 = GPIO_146
126 GPIO_147 = Pin(GPIO_BASE + 147)
127 MI2S0_DATA1 = GPIO_147
128 GPIO_158 = Pin(GPIO_BASE + 158)
129 GPIO_165 = Pin(GPIO_BASE + 165)
130 GPIO_166 = Pin(GPIO_BASE + 166)
131
132 # ordered as i2cId, i2cSclId, i2cSdaId
133 i2cPorts = ((1, I2C02_SCL, I2C02_SDA),)
134
135 # ordered as spiId, sckId, mosiId, misoId
136 spiPorts = ((16, SPI16_CLK, SPI16_MOSI, SPI16_MISO),)
137
138 # ordered as uartId, txId, rxId
139 uartPorts = ((14, UART14_TXD, UART14_RXD),)
140
141 # ordered as pwmChipId, pwmChannelId, pwmId
142 pwmOuts = (((0, 0), PWM1),)