Merge pull request #275 from hhk7734/meson-g12

Amlogic: integrate G12A, G12B, and SM1
This commit is contained in:
Melissa LeBlanc-Williams 2020-04-21 10:31:49 -07:00 committed by GitHub
commit 85e40fd98d
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 175 additions and 197 deletions

View file

@ -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

View file

@ -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

View file

@ -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)

View file

@ -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 *

View file

@ -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 *