]> Repositories - Adafruit_Blinka-hackapet.git/commitdiff
Merge branch 'main' into main
authorMelissa LeBlanc-Williams <melissa@adafruit.com>
Mon, 26 Feb 2024 18:06:47 +0000 (10:06 -0800)
committerGitHub <noreply@github.com>
Mon, 26 Feb 2024 18:06:47 +0000 (10:06 -0800)
21 files changed:
src/adafruit_blinka/board/hardkernel/odroidc4.py
src/adafruit_blinka/board/hardkernel/odroidm1.py
src/adafruit_blinka/board/hardkernel/odroidm1s.py
src/adafruit_blinka/board/hardkernel/odroidn2.py
src/adafruit_blinka/board/licheepi_4a.py [new file with mode: 0644]
src/adafruit_blinka/board/repkapi/__init__.py [new file with mode: 0644]
src/adafruit_blinka/board/repkapi/repka_pi_3.py [new file with mode: 0644]
src/adafruit_blinka/board/repkapi/repka_pi_4.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py
src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_1_x.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_2_x.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_linux/libgpiod_chip.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/generic_linux/libgpiod_pin.py
src/adafruit_blinka/microcontroller/thead/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/thead/th1520/__init__.py [new file with mode: 0644]
src/adafruit_blinka/microcontroller/thead/th1520/pin.py [new file with mode: 0644]
src/board.py
src/digitalio.py
src/microcontroller/__init__.py
src/microcontroller/pin.py
src/pwmio.py

index 34e1acece1e7058b6fd9e9447ff092871c765935..fd7af822c993ccc5ed2860dfab4c889b3e14e8d7 100644 (file)
@@ -16,7 +16,9 @@ if pin.i2cPorts:
 SCLK = pin.SPI0_SCLK
 MOSI = pin.SPI0_MOSI
 MISO = pin.SPI0_MISO
-SPI_CS0 = pin.SPI0_CS0
+CS0 = pin.SPI0_CS0
+CS1 = pin.GPIOH_6
+SPI_CS0 = CS0  # aliased for backward compatibility
 
 """J2: physical pin number"""
 
@@ -57,3 +59,10 @@ D47 = pin.GPIOAO_4
 """ ADC """
 A0 = 40
 A1 = 37
+
+""" PWM """
+PWM = D15
+
+""" UART """
+UART0_TX = D8
+UART0_RX = D10
index 7093fc4113b5f96c1059c08da94e5cd6e351f4b8..23ec888531ba35d4c0d6d7714ec7cff46b2656cc 100644 (file)
@@ -31,18 +31,20 @@ D31 = pin.GPIO4B_6
 D33 = pin.GPIO0B_5
 D35 = pin.GPIO3D_5
 
-SDA = D27
-SCL = D28
+SDA = D3
+SCL = D5
 
 SCLK = D23
 MOSI = D19
 MISO = D21
-CS = D24
+CS0 = D24
+CS1 = D26
+CS = CS0  # aliased for backward compatibility
 
-UART0_TX = D13
-UART0_RX = D11
-UART1_TX = D8
-UART1_RX = D10
+UART0_TX = D8
+UART0_RX = D10
+UART1_TX = D13
+UART1_RX = D11
 
 UART1_CTS = D29
 UART1_RTS = D31
@@ -55,3 +57,6 @@ I2C1_SCL = D28
 """ ADC """
 A0 = 40
 A1 = 37
+
+""" PWM """
+PWM = D15
index 4b5d6007b3cd23a312284d4bfbcfacd4ed1cff1d..3ed43a50c06e63be775c615e2577e4f49c680fe6 100644 (file)
@@ -37,18 +37,20 @@ EXT_D12 = pin.GPIO3_C5
 EXT_D13 = pin.GPIO3_B3
 EXT_D14 = pin.GPIO3_B4
 
-SDA = D27
-SCL = D28
+SDA = D3
+SCL = D5
 
 SCLK = D23
 MOSI = D19
 MISO = D21
-CS = D24
+CS0 = D24
+CS1 = D26
+CS = CS0  # aliased for backward compatibility
 
-UART0_TX = D13
-UART0_RX = D11
-UART1_TX = D8
-UART1_RX = D10
+UART0_TX = D8
+UART0_RX = D10
+UART1_TX = D13
+UART1_RX = D11
 
 UART1_CTS = D29
 UART1_RTS = D31
