1 # SPDX-FileCopyrightText: 2021 Melissa LeBlanc-Williams for Adafruit Industries
 
   2 # SPDX-FileCopyrightText: 2023 Steve Jeong for Hardkernel
 
   4 # SPDX-License-Identifier: MIT
 
   6 G12A, G12B, and SM1 Common Definitions
 
   8 Linux kernel 4.9.y (hardkernel)
 
   9     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
 
  10 Linux kernel 5.4.y (mainline)
 
  11     linux/include/dt-bindings/gpio/meson-g12a-gpio.h
 
  12     linux/arch/arm64/boot/dts/amlogic/meson-g12-common.dtsi
 
  15 from adafruit_blinka.agnostic import detector
 
  16 from adafruit_blinka.microcontroller.alias import get_dts_alias, get_pwm_chipid
 
  17 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
 
  18 from adafruit_blinka.microcontroller.generic_linux.libgpiod_chip import Chip
 
  23 chip0lines = chip0.num_lines
 
  24 chip1lines = chip1.num_lines
 
  29     periphs_offset = chip1lines - 85
 
  33     periphs_offset = chip0lines - 85
 
  38 GPIOAO_0 = GPIO496 = Pin((aobus, 0))
 
  39 GPIOAO_1 = GPIO497 = Pin((aobus, 1))
 
  40 GPIOAO_2 = GPIO498 = Pin((aobus, 2))
 
  41 GPIOAO_3 = GPIO499 = Pin((aobus, 3))
 
  42 GPIOAO_4 = GPIO500 = Pin((aobus, 4))
 
  43 GPIOAO_5 = GPIO501 = Pin((aobus, 5))
 
  44 GPIOAO_6 = GPIO502 = Pin((aobus, 6))
 
  45 GPIOAO_7 = GPIO503 = Pin((aobus, 7))
 
  46 GPIOAO_8 = GPIO504 = Pin((aobus, 8))
 
  47 GPIOAO_9 = GPIO505 = Pin((aobus, 9))
 
  48 GPIOAO_10 = GPIO506 = Pin((aobus, 10))
 
  49 GPIOAO_11 = GPIO507 = Pin((aobus, 11))
 
  50 GPIOE_0 = GPIO508 = Pin((aobus, 12))
 
  51 GPIOE_1 = GPIO509 = Pin((aobus, 13))
 
  52 GPIOE_2 = GPIO510 = Pin((aobus, 14))
 
  53 GPIO_TEST_N = GPIO511 = Pin((aobus, 15))
 
  55 GPIOH_0 = GPIO427 = Pin((periphs, 16 + periphs_offset))
 
  56 GPIOH_1 = GPIO428 = Pin((periphs, 17 + periphs_offset))
 
  57 GPIOH_2 = GPIO429 = Pin((periphs, 18 + periphs_offset))
 
  58 GPIOH_3 = GPIO430 = Pin((periphs, 19 + periphs_offset))
 
  59 GPIOH_4 = GPIO431 = Pin((periphs, 20 + periphs_offset))
 
  60 GPIOH_5 = GPIO432 = Pin((periphs, 21 + periphs_offset))
 
  61 GPIOH_6 = GPIO433 = Pin((periphs, 22 + periphs_offset))
 
  62 GPIOH_7 = GPIO434 = Pin((periphs, 23 + periphs_offset))
 
  63 GPIOH_8 = GPIO435 = Pin((periphs, 24 + periphs_offset))
 
  65 GPIOA_0 = GPIO460 = Pin((periphs, 49 + periphs_offset))
 
  66 GPIOA_1 = GPIO461 = Pin((periphs, 50 + periphs_offset))
 
  67 GPIOA_2 = GPIO462 = Pin((periphs, 51 + periphs_offset))
 
  68 GPIOA_3 = GPIO463 = Pin((periphs, 52 + periphs_offset))
 
  69 GPIOA_4 = GPIO464 = Pin((periphs, 53 + periphs_offset))
 
  70 GPIOA_5 = GPIO465 = Pin((periphs, 54 + periphs_offset))
 
  71 GPIOA_6 = GPIO466 = Pin((periphs, 55 + periphs_offset))
 
  72 GPIOA_7 = GPIO467 = Pin((periphs, 56 + periphs_offset))
 
  73 GPIOA_8 = GPIO468 = Pin((periphs, 57 + periphs_offset))
 
  74 GPIOA_9 = GPIO469 = Pin((periphs, 58 + periphs_offset))
 
  75 GPIOA_10 = GPIO470 = Pin((periphs, 59 + periphs_offset))
 
  76 GPIOA_11 = GPIO471 = Pin((periphs, 60 + periphs_offset))
 
  77 GPIOA_12 = GPIO472 = Pin((periphs, 61 + periphs_offset))
 
  78 GPIOA_13 = GPIO473 = Pin((periphs, 62 + periphs_offset))
 
  79 GPIOA_14 = GPIO474 = Pin((periphs, 63 + periphs_offset))
 
  80 GPIOA_15 = GPIO475 = Pin((periphs, 64 + periphs_offset))
 
  82 GPIOX_0 = GPIO476 = Pin((periphs, 65 + periphs_offset))
 
  83 GPIOX_1 = GPIO477 = Pin((periphs, 66 + periphs_offset))
 
  84 GPIOX_2 = GPIO478 = Pin((periphs, 67 + periphs_offset))
 
  85 GPIOX_3 = GPIO479 = Pin((periphs, 68 + periphs_offset))
 
  86 GPIOX_4 = GPIO480 = Pin((periphs, 69 + periphs_offset))
 
  87 GPIOX_5 = GPIO481 = Pin((periphs, 70 + periphs_offset))
 
  88 GPIOX_6 = GPIO482 = Pin((periphs, 71 + periphs_offset))
 
  89 GPIOX_7 = GPIO483 = Pin((periphs, 72 + periphs_offset))
 
  90 GPIOX_8 = GPIO484 = Pin((periphs, 73 + periphs_offset))
 
  91 GPIOX_9 = GPIO485 = Pin((periphs, 74 + periphs_offset))
 
  92 GPIOX_10 = GPIO486 = Pin((periphs, 75 + periphs_offset))
 
  93 GPIOX_11 = GPIO487 = Pin((periphs, 76 + periphs_offset))
 
  94 GPIOX_12 = GPIO488 = Pin((periphs, 77 + periphs_offset))
 
  95 GPIOX_13 = GPIO489 = Pin((periphs, 78 + periphs_offset))
 
  96 GPIOX_14 = GPIO490 = Pin((periphs, 79 + periphs_offset))
 
  97 GPIOX_15 = GPIO491 = Pin((periphs, 80 + periphs_offset))
 
  98 GPIOX_16 = GPIO492 = Pin((periphs, 81 + periphs_offset))
 
  99 GPIOX_17 = GPIO493 = Pin((periphs, 82 + periphs_offset))
 
 100 GPIOX_18 = GPIO494 = Pin((periphs, 83 + periphs_offset))
 
 101 GPIOX_19 = GPIO495 = Pin((periphs, 84 + periphs_offset))
 
 111 # ordered as i2cId, sclId, sdaId
 
 114 # ordered as spiId, sckId, mosiId, misoId
 
 115 spiPorts = ((0, SPI0_SCLK, SPI0_MOSI, SPI0_MISO),)
 
 117 # SysFs pwm outputs, pwm channel and pin in first tuple
 
 120 # ordered as uartId, txId, rxId
 
 122     (1, UART1_TX, UART1_RX),
 
 125 # SysFS analog inputs, Ordered as analog analogInId, device, and channel
 
 128 board = detector.board.id
 
 129 if board in ("ODROID_C4", "ODROID_N2"):
 
 130     alias = get_dts_alias("ffd1d000.i2c")
 
 131     if alias is not None:
 
 132         globals()[alias + "_SCL"] = GPIOX_18
 
 133         globals()[alias + "_SDA"] = GPIOX_17
 
 134         i2cPorts.append((int(alias[-1]), GPIOX_18, GPIOX_17))
 
 135     alias = get_dts_alias("ffd1c000.i2c")
 
 136     if alias is not None:
 
 137         globals()[alias + "_SCL"] = GPIOA_15
 
 138         globals()[alias + "_SDA"] = GPIOA_14
 
 139         i2cPorts.append((int(alias[-1]), GPIOA_15, GPIOA_14))
 
 140     alias = get_dts_alias("ffd24000.serial")
 
 141     if alias is not None:
 
 142         globals()[alias + "_TX"] = GPIOX_12
 
 143         globals()[alias + "_RX"] = GPIOX_13
 
 144         uartPorts.append((int(alias[-1]), GPIOX_12, GPIOX_13))
 
 145     alias = get_dts_alias("ffd23000.serial")
 
 146     if alias is not None:
 
 147         globals()[alias + "_TX"] = GPIOX_6
 
 148         globals()[alias + "_RX"] = GPIOX_7
 
 149         uartPorts.append((int(alias[-1]), GPIOX_6, GPIOX_7))
 
 151 if board in ("ODROID_C4"):
 
 152     alias = get_pwm_chipid("ffd1b000.pwm")
 
 153     if alias is not None:
 
 154         globals()["PWMA"] = GPIOX_6
 
 155         globals()["PWMB"] = GPIOX_19
 
 156         pwmOuts.append(((int(alias[-1]), 0), GPIOX_6))
 
 157         pwmOuts.append(((int(alias[-1]), 1), GPIOX_19))
 
 158     alias = get_pwm_chipid("ffd1a000.pwm")
 
 159     if alias is not None:
 
 160         globals()["PWMC"] = GPIOX_5
 
 161         globals()["PWMD"] = GPIOX_3
 
 162         pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
 
 163         pwmOuts.append(((int(alias[-1]), 1), GPIOX_3))
 
 164     alias = get_pwm_chipid("ffd19000.pwm")
 
 165     if alias is not None:
 
 166         globals()["PWME"] = GPIOX_16
 
 167         globals()["PWMF"] = GPIOX_7
 
 168         pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
 
 169         pwmOuts.append(((int(alias[-1]), 1), GPIOX_7))
 
 170     analogIns.append((37, 0, 2))
 
 171     analogIns.append((40, 0, 0))
 
 172 if board in ("ODROID_N2"):
 
 173     alias = get_pwm_chipid("ffd1a000.pwm")
 
 174     if alias is not None:
 
 175         globals()["PWMC"] = GPIOX_5
 
 176         globals()["PWMD"] = GPIOX_6
 
 177         pwmOuts.append(((int(alias[-1]), 0), GPIOX_5))
 
 178         pwmOuts.append(((int(alias[-1]), 1), GPIOX_6))
 
 179     alias = get_pwm_chipid("ffd19000.pwm")
 
 180     if alias is not None:
 
 181         globals()["PWME"] = GPIOX_16
 
 182         globals()["PWMF"] = GPIOX_7
 
 183         pwmOuts.append(((int(alias[-1]), 0), GPIOX_16))
 
 184         pwmOuts.append(((int(alias[-1]), 1), GPIOX_7))
 
 185     analogIns.append((37, 0, 3))
 
 186     analogIns.append((40, 0, 2))
 
 188 analogIns = tuple(analogIns)
 
 189 i2cPorts = tuple(i2cPorts)
 
 190 pwmOuts = tuple(pwmOuts)
 
 191 uartPorts = tuple(uartPorts)