Merge pull request #275 from hhk7734/meson-g12
Amlogic: integrate G12A, G12B, and SM1
This commit is contained in:
commit
85e40fd98d
6 changed files with 175 additions and 197 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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)
|
||||
|
|
@ -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 *
|
||||
|
|
|
|||
|
|
@ -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 *
|
||||
|
|
|
|||
Loading…
Reference in a new issue