@@ -61,3 +63,6 @@ I2C1_SCL = D28
 """ ADC """
 A0 = 40
 A1 = 37
+
+""" PWM """
+PWM = D15
index 782fbd263a2fcfc0bbed4f65b5b1bfbaa9563003..c88f1ded0d6079837590dc643725e95de769d903 100644 (file)
@@ -58,47 +58,50 @@ for it in pin.i2cPorts:
     globals()["SCL" + str(it[0])] = it[1]
     globals()["SDA" + str(it[0])] = it[2]
 
-SCL = None
-SDA = None
-# Set second i2c bus as default for backward compatibility.
-if len(pin.i2cPorts) > 1:
-    SCL = pin.i2cPorts[1][1]
-    SDA = pin.i2cPorts[1][2]
-elif len(pin.i2cPorts) > 0:
+if pin.i2cPorts:
     SCL = pin.i2cPorts[0][1]
     SDA = pin.i2cPorts[0][2]
 
 SCLK = pin.SPI0_SCLK
 MOSI = pin.SPI0_MOSI
 MISO = pin.SPI0_MISO
-SPI_CS0 = pin.GPIO486
+CS0 = pin.GPIO486
+CS1 = pin.GPIO464
+SPI_CS0 = CS0  # aliased for backward compatibility
 
-D0 = GPIOX_3  # PIN_11
-D1 = GPIOX_16  # PIN_12
-D2 = GPIOX_4  # PIN_13
-D3 = GPIOX_7  # PIN_15
-D4 = GPIOX_0  # PIN_16
-D5 = GPIOX_1  # PIN_18
-D6 = GPIOX_2  # PIN_22
-D7 = GPIOA_13  # PIN_7
-D8 = GPIOX_17  # PIN_3
-D9 = GPIOX_18  # PIN_5
-D10 = GPIOX_10  # PIN_24
-D11 = GPIOA_4  # PIN_26
-D12 = GPIOX_8  # PIN_19
-D13 = GPIOX_9  # PIN_21
-D14 = GPIOX_11  # PIN_23
-D15 = GPIOX_12  # PIN_8
-D16 = GPIOX_13  # PIN_10
-D21 = GPIOX_14  # PIN_29
-D22 = GPIOX_15  # PIN_31
-D23 = GPIOX_5  # PIN_33
-D24 = GPIOX_6  # PIN_35
-D26 = GPIOA_12  # PIN_32
-D27 = GPIOX_19  # PIN_36
-D30 = GPIOA_14  # PIN_27
-D31 = GPIOA_15  # PIN_28
+D3 = GPIOX_17
+D5 = GPIOX_18
+D7 = GPIOA_13
+D8 = GPIOX_12
+D10 = GPIOX_13
+D11 = GPIOX_3
+D12 = GPIOX_16
+D13 = GPIOX_4
+D15 = GPIOX_7
+D16 = GPIOX_0
+D18 = GPIOX_1
+D19 = GPIOX_8
+D21 = GPIOX_9
+D22 = GPIOX_2
+D23 = GPIOX_11
+D24 = GPIOX_10
+D26 = GPIOA_4
+D27 = GPIOA_14
+D28 = GPIOA_15
+D29 = GPIOX_14
+D31 = GPIOX_15
+D32 = GPIOA_12
+D33 = GPIOX_5
+D35 = GPIOX_6
+D36 = GPIOX_19
 
 """ ADC """
 A0 = 40
 A1 = 37
