ODROID-C5: Add odroid-c5 wiring-pi support

- Rev. 20250106
- Warning: Use only GPIO functions.

Signed-off-by: YoungSoo Shin <shinys000114@gmail.com>
Change-Id: I02623a284c047c6b5e485d28c9714ed8e65025df
This commit is contained in:
2024-10-11 12:17:15 +09:00
parent d29db23b92
commit b99cbc570b
10 changed files with 1165 additions and 0 deletions

View File

@@ -29,6 +29,7 @@ cc_library_shared {
"wiringPi/odroidm1.c",
"wiringPi/odroidm1s.c",
"wiringPi/odroidm2.c",
"wiringPi/odroidc5.c",
"wiringPi/drcSerial.c",
"wiringPi/mcp23s08.c",
"wiringPi/odroidn1.c",

7
debian/changelog vendored
View File

@@ -1,3 +1,10 @@
odroid-wiringpi (3.17.1) stable; urgency=medium
* ODROID-C5: New Support for ODROID-C5
* ODROID: Change binary installation path
-- Bob Shin <shinys000114@gmail.com> Thu, 29 Oct 2024 06:07:00 +0000
odroid-wiringpi (3.17.0) stable; urgency=medium
* ODROID-M2: New Support for ODROID-M2

View File

@@ -779,6 +779,69 @@ static const char *physNamesOdroidM2 [64] =
};
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC5All [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.0", "5V ",
" SCL.0", "GND(0V) ",
"GPIOX_17", "TxD.0 ",
" GND(0V)", "RxD.0 ",
" GPIOX_5", "GPIOX_14",
"GPIOX_15", "GND(0V) ",
" GPIOX_4", "GPIODV_1",
" 3.3V", "GPIODV_2",
" MOSI", "GND(0V) ",
" MISO", "GPIOX_6 ",
" SLCK", "SS ",
" GND(0V)", "GPIOX_7 ",
" SDA.1", "SCL.1 ",
" GPIOH_4", "GND(0V) ",
" GPIOH_5", "GPIOX_2 ",
" GPIOX_0", "GND(0V) ",
" GPIOX_1", "GPIOX_3 ",
" AIN.1", "1V8 ",
" GND(0V)", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
};
/*----------------------------------------------------------------------------*/
static const char *physNamesOdroidC5 [64] =
{
NULL,
" 3.3V", "5V ",
" SDA.0", "5V ",
" SCL.0", "0V ",
" IO_D4", "TxD1 ",
" 0V", "RxD1 ",
" IO_X5", "IO_X14 ",
" IO_X15", "0V ",
" IO_X4", "IO_DV1 ",
" 3.3V", "IO_DV2 ",
" MOSI", "0V ",
" MISO", "IOX_6 ",
" SLCK", "SS ",
" 0V", "IOX_7 ",
" SDA.1", "SCL.1 ",
" IO_H4", "0V ",
" IO_H5", "IOX_2 ",
" IO_X0", "0V ",
" IO_X1", "IOX_3 ",
" AIN.1", "1V8 ",
" 0V", "AIN.0 ",
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,
NULL,NULL,NULL,
};
/*----------------------------------------------------------------------------*/
static void readallPhys(int model, int UNU rev, int physPin, const char *physNames[], int isAll) {
int pin ;
@@ -834,6 +897,7 @@ static void readallPhys(int model, int UNU rev, int physPin, const char *physNam
case MODEL_ODROID_M1:
case MODEL_ODROID_M1S:
case MODEL_ODROID_M2:
case MODEL_ODROID_C5:
printf (" | %2d | %5s", getDrive(pin), pupd[getPUPD(pin)]);
break;
default:
@@ -878,6 +942,7 @@ static void readallPhys(int model, int UNU rev, int physPin, const char *physNam
case MODEL_ODROID_M1:
case MODEL_ODROID_M1S:
case MODEL_ODROID_M2:
case MODEL_ODROID_C5:
printf (" | %-5s | %-2d", pupd[getPUPD(pin)], getDrive(pin));
break;
default:
@@ -1108,6 +1173,10 @@ void doReadall(int argc, char *argv[]) {
headerName = (isAll == FALSE) ? "--- M2 ---" : "---- Model ODROID-M2 ----";
physNames = (char *) ((isAll == FALSE) ? physNamesOdroidM2 : physNamesOdroidM2All);
break;
case MODEL_ODROID_C5:
headerName = (isAll == FALSE) ? "--- C5 ---" : "---- Model ODROID-C5 ----";
physNames = (char *) ((isAll == FALSE) ? physNamesOdroidC5 : physNamesOdroidC5All);
break;
default:
printf("Oops - unknown model: %d\n", model);
return;

View File

@@ -21,6 +21,7 @@ libwiringPi_la_SOURCES = \
odroidc1.c \
odroidc2.c \
odroidc4.c \
odroidc5.c \
odroidhc4.c \
odroidm1.c \
odroidm1s.c \

1005
wiringPi/odroidc5.c Normal file

File diff suppressed because it is too large Load Diff

68
wiringPi/odroidc5.h Normal file
View File

@@ -0,0 +1,68 @@
/*----------------------------------------------------------------------------*/
/*
WiringPi ODROID-C5 Board Header file
*/
/*----------------------------------------------------------------------------*/
#ifndef __ODROID_C5_H__
#define __ODROID_C5_H__
/*----------------------------------------------------------------------------*/
#define C5_PWM_INTERNAL_CLK 24000000
#define C5_GPIO_BASE 0xfe004000
#define C5_GPIO_D_WPI_START 452
#define C5_GPIO_DV_WPI_START 457
#define C5_GPIO_H_WPI_START 464
#define C5_GPIO_X_WPI_START 476
#define C5_GPIO_D(REG) (REG + C5_GPIO_D_WPI_START)
#define C5_GPIO_DV(REG) (REG + C5_GPIO_DV_WPI_START)
#define C5_GPIO_H(REG) (REG + C5_GPIO_H_WPI_START)
#define C5_GPIO_X(REG) (REG + C5_GPIO_X_WPI_START)
#define C5_IS_GPIO_D(W) (W >= C5_GPIO_D(2) && W <= C5_GPIO_D(4))
#define C5_IS_GPIO_DV(W) (W >= C5_GPIO_DV(1) && W <= C5_GPIO_DV(2))
#define C5_IS_GPIO_H(W) (W >= C5_GPIO_H(4) && W <= C5_GPIO_H(5))
#define C5_IS_GPIO_X(W) (W >= C5_GPIO_X(0) && W <= C5_GPIO_X(18) && W != C5_GPIO_X(16))
#define C5_IS_GPIO_X_EXT(W) (W >= C5_GPIO_X(16) && W <= C5_GPIO_X(18))
#define C5_PIN_MUX_REG2_OFFSET 0x02
#define C5_PIN_MUX_REG3_OFFSET 0x03
#define C5_PIN_MUX_REG4_OFFSET 0x04
#define C5_PIN_MUX_REG5_OFFSET 0x05
#define C5_PIN_MUX_REGB_OFFSET 0x0b
#define C5_PIN_MUX_REGG_OFFSET 0x10
#define C5_GPIO_X_OFFSET 0x40
#define C5_GPIO_H_OFFSET 0x50
#define C5_GPIO_D_OFFSET 0x60
#define C5_GPIO_DV_OFFSET 0xa0
#define C5_GPIO_I_OFFSET 0x00
#define C5_GPIO_O_OFFSET 0x01
#define C5_GPIO_OEN_OFFSET 0x02
#define C5_GPIO_PULL_EN_OFFSET 0x03
#define C5_GPIO_PULL_UP_OFFSET 0x04
#define C5_GPIO_DS_OFFSET 0x07
#define C5_GPIO_DS_EXT_OFFSET 0x08
#ifdef __cplusplus
extern "C" {
#endif
extern void init_odroidc5 (struct libodroid *libwiring);
#ifdef __cplusplus
}
#endif
/*----------------------------------------------------------------------------*/
#endif /* __ODROID_C5_H__ */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/

View File

@@ -47,6 +47,7 @@
#include "odroidc4.h"
#include "odroidm1.h"
#include "odroidm2.h"
#include "odroidc5.h"
/*----------------------------------------------------------------------------*/
// Const string define
@@ -67,6 +68,7 @@ const char *piModelNames [16] =
"ODROID-M1",
"ODROID-M1S",
"ODROID-M2",
"ODROID-C5",
};
const char *piRevisionNames [16] =
@@ -551,6 +553,11 @@ int piGpioLayout (void) {
libwiring.mem = 5;
libwiring.rev = 1;
break;
case MODEL_ODROID_C5:
libwiring.maker = MAKER_AMLOGIC;
libwiring.mem = 4;
libwiring.rev = 1;
break;
case MODEL_UNKNOWN:
default:
libwiring.model = MAKER_UNKNOWN;
@@ -1279,6 +1286,9 @@ int wiringPiSetup (void)
case MODEL_ODROID_M2:
init_odroidm2(&libwiring);
break;
case MODEL_ODROID_C5:
init_odroidc5(&libwiring);
break;
default:
return wiringPiFailure (WPI_ALMOST,
"wiringPiSetup: Unknown model\n");

View File

@@ -63,6 +63,7 @@
#define MODEL_ODROID_M1 8
#define MODEL_ODROID_M1S 9
#define MODEL_ODROID_M2 10
#define MODEL_ODROID_C5 11
#define MAKER_UNKNOWN 0
#define MAKER_AMLOGIC 1

View File

@@ -270,6 +270,8 @@ int wiringPiI2CSetup (const int devId)
case MODEL_ODROID_M1S:
case MODEL_ODROID_M2:
device = "/dev/i2c-0";
case MODEL_ODROID_C5:
device = "/dev/i2c-0";
break;
}

View File

@@ -151,6 +151,7 @@ int wiringPiSPISetupMode (int channel, int speed, int mode)
case MODEL_ODROID_M1:
case MODEL_ODROID_M1S:
case MODEL_ODROID_M2:
case MODEL_ODROID_C5:
sprintf(device, "%s%d", spiDevType0, channel);
break;
case MODEL_ODROID_XU3: