1 # SPDX-FileCopyrightText: 2022 MrPanc0 for Adafruit Industries
 
   2 # SPDX-FileCopyrightText: 2023 Steve Jeong for Hardkernel
 
   4 # SPDX-License-Identifier: MIT
 
   6 """A Pin class for use with Rockchip RK3568B2."""
 
   8 from adafruit_blinka.agnostic import detector
 
   9 from adafruit_blinka.microcontroller.alias import get_dts_alias, get_pwm_chipid
 
  10 from adafruit_blinka.microcontroller.generic_linux.libgpiod_pin import Pin
 
  12 GPIO3C_6 = Pin((3, 22))
 
  13 GPIO3C_7 = Pin((3, 23))
 
  14 GPIO3D_0 = Pin((3, 24))
 
  15 GPIO3D_1 = Pin((3, 25))
 
  16 GPIO3D_2 = Pin((3, 26))
 
  17 GPIO3D_3 = Pin((3, 27))
 
  18 GPIO3D_4 = Pin((3, 28))
 
  19 GPIO3D_5 = Pin((3, 29))
 
  20 GPIO3D_6 = Pin((3, 30))
 
  21 GPIO3D_7 = Pin((3, 31))
 
  22 GPIO3B_2 = Pin((3, 10))
 
  23 GPIO3B_5 = Pin((3, 13))
 
  24 GPIO3B_6 = Pin((3, 14))
 
  25 GPIO0B_3 = Pin((0, 11))
 
  26 GPIO0B_4 = Pin((0, 12))
 
  27 GPIO0B_5 = Pin((0, 13))
 
  28 GPIO0B_6 = Pin((0, 14))
 
  29 GPIO0C_0 = Pin((0, 16))
 
  30 GPIO0C_1 = Pin((0, 17))
 
  31 GPIO2D_0 = Pin((2, 24))
 
  32 GPIO2D_1 = Pin((2, 25))
 
  33 GPIO2D_2 = Pin((2, 26))
 
  34 GPIO2D_3 = Pin((2, 27))
 
  35 GPIO4B_6 = Pin((4, 14))
 
  36 GPIO4C_1 = Pin((4, 17))
 
  46 SPI0_SCLK_M1 = GPIO2D_3
 
  47 SPI0_MISO_M1 = GPIO2D_0
 
  48 SPI0_MOSI_M1 = GPIO2D_1
 
  60 # ordered as i2cId, SCL, SDA
 
  62     (1, I2C1_SCL, I2C1_SDA),
 
  65 # SysFS pwm outputs, pwm channel and pin in first tuple
 
  71 # ordered as spiId, sckId, mosiId, misoId
 
  72 spiPorts = ((0, SPI0_SCLK_M1, SPI0_MOSI_M1, SPI0_MISO_M1),)
 
  74 # SysFS pwm outputs, pwm channel and pin in first tuple
 
  77 # ordered as uartId, txId, rxId
 
  80 # SysFS analog inputs, Ordered as analog analogInId, device, and channel
 
  83 board = detector.board.id
 
  84 if board in ("ODROID_M1"):
 
  85     analogIns.append((37, 0, 7))
 
  86     analogIns.append((40, 0, 6))
 
  87     alias = get_dts_alias("fe5c0000.i2c")
 
  89         globals()[alias + "_SCL"] = GPIO3B_5
 
  90         globals()[alias + "_SDA"] = GPIO3B_6
 
  91         i2cPorts.append((int(alias[-1]), GPIO3B_5, GPIO3B_6))
 
  92     alias = get_pwm_chipid("fdd70010.pwm")
 
  94         globals()["PWM" + alias] = GPIO0B_5
 
  95         pwmOuts.append(((int(alias[-1]), 0), GPIO0B_5))
 
  96     alias = get_pwm_chipid("fdd70020.pwm")
 
  98         globals()["PWM" + alias] = GPIO0B_6
 
  99         pwmOuts.append(((int(alias[-1]), 0), GPIO0B_6))
 
 100     alias = get_pwm_chipid("fe6f0010.pwm")
 
 101     if alias is not None:
 
 102         globals()["PWM" + alias] = GPIO3B_2
 
 103         pwmOuts.append(((int(alias[-1]), 0), GPIO3B_2))
 
 104     alias = get_dts_alias("fdd50000.serial")
 
 105     if alias is not None:
 
 106         globals()[alias + "_TX"] = GPIO0C_1
 
 107         globals()[alias + "_RX"] = GPIO0C_0
 
 108         uartPorts.append((int(alias[-1]), GPIO0C_1, GPIO0C_0))
 
 109     alias = get_dts_alias("fe650000.serial")
 
 110     if alias is not None:
 
 111         globals()[alias + "_TX"] = GPIO3D_6
 
 112         globals()[alias + "_RX"] = GPIO3D_7
 
 113         uartPorts.append((int(alias[-1]), GPIO3D_6, GPIO3D_7))
 
 115 analogIns = tuple(analogIns)
 
 116 i2cPorts = tuple(i2cPorts)
 
 117 pwmOuts = tuple(pwmOuts)
 
 118 uartPorts = tuple(uartPorts)