+
+""" PWM """
+PWM = D15
+
+""" UART """
+UART0_TX = D8
+UART0_RX = D10
diff --git a/src/adafruit_blinka/board/licheepi_4a.py b/src/adafruit_blinka/board/licheepi_4a.py
new file mode 100644 (file)
index 0000000..cfda165
--- /dev/null
@@ -0,0 +1,39 @@
+# SPDX-FileCopyrightText: 2024 Chris Brown
+#
+# SPDX-License-Identifier: MIT
+"""Pin definitions for the Lichee Pi 4A."""
+
+from adafruit_blinka.microcontroller.thead.th1520 import pin
+
+IO1_6 = pin.GPIO1_6
+IO1_5 = pin.GPIO1_5
+IO1_4 = pin.GPIO1_4
+IO1_3 = pin.GPIO1_3
+I2C2_SCL = pin.TWI2_SCL
+U2_TX = pin.UART2_TX
+I2C2_SDA = pin.TWI2_SDA
+U2_RX = pin.UART2_RX
+U3_TX = pin.UART3_TX
+U3_RX = pin.UART3_RX
+U1_TX = pin.UART1_TX
+U1_RX = pin.UART1_RX
+U0_TX = pin.UART0_TX
+U0_RX = pin.UART0_RX
+QSPI1_SO = pin.SPI1_MISO
+QSPI1_CS = pin.SPI1_CS
+QSPI1_SI = pin.SPI1_MOSI
+QSPI1_CLK = pin.SPI1_SCLK
+
+# Default UART
+TX = U0_TX
+RX = U0_RX
+
+# Default I2C
+SCL = I2C2_SCL
+SDA = I2C2_SDA
+
+# Default SPI
+SCLK = QSPI1_CLK
+MOSI = QSPI1_SI
+MISO = QSPI1_SO
+CS = QSPI1_CS
diff --git a/src/adafruit_blinka/board/repkapi/__init__.py b/src/adafruit_blinka/board/repkapi/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/adafruit_blinka/board/repkapi/repka_pi_3.py b/src/adafruit_blinka/board/repkapi/repka_pi_3.py
new file mode 100644 (file)
index 0000000..b8ff820
--- /dev/null
@@ -0,0 +1,79 @@
+# SPDX-FileCopyrightText: 2024 Suren Khorenyan
+#
+# SPDX-License-Identifier: MIT
+"""Repka Pi 3 (Allwinner H5) pin names"""
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+
+PA0 = Pin((1, 0))
+UART2_TX = PA0
+PA1 = Pin((1, 1))
+UART2_RX = PA1
+PA2 = Pin((1, 2))
+PA3 = Pin((1, 3))
+SPI0_CS1 = PA3
+PA4 = Pin((1, 4))
+UART0_TX = PA4
+PA5 = Pin((1, 5))
+UART0_RX = PA5
+PA6 = Pin((1, 6))
+PA7 = Pin((1, 7))
+PA8 = Pin((1, 8))
+PA9 = Pin((1, 9))
+PA10 = Pin((1, 10))
+PA11 = Pin((1, 11))
+TWI1_SCL = PA11
+PA12 = Pin((1, 12))
+TWI1_SDA = PA12
+PA13 = Pin((1, 13))
+SPI1_CS0 = PA13
+PA14 = Pin((1, 14))
+SPI1_CLK = PA14
+PA15 = Pin((1, 15))
+SPI1_MOSI = PA15
+PA16 = Pin((1, 16))
+SPI1_MISO = PA16
+PA18 = Pin((1, 18))
+TWI2_SCL = PA18
+PA19 = Pin((1, 19))
+TWI2_SDA = PA19
+PA21 = Pin((1, 21))
+
+PC0 = Pin((1, 64))
+SPI0_MOSI = PC0
+PC1 = Pin((1, 65))
+SPI0_MISO = PC1
+PC2 = Pin((1, 66))
+SPI0_CLK = PC2
+PC3 = Pin((1, 67))
+SPI0_CS0 = PC3
+
+
+PL2 = Pin((1, 354))
+S_UART_TX = PL2
+PL3 = Pin((1, 355))
+S_UART_RX = PL3
+PL11 = Pin((1, 363))
+
+
+i2cPorts = (
+    (1, TWI1_SCL, TWI1_SDA),
+    # todo: check pinout in `/proc/device-tree/repka-pinout`?
+    (2, TWI2_SCL, TWI2_SDA),
+)
+# ordered as spiId, sckId, mosiId, misoId
+spiPorts = (
+    (0, SPI0_CLK, SPI0_MOSI, SPI0_MISO),
+    (1, SPI1_CLK, SPI1_MOSI, SPI1_MISO),
+)
+# ordered as uartId, txId, rxId
+uartPorts = (
+    # todo: check uart ids
+    (0, UART0_TX, UART0_RX),
+    (2, UART2_TX, UART2_RX),
+    (1, S_UART_TX, S_UART_RX),
+)
+
+
+# default I2C
+SCL = i2cPorts[0][1]
+SDA = i2cPorts[0][2]
diff --git a/src/adafruit_blinka/board/repkapi/repka_pi_4.py b/src/adafruit_blinka/board/repkapi/repka_pi_4.py
new file mode 100644 (file)
index 0000000..4d776bd
--- /dev/null
@@ -0,0 +1,56 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+# copied from Allwinner H6 to be updated later
+
+"""Repka Pi 4 (Allwinner H6) Pin Names"""
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+
+# TODO: check and update all pins after board release
+PC16 = Pin((1, 79))
+
+PD14 = Pin((1, 110))
+PD15 = Pin((1, 111))
+PD16 = Pin((1, 112))
+PD17 = Pin((1, 113))
+PD18 = Pin((1, 114))
+PD19 = Pin((1, 115))
+UART2_TX = PD19
+PD20 = Pin((1, 116))
+UART2_RX = PD20
+PD21 = Pin((1, 117))
+PD22 = Pin((1, 118))
+PD23 = Pin((1, 119))
+PD24 = Pin((1, 120))
+PD25 = Pin((1, 121))
+TWI0_SCL = PD25
+PD26 = Pin((1, 122))
+TWI0_SDA = PD26
+
+PG10 = Pin((1, 202))
+PG11 = Pin((1, 203))
+PG12 = Pin((1, 204))
+PG13 = Pin((1, 205))
+PG14 = Pin((1, 206))
+
+PH2 = Pin((1, 226))
+PH3 = Pin((1, 227))
+SPI1_CS = PH3
+PH4 = Pin((1, 228))
+SPI1_SCLK = PH4
+PH5 = Pin((1, 229))
+SPI1_MOSI = PH5
+PH6 = Pin((1, 230))
+SPI1_MISO = PH6
+PH8 = Pin((1, 230))
+PH9 = Pin((1, 231))
+
+PL2 = Pin((0, 2))
+PL3 = Pin((0, 3))
+PL8 = Pin((0, 8))
+PL9 = Pin((0, 9))
+PL10 = Pin((0, 10))
+
+i2cPorts = ((0, TWI0_SCL, TWI0_SDA),)
+spiPorts = ((1, SPI1_SCLK, SPI1_MOSI, SPI1_MISO),)
+uartPorts = ((2, UART2_TX, UART2_RX),)
index f44f92a04a408f5084cf890f7befd86f229f5f39..ea01a8eb7c88e7990fc2518b10cad63fb16107d6 100644 (file)
@@ -13,32 +13,15 @@ Linux kernel 5.4.y (mainline)
 """
 
 from adafruit_blinka.agnostic import detector
-from adafruit_blinka.microcontroller.alias import get_dts_alias
+from adafruit_blinka.microcontroller.alias import get_dts_alias, get_pwm_chipid
 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_chip import Chip
 
-try:
-    import gpiod
-except ImportError:
-    raise ImportError(
-        "libgpiod Python bindings not found, please install and try again!"
-    ) from ImportError
+chip0 = Chip("0")
+chip1 = Chip("1")
 
-if hasattr(gpiod, "Chip"):
-    chip0 = gpiod.Chip("0")
-    chip1 = gpiod.Chip("1")
-else:
-    chip0 = gpiod.chip("0")
-    chip1 = gpiod.chip("1")
-
-if callable(chip0.num_lines):
-    chip0lines = chip0.num_lines()
-else:
-    chip0lines = chip0.num_lines
-
-if callable(chip1.num_lines):
-    chip1lines = chip1.num_lines()
-else:
-    chip1lines = chip1.num_lines
+chip0lines = chip0.num_lines
+chip1lines = chip1.num_lines
 
 if chip0lines < 20:
     aobus = 0
@@ -131,6 +114,9 @@ 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),
@@ -151,24 +137,55 @@ if board in ("ODROID_C4", "ODROID_N2"):
         globals()[alias + "_SCL"] = GPIOA_15
         globals()[alias + "_SDA"] = GPIOA_14
         i2cPorts.append((int(alias[-1]), GPIOA_15, GPIOA_14))
-    alias = get_dts_alias("fdd24000.serial")
+    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("fdd23000.serial")
+    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)
diff --git a/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_1_x.py b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_1_x.py
new file mode 100644 (file)
index 0000000..532fb44
--- /dev/null
@@ -0,0 +1,33 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""A Chip class for use with libgpiod 1.x."""
+import gpiod
+
+
+# pylint: disable=too-many-branches,too-many-statements
+class Chip:
+    """Abstraction for handling all breaking changes over the lifecycle of gpiod"""
+
+    _CONSUMER = "adafruit_blinka"
+
+    id: str = None
+    num_lines: int
+
+    def __init__(self, chip_id: str):
+        self.id = chip_id
+        if hasattr(gpiod, "Chip"):
+            self._chip = gpiod.Chip(self.id)
+        else:
+            self._chip = gpiod.chip(self.id)
+
+        if callable(self._chip.num_lines):
+            self.num_lines = self._chip.num_lines()
+        else:
+            self.num_lines = self.num_lines
+
+    def __repr__(self):
+        return self.id
+
+    def __eq__(self, other):
+        return self.id == other
diff --git a/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_2_x.py b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_2_x.py
new file mode 100644 (file)
index 0000000..8fd75e4
--- /dev/null
@@ -0,0 +1,29 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""A Chip class for use with libgpiod 2.x."""
+import gpiod
+
+
+# pylint: disable=too-many-branches,too-many-statements
+class Chip:
+    """Abstraction for handling all breaking changes over the lifecycle of gpiod"""
+
+    _CONSUMER = "adafruit_blinka"
+
+    id: str = None
+    num_lines: int
+
+    def __init__(self, chip_id: str):
+        self.id = chip_id
+        path = f"/dev/gpiochip{self.id}"
+        self._chip = gpiod.Chip(path)
+
+        info = self._chip.get_info()
+        self.num_lines = info.num_lines
+
+    def __repr__(self):
+        return self.id
+
+    def __eq__(self, other):
+        return self.id == other
diff --git a/src/adafruit_blinka/microcontroller/generic_linux/libgpiod_chip.py b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod_chip.py
new file mode 100644 (file)
index 0000000..66d2376
--- /dev/null
@@ -0,0 +1,22 @@
+# SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
+#
+# SPDX-License-Identifier: MIT
+"""A Chip class for use with libgpiod."""
+try:
+    import gpiod
+except ImportError:
+    raise ImportError(
+        "libgpiod Python bindings not found, please install and try again! See "
+        "https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/main/libgpiod.py"
+    ) from ImportError
+
+# Versions 1.5.4 and earlier have no __version__ attribute
+if hasattr(gpiod, "__version__"):
+    version = gpiod.__version__
+else:
+    version = "1.x"
+
+if version.startswith("1."):
+    from .libgpiod.libgpiod_chip_1_x import Chip  # pylint: disable=unused-import
+else:
+    from .libgpiod.libgpiod_chip_2_x import Chip  # pylint: disable=unused-import
index d49552484a06c6cae1e3124f61237226ca7c8674..831bc1a47ad3e6bd0149039a98d0bb818bae7633 100644 (file)
@@ -7,7 +7,7 @@ try:
 except ImportError:
     raise ImportError(
         "libgpiod Python bindings not found, please install and try again! See "
-        "https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/master/libgpiod.sh"
+        "https://github.com/adafruit/Raspberry-Pi-Installer-Scripts/blob/main/libgpiod.py"
     ) from ImportError
 
 # Versions 1.5.4 and earlier have no __version__ attribute
diff --git a/src/adafruit_blinka/microcontroller/thead/__init__.py b/src/adafruit_blinka/microcontroller/thead/__init__.py
new file mode 100644 (file)
index 0000000..e69de29
diff --git a/src/adafruit_blinka/microcontroller/thead/th1520/__init__.py b/src/adafruit_blinka/microcontroller/thead/th1520/__init__.py
new file mode 100644 (file)
index 0000000..2be333d
--- /dev/null
@@ -0,0 +1,4 @@
+# SPDX-FileCopyrightText: 2024 Chris Brown
+#
+# SPDX-License-Identifier: MIT
+"""Definition for the T-Head TH1520 chip"""
diff --git a/src/adafruit_blinka/microcontroller/thead/th1520/pin.py b/src/adafruit_blinka/microcontroller/thead/th1520/pin.py
new file mode 100644 (file)
index 0000000..362fa4a
--- /dev/null
@@ -0,0 +1,150 @@
+# SPDX-FileCopyrightText: 2024 Chris Brown
+#
+# SPDX-License-Identifier: MIT
+"""T-Head TH1520 pin names"""
+from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
+
+GPIO0_0 = Pin((0, 0))
+SPI1_SCLK = GPIO0_0
+GPIO0_1 = Pin((0, 1))
+SPI1_CS = GPIO0_1
+GPIO0_2 = Pin((0, 2))
+SPI1_MOSI = GPIO0_2
+GPIO0_3 = Pin((0, 3))
+SPI1_MISO = GPIO0_3
+GPIO0_4 = Pin((0, 4))
+GPIO0_5 = Pin((0, 5))
+GPIO0_6 = Pin((0, 6))
+GPIO0_7 = Pin((0, 7))
+GPIO0_8 = Pin((0, 8))
+GPIO0_9 = Pin((0, 9))
+GPIO0_10 = Pin((0, 10))
+UART1_TX = GPIO0_10
+GPIO0_11 = Pin((0, 11))
+UART1_RX = GPIO0_11
+GPIO0_12 = Pin((0, 12))
+GPIO0_13 = Pin((0, 13))
+GPIO0_14 = Pin((0, 14))
+GPIO0_15 = Pin((0, 15))
+GPIO0_16 = Pin((0, 16))
+UART3_TX = GPIO0_16
+GPIO0_17 = Pin((0, 17))
+UART3_RX = GPIO0_17
+GPIO0_18 = Pin((0, 18))
+GPIO0_19 = Pin((0, 19))
+GPIO0_20 = Pin((0, 20))
+GPIO0_21 = Pin((0, 21))
+GPIO0_22 = Pin((0, 22))
+GPIO0_23 = Pin((0, 23))
+GPIO0_24 = Pin((0, 24))
+GPIO0_25 = Pin((0, 25))
+GPIO0_26 = Pin((0, 26))
+GPIO0_27 = Pin((0, 27))
+GPIO0_28 = Pin((0, 28))
+GPIO0_29 = Pin((0, 29))
+GPIO0_30 = Pin((0, 30))
+GPIO0_31 = Pin((0, 31))
+GPIO1_0 = Pin((1, 0))
+GPIO1_1 = Pin((1, 1))
+GPIO1_2 = Pin((1, 2))
+GPIO1_3 = Pin((1, 3))
+GPIO1_4 = Pin((1, 4))
+GPIO1_5 = Pin((1, 5))
+GPIO1_6 = Pin((1, 6))
+GPIO1_7 = Pin((1, 7))
+GPIO1_8 = Pin((1, 8))
+GPIO1_9 = Pin((1, 9))
+GPIO1_10 = Pin((1, 10))
+GPIO1_11 = Pin((1, 11))
+GPIO1_12 = Pin((1, 12))
+GPIO1_13 = Pin((1, 13))
+GPIO1_14 = Pin((1, 14))
+GPIO1_15 = Pin((1, 15))
+GPIO1_16 = Pin((1, 16))
+GPIO1_17 = Pin((1, 17))
+GPIO1_18 = Pin((1, 18))
+GPIO1_19 = Pin((1, 19))
+GPIO1_20 = Pin((1, 20))
+GPIO1_21 = Pin((1, 21))
+GPIO1_22 = Pin((1, 22))
+GPIO1_23 = Pin((1, 23))
+GPIO1_24 = Pin((1, 24))
+GPIO1_25 = Pin((1, 25))
+GPIO1_26 = Pin((1, 26))
+GPIO1_27 = Pin((1, 27))
+GPIO1_28 = Pin((1, 28))
+GPIO1_29 = Pin((1, 29))
+GPIO1_30 = Pin((1, 30))
+GPIO1_31 = Pin((1, 31))
+GPIO2_0 = Pin((2, 0))
+UART0_TX = GPIO2_0
+GPIO2_1 = Pin((2, 1))
+UART0_RX = GPIO2_1
+GPIO2_2 = Pin((2, 2))
+GPIO2_3 = Pin((2, 3))
+GPIO2_4 = Pin((2, 4))
+GPIO2_5 = Pin((2, 5))
+GPIO2_6 = Pin((2, 6))
+GPIO2_7 = Pin((2, 7))
+GPIO2_8 = Pin((2, 8))
+GPIO2_9 = Pin((2, 9))
+TWI2_SCL = GPIO2_9
+UART2_TX = GPIO2_9
+GPIO2_10 = Pin((2, 10))
+TWI2_SDA = GPIO2_10
+UART2_RX = GPIO2_10
+GPIO2_11 = Pin((2, 11))
+GPIO2_12 = Pin((2, 12))
+GPIO2_13 = Pin((2, 13))
+GPIO2_14 = Pin((2, 14))
+GPIO2_15 = Pin((2, 15))
+GPIO2_16 = Pin((2, 16))
+GPIO2_17 = Pin((2, 17))
+GPIO2_18 = Pin((2, 18))
+GPIO2_19 = Pin((2, 19))
+GPIO2_20 = Pin((2, 20))
+GPIO2_21 = Pin((2, 21))
+GPIO2_22 = Pin((2, 22))
+GPIO2_23 = Pin((2, 23))
+GPIO2_24 = Pin((2, 24))
+GPIO2_25 = Pin((2, 25))
+GPIO2_26 = Pin((2, 26))
+GPIO2_27 = Pin((2, 27))
+GPIO2_28 = Pin((2, 28))
+GPIO2_29 = Pin((2, 29))
+GPIO2_30 = Pin((2, 30))
+GPIO2_31 = Pin((2, 31))
+GPIO3_0 = Pin((3, 0))
+GPIO3_1 = Pin((3, 1))
+GPIO3_2 = Pin((3, 2))
+GPIO3_3 = Pin((3, 3))
+GPIO3_4 = Pin((3, 4))
+GPIO3_5 = Pin((3, 5))
+GPIO3_6 = Pin((3, 6))
+GPIO3_7 = Pin((3, 7))
+GPIO3_8 = Pin((3, 8))
+GPIO3_9 = Pin((3, 9))
+GPIO3_10 = Pin((3, 10))
+GPIO3_11 = Pin((3, 11))
+GPIO3_12 = Pin((3, 12))
+GPIO3_13 = Pin((3, 13))
+GPIO3_14 = Pin((3, 14))
+GPIO3_15 = Pin((3, 15))
+GPIO3_16 = Pin((3, 16))
+GPIO3_17 = Pin((3, 17))
+GPIO3_18 = Pin((3, 18))
+GPIO3_19 = Pin((3, 19))
+GPIO3_20 = Pin((3, 20))
+GPIO3_21 = Pin((3, 21))
+GPIO3_22 = Pin((3, 22))
+
+uartPorts = (
+    (0, UART0_TX, UART0_RX),
+    (1, UART1_TX, UART1_RX),
+    (2, UART2_TX, UART2_RX),
+    (3, UART3_TX, UART3_RX),
+)
+
+i2cPorts = ((2, TWI2_SCL, TWI2_SDA),)
+
+spiPorts = ((2, SPI1_SCLK, SPI1_MOSI, SPI1_MISO),)
index baa15e651d7700532c05fdf14957106b169c344c..ca7c683fa35254b0e3db10d1efa6bfe933e26bc2 100644 (file)
@@ -364,9 +364,18 @@ elif board_id == ap_board.AML_S905X_CC:
 elif board_id == ap_board.ROC_RK3328_CC:
     from adafruit_blinka.board.librecomputer.roc_rk3328_cc import *
 
+elif board_id == ap_board.REPKA_PI_3_H5:
+    from adafruit_blinka.board.repkapi.repka_pi_3 import *
+
+elif board_id == ap_board.REPKA_PI_4_H6:
+    from adafruit_blinka.board.repkapi.repka_pi_4 import *
+
 elif board_id == ap_board.GENERIC_LINUX_PC:
     from adafruit_blinka.board.generic_linux_pc import *
 
+elif board_id == ap_board.LICHEEPI_4A:
+    from adafruit_blinka.board.licheepi_4a import *
+
 elif board_id == ap_board.MILKV_DUO:
     from adafruit_blinka.board.milkv_duo import *
 
index 0778614e3609a794ae935f256c73df831b9809d4..640a8cfcb8fc0730a2d8e8f3dd16eb9daf136a4f 100644 (file)
@@ -115,6 +115,8 @@ elif detector.chip.H616:
     from adafruit_blinka.microcontroller.allwinner.h616.pin import Pin
 elif detector.chip.D1_RISCV:
     from adafruit_blinka.microcontroller.allwinner.D1.pin import Pin
+elif detector.chip.TH1520:
+    from adafruit_blinka.microcontroller.thead.th1520.pin import Pin
 # Special Case Boards
 elif detector.board.ftdi_ft232h:
     from adafruit_blinka.microcontroller.ftdi_mpsse.ft232h.pin import Pin
index 7ef7bab7722bee933550faf99e71a6ac3dd33e5d..2c51e3b06c205a5894ab0bf84d287b6de62961af 100644 (file)
@@ -146,6 +146,8 @@ elif chip_id == ap_chip.D1_RISCV:
     from adafruit_blinka.microcontroller.allwinner.D1 import *
 elif chip_id == ap_chip.CV1800B:
     from adafruit_blinka.microcontroller.cv1800b import *
+elif chip_id == ap_chip.TH1520:
+    from adafruit_blinka.microcontroller.thead.th1520 import *
 elif chip_id == ap_chip.GENERIC_X86:
     print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.")
 elif chip_id is None:
index 3e4e7313c224a7e2c5bb7e52bafe2ce3ea1ad194..c499364f77d669a3a03a2fa0cc3091abd1489f67 100644 (file)
@@ -4,7 +4,7 @@
 """Pins named after their chip name."""
 
 import sys
-from adafruit_platformdetect.constants import chips as ap_chip
+from adafruit_platformdetect.constants import chips as ap_chip, boards as ap_boards
 from adafruit_blinka.agnostic import board_id, chip_id
 
 # We intentionally are patching into this namespace so skip the wildcard check.
@@ -45,11 +45,17 @@ elif chip_id == ap_chip.SUN8I:
 elif chip_id == ap_chip.H3:
     from adafruit_blinka.microcontroller.allwinner.h3.pin import *
 elif chip_id == ap_chip.H5:
-    from adafruit_blinka.microcontroller.allwinner.h5.pin import *
+    if board_id == ap_boards.REPKA_PI_3_H5:
+        from adafruit_blinka.board.repkapi.repka_pi_3 import *
+    else:
+        from adafruit_blinka.microcontroller.allwinner.h5.pin import *
 elif chip_id == ap_chip.H6:
     from adafruit_blinka.microcontroller.allwinner.h6.pin import *
 elif chip_id == ap_chip.H616:
-    from adafruit_blinka.microcontroller.allwinner.h616.pin import *
+    if board_id == ap_boards.REPKA_PI_4_H6:
+        from adafruit_blinka.board.repkapi.repka_pi_4 import *
+    else:
+        from adafruit_blinka.microcontroller.allwinner.h616.pin import *
 elif chip_id == ap_chip.SAMA5:
     from adafruit_blinka.microcontroller.sama5.pin import *
 elif chip_id == ap_chip.T210:
@@ -113,7 +119,7 @@ elif chip_id == ap_chip.RK3328:
 elif chip_id == ap_chip.RK3566:
     from adafruit_blinka.microcontroller.rockchip.rk3566.pin import *
 elif chip_id == ap_chip.RK3568:
-    if board_id in ("ODROID_M1"):
+    if board_id in (ap_boards.ODROID_M1,):
         from adafruit_blinka.microcontroller.rockchip.rk3568b2.pin import *
     else:
         from adafruit_blinka.microcontroller.rockchip.rk3568.pin import *
@@ -135,6 +141,8 @@ elif chip_id == ap_chip.D1_RISCV:
     from adafruit_blinka.microcontroller.allwinner.D1.pin import *
 elif chip_id == ap_chip.CV1800B:
     from adafruit_blinka.microcontroller.cv1800b.pin import *
+elif chip_id == ap_chip.TH1520:
+    from adafruit_blinka.microcontroller.thead.th1520.pin import *
 elif "sphinx" in sys.modules:
     # pylint: disable=unused-import
     from adafruit_blinka.microcontroller.generic_micropython import Pin
index 397120bb5fb6fcf36ac301506dc3eeb12259d972..e98d2f8bbd0b178604127c46aa4d488bfcb4e146 100644 (file)
@@ -16,7 +16,7 @@ from adafruit_blinka.agnostic import detector
 
 # pylint: disable=unused-import
 
-if detector.board.any_raspberry_pi:
+if detector.board.any_raspberry_pi and not detector.board.RASPBERRY_PI_5:
     from adafruit_blinka.microcontroller.bcm283x.pwmio.PWMOut import PWMOut
 elif detector.board.any_coral_board:
     from adafruit_blinka.microcontroller.generic_linux.sysfs_pwmout import PWMOut