From: Melissa LeBlanc-Williams Date: Thu, 8 Feb 2024 00:05:17 +0000 (-0800) Subject: Merge pull request #785 from makermelissa/main X-Git-Tag: 8.32.0 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/f8b243c644172a1f1453ebd1264120dad74b9c67?hp=0109a48e843101b21b0f7eed6a6339df6938c81d Merge pull request #785 from makermelissa/main Show NotImplementedError for pwmio on the Pi 5 for now --- diff --git a/src/adafruit_blinka/board/licheepi_4a.py b/src/adafruit_blinka/board/licheepi_4a.py new file mode 100644 index 0000000..cfda165 --- /dev/null +++ b/src/adafruit_blinka/board/licheepi_4a.py @@ -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/microcontroller/amlogic/meson_g12_common/pin.py b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py index 3491ce9..ea01a8e 100644 --- a/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py +++ b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py @@ -15,30 +15,13 @@ Linux kernel 5.4.y (mainline) 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 +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 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 index 0000000..532fb44 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_1_x.py @@ -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 index 0000000..8fd75e4 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_chip_2_x.py @@ -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 index 0000000..66d2376 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod_chip.py @@ -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 diff --git a/src/adafruit_blinka/microcontroller/thead/__init__.py b/src/adafruit_blinka/microcontroller/thead/__init__.py new file mode 100644 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 index 0000000..2be333d --- /dev/null +++ b/src/adafruit_blinka/microcontroller/thead/th1520/__init__.py @@ -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 index 0000000..362fa4a --- /dev/null +++ b/src/adafruit_blinka/microcontroller/thead/th1520/pin.py @@ -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),) diff --git a/src/board.py b/src/board.py index 335329c..2c56926 100644 --- a/src/board.py +++ b/src/board.py @@ -373,6 +373,9 @@ elif board_id == ap_board.REPKA_PI_4_H6: 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 "sphinx" in sys.modules: pass diff --git a/src/digitalio.py b/src/digitalio.py index 53f5904..e792630 100644 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -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 diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index 2bc4736..1667986 100644 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -144,6 +144,8 @@ elif chip_id == ap_chip.RP2040_U2IF: from adafruit_blinka.microcontroller.rp2040_u2if import * elif chip_id == ap_chip.D1_RISCV: from adafruit_blinka.microcontroller.allwinner.D1 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: diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index d92747b..f0da319 100644 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -139,6 +139,8 @@ elif chip_id == ap_chip.RP2040_U2IF: from adafruit_blinka.microcontroller.rp2040_u2if.pin import * elif chip_id == ap_chip.D1_RISCV: from adafruit_blinka.microcontroller.allwinner.D1.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