X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/blobdiff_plain/bce35dbe37bdba256437b36b64b110ca2fe63486..84862c851a21caebff5194cbb7d94c9ff14ad132:/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py 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 a6a9be1..ea01a8e 100644 --- a/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py +++ b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py @@ -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)