]> Repositories - Adafruit_Blinka-hackapet.git/blobdiff - src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py
Merge pull request #1005 from makermelissa/libgpiod-fix
[Adafruit_Blinka-hackapet.git] / src / adafruit_blinka / microcontroller / amlogic / meson_g12_common / pin.py
index a6a9be1c6ed5ed3543cd1929153a3d31a273402c..ea01a8eb7c88e7990fc2518b10cad63fb16107d6 100644 (file)
@@ -1,27 +1,39 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+# SPDX-FileCopyrightText: 2023 Steve Jeong for Hardkernel
+#
+# SPDX-License-Identifier: MIT
+"""
+G12A, G12B, and SM1 Common Definitions
+Ref:
+Linux kernel 4.9.y (hardkernel)
+    linux/include/dt-bindings/gpio/meson-g12a-gpio.h
+Linux kernel 5.4.y (mainline)
+    linux/include/dt-bindings/gpio/meson-g12a-gpio.h
+    linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
+"""
+
+from adafruit_blinka.agnostic import detector
+from adafruit_blinka.microcontroller.alias import get_dts_alias, get_pwm_chipid
 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
-import gpiod
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_chip import Chip
 
-# G12A, G12B, and SM1
-# Ref:
-# Linux kernel 4.9.y (hardkernel)
-#     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
-# Linux kernel 5.4.y (mainline)
-#     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
+chip0 = Chip("0")
+chip1 = Chip("1")
 
-chip0 = gpiod.Chip("0")
-chip1 = gpiod.Chip("1")
+chip0lines = chip0.num_lines
+chip1lines = chip1.num_lines
 
-if chip0.num_lines() < 20:
+if chip0lines < 20:
     aobus = 0
     periphs = 1
-    periphs_offset = chip1.num_lines() - 85
+    periphs_offset = chip1lines - 85
 else:
     aobus = 1
     periphs = 0
-    periphs_offset = chip0.num_lines() - 85
+    periphs_offset = chip0lines - 85
 
-chip0.close()
-chip1.close()
+del chip0
+del chip1
 
 GPIOAO_0 = GPIO496 = Pin((aobus, 0))
 GPIOAO_1 = GPIO497 = Pin((aobus, 1))
@@ -87,3 +99,93 @@ GPIOX_16 = GPIO492 = Pin((periphs, 81 + periphs_offset))
 GPIOX_17 = GPIO493 = Pin((periphs, 82 + periphs_offset))
 GPIOX_18 = GPIO494 = Pin((periphs, 83 + periphs_offset))
 GPIOX_19 = GPIO495 = Pin((periphs, 84 + periphs_offset))
+
+SPI0_SCLK = GPIOX_11
+SPI0_MISO = GPIOX_9
+SPI0_MOSI = GPIOX_8
+SPI0_CS0 = GPIOX_10
+
+UART1_TX = GPIOX_12
+UART1_RX = GPIOX_13
+
+# ordered as i2cId, sclId, sdaId
+i2cPorts = []
+
+# ordered as spiId, sckId, mosiId, misoId
+spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO),)
+
+# SysFs pwm outputs, pwm channel and pin in first tuple
+pwmOuts = []
+
+# ordered as uartId, txId, rxId
+uartPorts = [
+    (1, UART1_TX, UART1_RX),
+]
+
+# SysFS analog inputs, Ordered as analog analogInId, device, and channel
+analogIns = []
+
+board = detector.board.id
+if board in ("ODROID_C4", "ODROID_N2"):
+    alias = get_dts_alias("ffd1d000.i2c")
+    if alias is not None:
+        globals()[alias + "_SCL"] = GPIOX_18
+        globals()[alias + "_SDA"] = GPIOX_17
+        i2cPorts.append((int(alias[-1]), GPIOX_18, GPIOX_17))
+    alias = get_dts_alias("ffd1c000.i2c")
+    if alias is not None:
+        globals()[alias + "_SCL"] = GPIOA_15
+        globals()[alias + "_SDA"] = GPIOA_14
+        i2cPorts.append((int(alias[-1]), GPIOA_15, GPIOA_14))
+    alias = get_dts_alias("ffd24000.serial")
+    if alias is not None:
+        globals()[alias + "_TX"] = GPIOX_12
+        globals()[alias + "_RX"] = GPIOX_13
+        uartPorts.append((int(alias[-1]), GPIOX_12, GPIOX_13))
+    alias = get_dts_alias("ffd23000.serial")
+    if alias is not None:
+        globals()[alias + "_TX"] = GPIOX_6
+        globals()[alias + "_RX"] = GPIOX_7
+        uartPorts.append((int(alias[-1]), GPIOX_6, GPIOX_7))
+
+if board in ("ODROID_C4"):
+    alias = get_pwm_chipid("ffd1b000.pwm")
+    if alias is not None:
+        globals()["PWMA"] = GPIOX_6
+        globals()["PWMB"] = GPIOX_19
+        pwmOuts.append(((int(alias[-1]), 0), GPIOX_6))
+        pwmOuts.append(((int(alias[-1]), 1), GPIOX_19))
+    alias = get_pwm_chipid("ffd1a000.pwm")
+    if alias is not None:
+        globals()["PWMC"] = GPIOX_5
+        globals()["PWMD"] = GPIOX_3
+        pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
+        pwmOuts.append(((int(alias[-1]), 1), GPIOX_3))
+    alias = get_pwm_chipid("ffd19000.pwm")
+    if alias is not None:
+        globals()["PWME"] = GPIOX_16
+        globals()["PWMF"] = GPIOX_7
+        pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
+        pwmOuts.append(((int(alias[-1]), 1), GPIOX_7))
+    analogIns.append((37, 0, 2))
+    analogIns.append((40, 0, 0))
+if board in ("ODROID_N2"):
+    alias = get_pwm_chipid("ffd1a000.pwm")
+    if alias is not None:
+        globals()["PWMC"] = GPIOX_5
+        globals()["PWMD"] = GPIOX_6
+        pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
+        pwmOuts.append(((int(alias[-1]), 1), GPIOX_6))
+    alias = get_pwm_chipid("ffd19000.pwm")
+    if alias is not None:
+        globals()["PWME"] = GPIOX_16
+        globals()["PWMF"] = GPIOX_7
+        pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
+        pwmOuts.append(((int(alias[-1]), 1), GPIOX_7))
+    analogIns.append((37, 0, 3))
+    analogIns.append((40, 0, 2))
+
+analogIns = tuple(analogIns)
+i2cPorts = tuple(i2cPorts)
+pwmOuts = tuple(pwmOuts)
+uartPorts = tuple(uartPorts)