From: Melissa LeBlanc-Williams Date: Tue, 21 Apr 2020 17:31:49 +0000 (-0700) Subject: Merge pull request #275 from hhk7734/meson-g12 X-Git-Tag: 4.6.0~1 X-Git-Url: https://git.ayoreis.com/Adafruit_Blinka-hackapet.git/commitdiff_plain/85e40fd98d2a61d67ef21c794588bf00270b53c8?hp=aa64c74fd90835f56c16743a8649928b79501688 Merge pull request #275 from hhk7734/meson-g12 Amlogic: integrate G12A, G12B, and SM1 --- diff --git a/src/adafruit_blinka/board/hardkernel/odroidc4.py b/src/adafruit_blinka/board/hardkernel/odroidc4.py index 64bebce..27ccae8 100644 --- a/src/adafruit_blinka/board/hardkernel/odroidc4.py +++ b/src/adafruit_blinka/board/hardkernel/odroidc4.py @@ -2,13 +2,12 @@ from adafruit_blinka.microcontroller.amlogic.s905x3 import pin -SDA1 = pin.I2C1_SDA -SCL1 = pin.I2C1_SCL -SDA2 = pin.I2C2_SDA -SCL2 = pin.I2C2_SCL +for it in pin.i2cPorts: + globals()["SCL" + str(it[0])] = it[1] + globals()["SDA" + str(it[0])] = it[2] -SDA = SDA1 -SCL = SCL1 +SCL = pin.i2cPorts[0][1] +SDA = pin.i2cPorts[0][2] SCLK = pin.SPI0_SCLK MOSI = pin.SPI0_MOSI diff --git a/src/adafruit_blinka/board/hardkernel/odroidn2.py b/src/adafruit_blinka/board/hardkernel/odroidn2.py index 7d23d70..a533958 100644 --- a/src/adafruit_blinka/board/hardkernel/odroidn2.py +++ b/src/adafruit_blinka/board/hardkernel/odroidn2.py @@ -51,36 +51,41 @@ GPIOA0_13 = pin.GPIO509 GPIOA0_14 = pin.GPIO510 GPIOA0_15 = pin.GPIO511 -SDA = pin.I2C3_SDA -SCL = pin.I2C3_SCL +for it in pin.i2cPorts: + globals()["SCL" + str(it[0])] = it[1] + globals()["SDA" + str(it[0])] = it[2] + +# Set second i2c bus as default for backward compatibility. +SCL = pin.i2cPorts[1][1] +SDA = pin.i2cPorts[1][2] SCLK = pin.SPI0_SCLK MOSI = pin.SPI0_MOSI MISO = pin.SPI0_MISO SPI_CS0 = pin.GPIO486 -D0 = GPIOX_3 -D1 = GPIOX_16 -D2 = GPIOX_4 -D3 = GPIOX_7 -D4 = GPIOX_0 -D5 = GPIOX_1 -D6 = GPIOX_2 -D7 = GPIOA_13 -D8 = GPIOX_17 -D9 = GPIOX_18 -D10 = GPIOX_10 -D11 = GPIOA_4 -D12 = GPIOX_8 -D13 = GPIOX_9 -D14 = GPIOX_11 -D15 = GPIOX_12 -D16 = GPIOX_13 -D21 = GPIOX_14 -D22 = GPIOX_15 -D23 = GPIOX_5 -D24 = GPIOX_6 -D26 = GPIOA_12 -D27 = GPIOX_19 -D30 = GPIOA_14 -D31 = GPIOA_15 +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 diff --git a/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/__init__.py b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/__init__.py new file mode 100644 index 0000000..e69de29 diff --git a/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py new file mode 100644 index 0000000..635d816 --- /dev/null +++ b/src/adafruit_blinka/microcontroller/amlogic/meson_g12_common/pin.py @@ -0,0 +1,136 @@ +from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin +import gpiod +import re + +# 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 +# linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi + +chip0 = gpiod.Chip("0") +chip1 = gpiod.Chip("1") + +if chip0.num_lines() < 20: + aobus = 0 + periphs = 1 + periphs_offset = chip1.num_lines() - 85 +else: + aobus = 1 + periphs = 0 + periphs_offset = chip0.num_lines() - 85 + +chip0.close() +chip1.close() + +GPIOAO_0 = GPIO496 = Pin((aobus, 0)) +GPIOAO_1 = GPIO497 = Pin((aobus, 1)) +GPIOAO_2 = GPIO498 = Pin((aobus, 2)) +GPIOAO_3 = GPIO499 = Pin((aobus, 3)) +GPIOAO_4 = GPIO500 = Pin((aobus, 4)) +GPIOAO_5 = GPIO501 = Pin((aobus, 5)) +GPIOAO_6 = GPIO502 = Pin((aobus, 6)) +GPIOAO_7 = GPIO503 = Pin((aobus, 7)) +GPIOAO_8 = GPIO504 = Pin((aobus, 8)) +GPIOAO_9 = GPIO505 = Pin((aobus, 9)) +GPIOAO_10 = GPIO506 = Pin((aobus, 10)) +GPIOAO_11 = GPIO507 = Pin((aobus, 11)) +GPIOE_0 = GPIO508 = Pin((aobus, 12)) +GPIOE_1 = GPIO509 = Pin((aobus, 13)) +GPIOE_2 = GPIO510 = Pin((aobus, 14)) +GPIO_TEST_N = GPIO511 = Pin((aobus, 15)) + +GPIOH_0 = GPIO427 = Pin((periphs, 16 + periphs_offset)) +GPIOH_1 = GPIO428 = Pin((periphs, 17 + periphs_offset)) +GPIOH_2 = GPIO429 = Pin((periphs, 18 + periphs_offset)) +GPIOH_3 = GPIO430 = Pin((periphs, 19 + periphs_offset)) +GPIOH_4 = GPIO431 = Pin((periphs, 20 + periphs_offset)) +GPIOH_5 = GPIO432 = Pin((periphs, 21 + periphs_offset)) +GPIOH_6 = GPIO433 = Pin((periphs, 22 + periphs_offset)) +GPIOH_7 = GPIO434 = Pin((periphs, 23 + periphs_offset)) +GPIOH_8 = GPIO435 = Pin((periphs, 24 + periphs_offset)) + +GPIOA_0 = GPIO460 = Pin((periphs, 49 + periphs_offset)) +GPIOA_1 = GPIO461 = Pin((periphs, 50 + periphs_offset)) +GPIOA_2 = GPIO462 = Pin((periphs, 51 + periphs_offset)) +GPIOA_3 = GPIO463 = Pin((periphs, 52 + periphs_offset)) +GPIOA_4 = GPIO464 = Pin((periphs, 53 + periphs_offset)) +GPIOA_5 = GPIO465 = Pin((periphs, 54 + periphs_offset)) +GPIOA_6 = GPIO466 = Pin((periphs, 55 + periphs_offset)) +GPIOA_7 = GPIO467 = Pin((periphs, 56 + periphs_offset)) +GPIOA_8 = GPIO468 = Pin((periphs, 57 + periphs_offset)) +GPIOA_9 = GPIO469 = Pin((periphs, 58 + periphs_offset)) +GPIOA_10 = GPIO470 = Pin((periphs, 59 + periphs_offset)) +GPIOA_11 = GPIO471 = Pin((periphs, 60 + periphs_offset)) +GPIOA_12 = GPIO472 = Pin((periphs, 61 + periphs_offset)) +GPIOA_13 = GPIO473 = Pin((periphs, 62 + periphs_offset)) +GPIOA_14 = GPIO474 = Pin((periphs, 63 + periphs_offset)) +GPIOA_15 = GPIO475 = Pin((periphs, 64 + periphs_offset)) + +GPIOX_0 = GPIO476 = Pin((periphs, 65 + periphs_offset)) +GPIOX_1 = GPIO477 = Pin((periphs, 66 + periphs_offset)) +GPIOX_2 = GPIO478 = Pin((periphs, 67 + periphs_offset)) +GPIOX_3 = GPIO479 = Pin((periphs, 68 + periphs_offset)) +GPIOX_4 = GPIO480 = Pin((periphs, 69 + periphs_offset)) +GPIOX_5 = GPIO481 = Pin((periphs, 70 + periphs_offset)) +GPIOX_6 = GPIO482 = Pin((periphs, 71 + periphs_offset)) +GPIOX_7 = GPIO483 = Pin((periphs, 72 + periphs_offset)) +GPIOX_8 = GPIO484 = Pin((periphs, 73 + periphs_offset)) +GPIOX_9 = GPIO485 = Pin((periphs, 74 + periphs_offset)) +GPIOX_10 = GPIO486 = Pin((periphs, 75 + periphs_offset)) +GPIOX_11 = GPIO487 = Pin((periphs, 76 + periphs_offset)) +GPIOX_12 = GPIO488 = Pin((periphs, 77 + periphs_offset)) +GPIOX_13 = GPIO489 = Pin((periphs, 78 + periphs_offset)) +GPIOX_14 = GPIO490 = Pin((periphs, 79 + periphs_offset)) +GPIOX_15 = GPIO491 = Pin((periphs, 80 + periphs_offset)) +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 + +# ordered as spiId, sckId, mosiId, misoId +spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO), ) + +UART1_TX = GPIOX_12 +UART1_RX = GPIOX_13 + +# ordered as uartId, txId, rxId +uartPorts = ((1, UART1_TX, UART1_RX), ) + + +def get_dts_alias(device: str) -> str: + uevent_path = "/sys/bus/platform/devices/" + device + "/uevent" + with open(uevent_path, 'r') as fd: + pattern = r"^OF_ALIAS_0=(.*)$" + uevent = fd.read().split('\n') + for line in uevent: + match = re.search(pattern, line) + if match: + return match.group(1).upper() + + return None + + +# ordered as i2cId, sclId, sdaId +i2cPorts = [] + +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[3]), 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[3]), GPIOA_15, GPIOA_14)) + +i2cPorts = tuple(i2cPorts) diff --git a/src/adafruit_blinka/microcontroller/amlogic/s905x3/pin.py b/src/adafruit_blinka/microcontroller/amlogic/s905x3/pin.py index 712d704..0f576e6 100644 --- a/src/adafruit_blinka/microcontroller/amlogic/s905x3/pin.py +++ b/src/adafruit_blinka/microcontroller/amlogic/s905x3/pin.py @@ -1,90 +1 @@ -from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin - -# Ref: -# Linux kernel 4.9.y (hardkernel) -# linux/include/dt-bindings/gpio/meson-g12a-gpio.h -# linux/arch/arm64/boot/dts/amlogic/meson64_odroidc4.dts - -GPIOAO_0 = GPIO496 = Pin((0, 0)) -GPIOAO_1 = GPIO497 = Pin((0, 1)) -GPIOAO_2 = GPIO498 = Pin((0, 2)) -GPIOAO_3 = GPIO499 = Pin((0, 3)) -GPIOAO_4 = GPIO500 = Pin((0, 4)) -GPIOAO_5 = GPIO501 = Pin((0, 5)) -GPIOAO_6 = GPIO502 = Pin((0, 6)) -GPIOAO_7 = GPIO503 = Pin((0, 7)) -GPIOAO_8 = GPIO504 = Pin((0, 8)) -GPIOAO_9 = GPIO505 = Pin((0, 9)) -GPIOAO_10 = GPIO506 = Pin((0, 10)) -GPIOAO_11 = GPIO507 = Pin((0, 11)) -GPIOE_0 = GPIO508 = Pin((0, 12)) -GPIOE_1 = GPIO509 = Pin((0, 13)) -GPIOE_2 = GPIO510 = Pin((0, 14)) -GPIO_TEST_N = GPIO511 = Pin((0, 15)) - -GPIOH_0 = GPIO427 = Pin((1, 17)) -GPIOH_1 = GPIO428 = Pin((1, 18)) -GPIOH_2 = GPIO429 = Pin((1, 19)) -GPIOH_3 = GPIO430 = Pin((1, 20)) -GPIOH_4 = GPIO431 = Pin((1, 21)) -GPIOH_5 = GPIO432 = Pin((1, 22)) -GPIOH_6 = GPIO433 = Pin((1, 23)) -GPIOH_7 = GPIO434 = Pin((1, 24)) -GPIOH_8 = GPIO435 = Pin((1, 25)) - -GPIOA_0 = GPIO460 = Pin((1, 50)) -GPIOA_1 = GPIO461 = Pin((1, 51)) -GPIOA_2 = GPIO462 = Pin((1, 52)) -GPIOA_3 = GPIO463 = Pin((1, 53)) -GPIOA_4 = GPIO464 = Pin((1, 54)) -GPIOA_5 = GPIO465 = Pin((1, 55)) -GPIOA_6 = GPIO466 = Pin((1, 56)) -GPIOA_7 = GPIO467 = Pin((1, 57)) -GPIOA_8 = GPIO468 = Pin((1, 58)) -GPIOA_9 = GPIO469 = Pin((1, 59)) -GPIOA_10 = GPIO470 = Pin((1, 60)) -GPIOA_11 = GPIO471 = Pin((1, 61)) -GPIOA_12 = GPIO472 = Pin((1, 62)) -GPIOA_13 = GPIO473 = Pin((1, 63)) -GPIOA_14 = GPIO474 = Pin((1, 64)) -GPIOA_15 = GPIO475 = Pin((1, 65)) - -GPIOX_0 = GPIO476 = Pin((1, 66)) -GPIOX_1 = GPIO477 = Pin((1, 67)) -GPIOX_2 = GPIO478 = Pin((1, 68)) -GPIOX_3 = GPIO479 = Pin((1, 69)) -GPIOX_4 = GPIO480 = Pin((1, 70)) -GPIOX_5 = GPIO481 = Pin((1, 71)) -GPIOX_6 = GPIO482 = Pin((1, 72)) -GPIOX_7 = GPIO483 = Pin((1, 73)) -GPIOX_8 = GPIO484 = Pin((1, 74)) -GPIOX_9 = GPIO485 = Pin((1, 75)) -GPIOX_10 = GPIO486 = Pin((1, 76)) -GPIOX_11 = GPIO487 = Pin((1, 77)) -GPIOX_12 = GPIO488 = Pin((1, 78)) -GPIOX_13 = GPIO489 = Pin((1, 79)) -GPIOX_14 = GPIO490 = Pin((1, 80)) -GPIOX_15 = GPIO491 = Pin((1, 81)) -GPIOX_16 = GPIO492 = Pin((1, 82)) -GPIOX_17 = GPIO493 = Pin((1, 83)) -GPIOX_18 = GPIO494 = Pin((1, 84)) -GPIOX_19 = GPIO495 = Pin((1, 85)) - -I2C1_SDA = GPIOX_17 -I2C1_SCL = GPIOX_18 -I2C2_SDA = GPIOA_14 -I2C2_SCL = GPIOA_15 - -UART1_TX = GPIOX_12 -UART1_RX = GPIOX_13 - -SPI0_SCLK = GPIOX_11 -SPI0_MISO = GPIOX_9 -SPI0_MOSI = GPIOX_8 -SPI0_CS0 = GPIOX_10 - -i2cPorts = ((1, I2C1_SCL, I2C1_SDA), (2, I2C2_SCL, I2C2_SDA), ) -# ordered as spiId, sckId, mosiId, misoId -spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO), ) -# ordered as uartId, txId, rxId -uartPorts = ((1, UART1_TX, UART1_RX), ) +from adafruit_blinka.microcontroller.amlogic.meson_g12_common.pin import * diff --git a/src/adafruit_blinka/microcontroller/amlogic/s922x/pin.py b/src/adafruit_blinka/microcontroller/amlogic/s922x/pin.py index fcde5cc..0f576e6 100644 --- a/src/adafruit_blinka/microcontroller/amlogic/s922x/pin.py +++ b/src/adafruit_blinka/microcontroller/amlogic/s922x/pin.py @@ -1,74 +1 @@ -from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin - -GPIO496 = Pin((0, 0)) -GPIO497 = Pin((0, 1)) -GPIO498 = Pin((0, 2)) -GPIO499 = Pin((0, 3)) -GPIO500 = Pin((0, 4)) -GPIO501 = Pin((0, 5)) -GPIO502 = Pin((0, 6)) -GPIO503 = Pin((0, 7)) -GPIO504 = Pin((0, 8)) -GPIO505 = Pin((0, 9)) -GPIO506 = Pin((0, 10)) -GPIO507 = Pin((0, 11)) -GPIO508 = Pin((0, 12)) -GPIO509 = Pin((0, 13)) -GPIO510 = Pin((0, 14)) -GPIO511 = Pin((0, 15)) - -GPIO460 = Pin((1, 50)) -GPIO461 = Pin((1, 51)) -GPIO462 = Pin((1, 52)) -GPIO463 = Pin((1, 53)) -GPIO464 = Pin((1, 54)) -GPIO465 = Pin((1, 55)) -GPIO466 = Pin((1, 56)) -GPIO467 = Pin((1, 57)) -GPIO468 = Pin((1, 58)) -GPIO469 = Pin((1, 59)) -GPIO470 = Pin((1, 60)) -GPIO472 = Pin((1, 62)) -GPIO471 = Pin((1, 61)) -GPIO472 = Pin((1, 62)) -GPIO473 = Pin((1, 63)) -GPIO474 = Pin((1, 64)) -GPIO475 = Pin((1, 65)) -GPIO476 = Pin((1, 66)) -GPIO477 = Pin((1, 67)) -GPIO478 = Pin((1, 68)) -GPIO479 = Pin((1, 69)) -GPIO480 = Pin((1, 70)) -GPIO481 = Pin((1, 71)) -GPIO482 = Pin((1, 72)) -GPIO483 = Pin((1, 73)) -GPIO484 = Pin((1, 74)) -GPIO485 = Pin((1, 75)) -GPIO486 = Pin((1, 76)) -GPIO487 = Pin((1, 77)) -GPIO488 = Pin((1, 78)) -GPIO489 = Pin((1, 79)) -GPIO490 = Pin((1, 80)) -GPIO491 = Pin((1, 81)) -GPIO492 = Pin((1, 82)) -GPIO493 = Pin((1, 83)) -GPIO494 = Pin((1, 84)) -GPIO495 = Pin((1, 85)) - -I2C2_SDA = GPIO493 -I2C2_SCL = GPIO494 -I2C3_SDA = GPIO474 -I2C3_SCL = GPIO475 - -UART1_TX = GPIO488 -UART1_RX = GPIO489 - -SPI0_SCLK = GPIO487 -SPI0_MISO = GPIO485 -SPI0_MOSI = GPIO484 - -i2cPorts = ( (2, I2C2_SCL, I2C2_SDA), (3, I2C3_SCL, I2C3_SDA), ) -# ordered as spiId, sckId, mosiId, misoId -spiPorts = ( (0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO), ) -# ordered as uartId, txId, rxId -uartPorts = ( (1, UART1_TX, UART1_RX), ) +from adafruit_blinka.microcontroller.amlogic.meson_g12_common.pin import *