From: Melissa LeBlanc-Williams Date: Sat, 16 Aug 2025 01:16:14 +0000 (-0700) Subject: Merge pull request #1001 from technobly/for-upstream X-Git-Tag: 8.63.0~1 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/bfd903bcb429d4e4e77dc18dcd4cba0802f094f9?hp=f79764b77c36ff3cf1c72032a84b191f2166c8f4 Merge pull request #1001 from technobly/for-upstream Support for Particle Tachyon --- diff --git a/src/adafruit_blinka/board/particle/__init__.py b/src/adafruit_blinka/board/particle/__init__.py new file mode 100644 index 0000000..306b834 --- /dev/null +++ b/src/adafruit_blinka/board/particle/__init__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2025 Brett Walach for Particle +# +# SPDX-License-Identifier: MIT +"""Board definitions from Particle""" diff --git a/src/adafruit_blinka/board/particle/tachyon.py b/src/adafruit_blinka/board/particle/tachyon.py new file mode 100644 index 0000000..c428636 --- /dev/null +++ b/src/adafruit_blinka/board/particle/tachyon.py @@ -0,0 +1,53 @@ +# SPDX-FileCopyrightText: 2025 Brett Walach for Particle +# +# SPDX-License-Identifier: MIT +"""Pin definitions for the Tachyon.""" + +from adafruit_blinka.microcontroller.quectel.qcm6490 import pin + +for it in pin.i2cPorts: + globals()["SCL" + str(it[0])] = it[1] + globals()["SDA" + str(it[0])] = it[2] + +SCL = pin.i2cPorts[0][1] +SDA = pin.i2cPorts[0][2] + +D0 = pin.GPIO_36 +D1 = pin.GPIO_37 +D2 = pin.GPIO_8 +D3 = pin.GPIO_9 +D4 = pin.GPIO_61 +D5 = pin.GPIO_18 +D6 = pin.GPIO_19 +D7 = pin.GPIO_62 +D8 = pin.GPIO_59 +D9 = pin.GPIO_56 +D10 = pin.GPIO_57 +D11 = pin.GPIO_58 +D12 = pin.GPIO_78 +D13 = pin.GPIO_106 +D14 = pin.GPIO_34 +D15 = pin.GPIO_35 +D16 = pin.GPIO_32 +D17 = pin.GPIO_33 +D18 = pin.GPIO_144 +D19 = pin.GPIO_145 +D20 = pin.GPIO_146 +D21 = pin.GPIO_147 +D22 = pin.GPIO_158 +D23 = pin.GPIO_165 +D24 = pin.GPIO_166 +D25 = pin.GPIO_24 +D26 = pin.GPIO_6 +D27 = pin.GPIO_44 + +CS = D8 +MISO = D9 +MOSI = D10 +SCLK = D11 +SCK = SCLK + +UART_TX = D14 +UART_RX = D15 + +PWM1 = D13 diff --git a/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_pin_2_x.py b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_pin_2_x.py index 9f12d9d..aa1ee18 100644 --- a/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_pin_2_x.py +++ b/src/adafruit_blinka/microcontroller/generic_linux/libgpiod/libgpiod_pin_2_x.py @@ -48,14 +48,8 @@ class Pin: """Initialize the Pin""" # Input, if not self._line_request: - self._line_request = self._chip.request_lines( - config={int(self._num): None}, - consumer=self._CONSUMER, - ) - # print("init line: ", self.id, self._line) - - if mode is not None: line_config = gpiod.LineSettings() + if mode == self.IN: line_config.direction = gpiod.line.Direction.INPUT if pull is not None: @@ -68,24 +62,18 @@ class Pin: else: raise RuntimeError(f"Invalid pull for pin: {self.id}") - self._mode = self.IN - self._line_request.reconfigure_lines( - { - int(self._num): line_config, - } - ) elif mode == self.OUT: if pull is not None: raise RuntimeError("Cannot set pull resistor on output") - self._mode = self.OUT line_config.direction = gpiod.line.Direction.OUTPUT - self._line_request.reconfigure_lines( - { - int(self._num): line_config, - } - ) + else: - raise RuntimeError("Invalid mode for pin: %s" % self.id) + raise RuntimeError(f"Invalid mode for pin: {self.id}") + + self._line_request = self._chip.request_lines( + {int(self._num): line_config}, + consumer=self._CONSUMER, + ) def value(self, val=None): """Set or return the Pin Value""" diff --git a/src/adafruit_blinka/microcontroller/quectel/__init__.py b/src/adafruit_blinka/microcontroller/quectel/__init__.py new file mode 100644 index 0000000..0bbe8c1 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/quectel/__init__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2025 Brett Walach for Particle +# +# SPDX-License-Identifier: MIT +"""Definition of all Quectel chips""" diff --git a/src/adafruit_blinka/microcontroller/quectel/qcm6490/__init__.py b/src/adafruit_blinka/microcontroller/quectel/qcm6490/__init__.py new file mode 100644 index 0000000..8fba2cf --- /dev/null +++ b/src/adafruit_blinka/microcontroller/quectel/qcm6490/__init__.py @@ -0,0 +1,4 @@ +# SPDX-FileCopyrightText: 2025 Brett Walach for Particle +# +# SPDX-License-Identifier: MIT +"""Definition for the Quectel QCM6490 chip""" diff --git a/src/adafruit_blinka/microcontroller/quectel/qcm6490/pin.py b/src/adafruit_blinka/microcontroller/quectel/qcm6490/pin.py new file mode 100644 index 0000000..d14d237 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/quectel/qcm6490/pin.py @@ -0,0 +1,140 @@ +# SPDX-FileCopyrightText: 2025 Brett Walach for Particle +# +# SPDX-License-Identifier: MIT +"""Quectel QCM6490 pin names""" + +from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin + +# Use with libgpiod_pin +GPIO_BASE = 0 + +GPIO_6 = Pin(GPIO_BASE + 6) +UART01_TXD = GPIO_6 +PWM1 = GPIO_6 + +GPIO_8 = Pin(GPIO_BASE + 8) +I2C02_SDA = GPIO_8 +SDA = GPIO_8 + +GPIO_9 = Pin(GPIO_BASE + 9) +I2C02_SCL = GPIO_9 +SCL = GPIO_9 + +GPIO_18 = Pin(GPIO_BASE + 18) +UART04_TXD = GPIO_18 +SPI04_CLK = GPIO_18 + +GPIO_19 = Pin(GPIO_BASE + 19) +UART04_RXD = GPIO_19 +SPI04_CS0 = GPIO_19 + +GPIO_24 = Pin(GPIO_BASE + 24) + +GPIO_32 = Pin(GPIO_BASE + 32) +UART10_CTS = GPIO_32 +CTS = GPIO_32 + +GPIO_33 = Pin(GPIO_BASE + 33) +UART10_RTS = GPIO_33 +RTS = GPIO_33 + +GPIO_34 = Pin(GPIO_BASE + 34) +UART10_TXD = GPIO_34 + +GPIO_35 = Pin(GPIO_BASE + 35) +UART10_RXD = GPIO_35 + +GPIO_36 = Pin(GPIO_BASE + 36) +UART11_CTS = GPIO_36 +SPI11_MISO = GPIO_36 +I2C11_SDA = GPIO_36 +EEPROM_SDA = GPIO_36 + +GPIO_37 = Pin(GPIO_BASE + 37) +UART11_RTS = GPIO_37 +SPI11_MOSI = GPIO_37 +I2C11_SCL = GPIO_37 +EEPROM_SCL = GPIO_37 + +GPIO_40 = Pin(GPIO_BASE + 40) +QWIIC_I2C12_SDA = GPIO_40 + +GPIO_41 = Pin(GPIO_BASE + 41) +QWIIC_I2C12_SCL = GPIO_41 + +GPIO_44 = Pin(GPIO_BASE + 44) + +GPIO_56 = Pin(GPIO_BASE + 56) +SPI16_MISO = GPIO_56 +I2C16_SDA = GPIO_56 +UART16_CTS = GPIO_56 +MISO = GPIO_56 + +GPIO_57 = Pin(GPIO_BASE + 57) +SPI16_MOSI = GPIO_57 +I2C16_SCL = GPIO_57 +UART16_RTS = GPIO_57 +MOSI = GPIO_57 + +GPIO_58 = Pin(GPIO_BASE + 58) +SPI16_CLK = GPIO_58 +UART16_TXD = GPIO_58 +SCK = GPIO_58 + +GPIO_59 = Pin(GPIO_BASE + 59) +SPI16_CS0 = GPIO_59 +UART16_RXD = GPIO_59 +CE0 = GPIO_59 + +GPIO_61 = Pin(GPIO_BASE + 61) + +GPIO_62 = Pin(GPIO_BASE + 62) +SPI16_CS1 = GPIO_62 +CE1 = GPIO_62 + +GPIO_78 = Pin(GPIO_BASE + 78) +PWM0 = GPIO_78 + +GPIO_106 = Pin(GPIO_BASE + 106) +MI2S1_SCLK = GPIO_106 +PWM = GPIO_106 +PWM1 = GPIO_106 + +GPIO_144 = Pin(GPIO_BASE + 144) +LPI_MI2S_SCLK = GPIO_144 + +GPIO_145 = Pin(GPIO_BASE + 145) +LPI_MI2S_WS = GPIO_145 +MISO1 = GPIO_145 + +GPIO_146 = Pin(GPIO_BASE + 146) +LPI_MI2S_DATA0 = GPIO_146 +MOSI1 = GPIO_146 + +GPIO_147 = Pin(GPIO_BASE + 147) +LPI_MI2S_DATA1 = GPIO_147 +SCK1 = GPIO_147 + +GPIO_158 = Pin(GPIO_BASE + 158) + +GPIO_165 = Pin(GPIO_BASE + 165) + +GPIO_166 = Pin(GPIO_BASE + 166) + +# ordered as i2cId, i2cSclId, i2cSdaId +i2cPorts = ( + (1, I2C02_SCL, I2C02_SDA), + (2, QWIIC_I2C12_SCL, QWIIC_I2C12_SDA), +) + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ( + (0, SPI16_CLK, SPI16_MOSI, SPI16_MISO), + (1, SPI16_CLK, SPI16_MOSI, SPI16_MISO), +) + +# ordered as uartId, txId, rxId +uartPorts = ((10, UART10_TXD, UART10_RXD),) + +# ordered as pwmChipId, pwmChannelId, pwmId +pwmOuts = (((0, 0), PWM1),) diff --git a/src/board.py b/src/board.py index f926dd0..5d51a69 100644 --- a/src/board.py +++ b/src/board.py @@ -467,6 +467,9 @@ elif board_id == ap_board.INDIEDROID_NOVA: elif board_id == ap_board.RDK_X3: from adafruit_blinka.board.horizon.rdkx3 import * +elif board_id == ap_board.PARTICLE_TACHYON: + from adafruit_blinka.board.particle.tachyon import * + elif "sphinx" in sys.modules: pass diff --git a/src/digitalio.py b/src/digitalio.py index 31c650c..d23fce0 100644 --- a/src/digitalio.py +++ b/src/digitalio.py @@ -151,6 +151,8 @@ elif detector.chip.RV1103: from adafruit_blinka.microcontroller.rockchip.rv1103.pin import Pin elif detector.chip.RV1106: from adafruit_blinka.microcontroller.rockchip.rv1106.pin import Pin +elif detector.chip.QCM6490: + from adafruit_blinka.microcontroller.quectel.qcm6490.pin import Pin elif detector.chip.OS_AGNOSTIC: from adafruit_blinka.microcontroller.generic_agnostic_board.pin import Pin diff --git a/src/microcontroller/__init__.py b/src/microcontroller/__init__.py index cedd126..ea66e10 100644 --- a/src/microcontroller/__init__.py +++ b/src/microcontroller/__init__.py @@ -169,6 +169,8 @@ elif chip_id == ap_chip.RZV2H: from adafruit_blinka.microcontroller.renesas.rzv2h import * elif chip_id == ap_chip.SUNRISE_X3: from adafruit_blinka.microcontroller.horizon.sunrise_x3 import * +elif chip_id == ap_chip.QCM6490: + from adafruit_blinka.microcontroller.quectel.qcm6490 import * elif chip_id == ap_chip.GENERIC_X86: print("WARNING: GENERIC_X86 is not fully supported. Some features may not work.") elif chip_id == ap_chip.OS_AGNOSTIC: diff --git a/src/microcontroller/pin.py b/src/microcontroller/pin.py index 4016f95..b40a511 100644 --- a/src/microcontroller/pin.py +++ b/src/microcontroller/pin.py @@ -159,6 +159,8 @@ elif chip_id == ap_chip.RV1106: from adafruit_blinka.microcontroller.rockchip.rv1106.pin import * elif chip_id == ap_chip.SUNRISE_X3: from adafruit_blinka.microcontroller.horizon.sunrise_x3.pin import * +elif chip_id == ap_chip.QCM6490: + from adafruit_blinka.microcontroller.quectel.qcm6490.pin import * elif "sphinx" in sys.modules: # pylint: disable=unused-import from adafruit_blinka.microcontroller.generic_micropython import Pin