Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
en:c2_gpio_default [2016/02/26 12:50] charles.park [Expansion Connectors (J2)] |
en:c2_gpio_default [2016/02/27 12:34] (current) charles.park [Expansion Connectors (J2)] |
||
---|---|---|---|
Line 4: | Line 4: | ||
** Default gpio status ** | ** Default gpio status ** | ||
- | ^ GPIO ^ Name ^ Mode ^ V ^ PU/PD ^ PIN ^ PIN ^ PU/PD ^ V ^ Mode ^ Name ^ GPIO ^ | + | ^ GPIO ^ Name ^ Mode ^ V ^ PU/PD ^ PIN ^ PIN ^ PU/PD ^ V ^ Mode ^ Name ^ GPIO ^ |
- | | - | 3.3V | - | - | - | 1 | 2 | - | - | - | 5.0V | - | | + | | - | 3.3V | - | - | - | 1 | 2 | - | - | - | 5.0V | - | |
- | | 205 | I2CA_SDA | IN | 1 | - | 3 | 4 | - | - | - | 5.0V | - | | + | | 205 | I2CA_SDA | IN | 1 | - | 3 | 4 | - | - | - | 5.0V | - | |
- | | 206 | I2CA_SCL | IN | 1 | - | 5 | 6 | - | - | - | GND | - | | + | | 206 | I2CA_SCL | IN | 1 | - | 5 | 6 | - | - | - | GND | - | |
- | | 249 | GPIOX.21 | IN | 0 | P/D | 7 | 8 | P/U | 1 | ALT1 | GPIOX.12 | 240 | | + | | 249 | GPIOX.21 | IN | 1 | P/U | 7 | 8 | P/U | 1 | ALT2 | GPIOX.12 | 240 | |
- | | - | GND | - | - | - | 9 | 10 | P/U | 1 | ALT1 | GPIOX.13 | 241 | | + | | - | GND | - | - | - | 9 | 10 | P/U | 1 | ALT2 | GPIOX.13 | 241 | |
- | | 247 | GPIOX.19 | IN | 1 | P/U | 11 | 12 | P/D | 0 | IN | GPIOX.10 | 238 | | + | | 247 | GPIOX.19 | IN | 1 | P/U | 11 | 12 | P/D | 0 | IN | GPIOX.10 | 238 | |
- | | 239 | GPIOX.11 | IN | 1 | P/U | 13 | 14 | - | - | - | GND | - | | + | | 239 | GPIOX.11 | IN | 1 | P/U | 13 | 14 | - | - | - | GND | - | |
- | | 237 | GPIOX.9 | IN | 0 | P/D | 15 | 16 | P/U | 1 | IN | GPIOX.8 | 236 | | + | | 237 | GPIOX.9 | IN | 1 | P/U | 15 | 16 | P/U | 1 | IN | GPIOX.8 | 236 | |
- | | - | 3.3V | - | - | - | 17 | 18 | P/U | 1 | IN | GPIOX.5 | 233 | | + | | - | 3.3V | - | - | - | 17 | 18 | P/U | 1 | IN | GPIOX.5 | 233 | |
- | | 235 | GPIOX.7 | IN | 1 | P/U | 19 | 20 | - | - | - | GND | - | | + | | 235 | GPIOX.7 | IN | 1 | P/U | 19 | 20 | - | - | - | GND | - | |
- | | 232 | GPIOX.4 | IN | 1 | P/U | 21 | 22 | P/U | 1 | IN | GPIOX.3 | 231 | | + | | 232 | GPIOX.4 | IN | 1 | P/U | 21 | 22 | P/U | 1 | IN | GPIOX.3 | 231 | |
- | | 230 | GPIOX.2 | IN | 1 | P/U | 23 | 24 | P/D | 0 | IN | GPIOX.1 | 229 | | + | | 230 | GPIOX.2 | IN | 1 | P/U | 23 | 24 | P/U | 1 | IN | GPIOX.1 | 229 | |
- | | - | GND | - | - | - | 25 | 26 | P/U | 1 | IN | GPIOY.14 | 225 | | + | | - | GND | - | - | - | 25 | 26 | P/D | 0 | IN | GPIOY.14 | 225 | |
- | | 207 | I2CB_SDA | IN | 1 | - | 27 | 28 | - | 1 | IN | I2CB_SCL | 208 | | + | | 207 | I2CB_SDA | IN | 1 | - | 27 | 28 | - | 1 | IN | I2CB_SCL | 208 | |
- | | 228 | GPIOX.0 | IN | 1 | P/U | 29 | 30 | - | - | - | GND | - | | + | | 228 | GPIOX.0 | IN | 1 | P/U | 29 | 30 | - | - | - | GND | - | |
- | | 219 | GPIOY.8 | IN | 1 | P/U | 31 | 32 | P/U | 1 | IN | GPIOY.13 | 224 | | + | | 219 | GPIOY.8 | IN | 1 | P/U | 31 | 32 | P/U | 1 | IN | GPIOY.13 | 224 | |
- | | 234 | GPIOX.6 | IN | 0 | P/D | 33 | 34 | - | - | - | GND | - | | + | | 234 | GPIOX.6 | IN | 0 | P/D | 33 | 34 | - | - | - | GND | - | |
- | | 214 | GPIOY.3 | IN | 1 | P/U | 35 | 36 | P/U | 1 | IN | GPIOY.7 | 218 | | + | | 214 | GPIOY.3 | IN | 1 | P/U | 35 | 36 | P/U | 1 | IN | GPIOY.7 | 218 | |
- | | - | ADC.AIN0 | - | - | - | 37 | 38 | - | - | - | 1.8V REF | - | | + | | - | ADC.AIN0 | - | - | - | 37 | 38 | - | - | - | 1.8V REF | - | |
- | | - | GND | - | - | - | 39 | 40 | - | - | - | ADC.AIN1 | - | | + | | - | GND | - | - | - | 39 | 40 | - | - | - | ADC.AIN1 | - | |
====== Expansion Connectors (J7) ====== | ====== Expansion Connectors (J7) ====== | ||
- | ^ GPIO ^ Name ^ Mode ^ V ^ PU/PD ^ PIN ^ | + | ^ GPIO ^ Name ^ Mode ^ V ^ PU/PD ^ PIN ^ |
- | | - | GND | - | - | - | 1 | | + | | - | GND | - | - | - | 1 | |
- | | 6 | GPIOAO.6 | IN | 0 | - | 2 | | + | | 6 | GPIOAO.6 | ALT4 | 0 | P/U | 2 | |
- | | - | 5.0V | - | - | - | 3 | | + | | - | 5.0V | - | - | - | 3 | |
- | | 8 | GPIOAO.8 | ALT2 | 0 | P/U | 4 | | + | | 8 | GPIOAO.8 | ALT4 | 1 | P/U | 4 | |
- | | 10 | GPIOAO.10 | ALT2 | 0 | P/U | 5 | | + | | 10 | GPIOAO.10 | ALT4 | 0 | P/U | 5 | |
- | | 9 | GPIOAO.9 | ALT2 | 0 | P/U | 6 | | + | | 9 | GPIOAO.9 | ALT4 | 1 | P/U | 6 | |
- | | 11 | GPIOAO.11 | ALT2 | 0 | P/U | 7 | | + | | 11 | GPIOAO.11 | ALT4 | 0 | P/U | 7 | |
====== GPIO Status Check Program ====== | ====== GPIO Status Check Program ====== | ||
- | <file c gpio_status.c> | + | <file c gpio_status_c2.c> |
//------------------------------------------------------------------------------------------------------------ | //------------------------------------------------------------------------------------------------------------ | ||
// | // | ||
- | // ODROID-C1 GPIO Status Check Application. | + | // ODROID-C2 GPIO Status Check Application. |
// | // | ||
// Compile : gcc -o <create excute file name> <source file name> | // Compile : gcc -o <create excute file name> <source file name> | ||
Line 71: | Line 71: | ||
// MMAP Address for GPIO | // MMAP Address for GPIO | ||
- | #define GPIO_REG_MAP 0xC1108000 | + | // GPIO Banks Control Register Address 0xC8834400 |
+ | #define GPIO_REG_MAP 0xC8834000 | ||
+ | // GPIO AO Control Register Address 0xC8100000 | ||
#define GPIO_AO_REG_MAP 0xC8100000 | #define GPIO_AO_REG_MAP 0xC8100000 | ||
Line 82: | Line 84: | ||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | // refer kernel/arch/arm/mach-meson8b/include/mach/gpio.h | + | // refer kernel/include/dt-bindings/gpio/gxbb.h |
- | #define GPIOAO_PIN_START 0 | + | #define GPIOAO_OFFSET 122 |
- | #define GPIOAO_PIN_END 13 | + | #define GPIOAO_PIN_START (GPIOAO_OFFSET + 0) |
+ | #define GPIOAO_PIN_END (GPIOAO_OFFSET + 13) | ||
#define GPIOAO_FSEL_REG_OFFSET 0x09 | #define GPIOAO_FSEL_REG_OFFSET 0x09 | ||
Line 93: | Line 96: | ||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | #define GPIODV_PIN_START 50 | + | #define GPIO_BANKS_OFFSET 136 |
- | #define GPIODV_PIN_END 79 | + | #define GPIODV_PIN_START (GPIO_BANKS_OFFSET + 45) |
+ | #define GPIODV_PIN_END (GPIO_BANKS_OFFSET + 74) | ||
- | #define GPIODV_FSEL_REG_OFFSET 0x12 | + | #define GPIODV_FSEL_REG_OFFSET 0x10C |
- | #define GPIODV_OUTP_REG_OFFSET 0x13 | + | #define GPIODV_OUTP_REG_OFFSET 0x10D |
- | #define GPIODV_INP_REG_OFFSET 0x14 | + | #define GPIODV_INP_REG_OFFSET 0x10E |
- | #define GPIODV_PUPD_REG_OFFSET 0x3A | + | #define GPIODV_PUPD_REG_OFFSET 0x13A |
- | #define GPIODV_PUEN_REG_OFFSET 0x48 | + | #define GPIODV_PUEN_REG_OFFSET 0x148 |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | #define GPIOY_PIN_START 80 | + | #define GPIOY_PIN_START (GPIO_BANKS_OFFSET + 75) |
- | #define GPIOY_PIN_END 96 | + | #define GPIOY_PIN_END (GPIO_BANKS_OFFSET + 91) |
- | #define GPIOY_FSEL_REG_OFFSET 0x0F | + | #define GPIOY_FSEL_REG_OFFSET 0x10F |
- | #define GPIOY_OUTP_REG_OFFSET 0x10 | + | #define GPIOY_OUTP_REG_OFFSET 0x110 |
- | #define GPIOY_INP_REG_OFFSET 0x11 | + | #define GPIOY_INP_REG_OFFSET 0x111 |
- | #define GPIOY_PUPD_REG_OFFSET 0x3D | + | #define GPIOY_PUPD_REG_OFFSET 0x13D |
- | #define GPIOY_PUEN_REG_OFFSET 0x4B | + | #define GPIOY_PUEN_REG_OFFSET 0x149 |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | #define GPIOX_PIN_START 97 | + | #define GPIOX_PIN_START (GPIO_BANKS_OFFSET + 92) |
- | #define GPIOX_PIN_END 118 | + | #define GPIOX_PIN_END (GPIO_BANKS_OFFSET + 114) |
- | #define GPIOX_FSEL_REG_OFFSET 0x0C | + | #define GPIOX_FSEL_REG_OFFSET 0x118 |
- | #define GPIOX_OUTP_REG_OFFSET 0x0D | + | #define GPIOX_OUTP_REG_OFFSET 0x119 |
- | #define GPIOX_INP_REG_OFFSET 0x0E | + | #define GPIOX_INP_REG_OFFSET 0x11A |
- | #define GPIOX_PUPD_REG_OFFSET 0x3E | + | #define GPIOX_PUPD_REG_OFFSET 0x13E |
- | #define GPIOX_PUEN_REG_OFFSET 0x4C | + | #define GPIOX_PUEN_REG_OFFSET 0x14C |
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | #define MUX_REG0 0x5 // MUX_AO Block | + | // GPIO Banks Pin Mux Control Register Address 0xC88344B0 ~ 0xC88344D4 (REG0 ~ REG9) |
- | #define MUX_REG1 0x2D | + | #define MUX_REG0 0x12C |
- | #define MUX_REG2 0x2E | + | #define MUX_REG1 0x12D |
- | #define MUX_REG3 0x2F | + | #define MUX_REG2 0x12E |
- | #define MUX_REG4 0x30 | + | #define MUX_REG3 0x12F |
- | #define MUX_REG5 0x31 | + | #define MUX_REG4 0x130 |
- | #define MUX_REG6 0x32 | + | #define MUX_REG5 0x131 |
- | #define MUX_REG7 0x33 | + | #define MUX_REG6 0x132 |
- | #define MUX_REG8 0x34 | + | #define MUX_REG7 0x133 |
- | #define MUX_REG9 0x35 | + | #define MUX_REG8 0x134 |
+ | #define MUX_REG9 0x135 | ||
+ | |||
+ | // GPIO AO Pin Mux Control Register Address 0xC8100014/0xC8100018 (AO_REG, A0_REG2) | ||
+ | #define AO_MUX_REG1 0x005 | ||
+ | #define AO_MUX_REG2 0x006 | ||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
Line 138: | Line 147: | ||
//------------------------------------------------------------------------------ | //------------------------------------------------------------------------------ | ||
- | const char MODE_STR[8][5] = { | + | const char MODE_STR[9][5] = { |
" - ", | " - ", | ||
"ALT1", | "ALT1", | ||
Line 145: | Line 154: | ||
"ALT4", | "ALT4", | ||
"ALT5", | "ALT5", | ||
+ | "ALT6", | ||
"IN", | "IN", | ||
"OUT", | "OUT", | ||
Line 165: | Line 175: | ||
const struct header_info header_J2[40] = { | const struct header_info header_J2[40] = { | ||
{ -1, "3.3V" }, { -1, "5.0V" }, | { -1, "3.3V" }, { -1, "5.0V" }, | ||
- | { 74, "I2CA_SDA" }, { -1, "5.0V" }, | + | { 205, "I2CA_SDA" }, { -1, "5.0V" }, |
- | { 75, "I2CA_SCL" }, { -1, "GND" }, | + | { 206, "I2CA_SCL" }, { -1, "GND" }, |
- | { 83, "GPIOY.3" }, { 113, "GPIOX.16" }, | + | { 249, "GPIOX.21" }, { 240, "GPIOX.12" }, |
- | { -1, "GND" }, { 114, "GPIOX.17" }, | + | { -1, "GND" }, { 241, "GPIOX.13" }, |
- | { 88, "GPIOY.8" }, { 87, "GPIOY.7" }, | + | { 247, "GPIOX.19" }, { 238, "GPIOX.10" }, |
- | { 116, "GPIOX.19" }, { -1, "GND" }, | + | { 239, "GPIOX.11" }, { -1, "GND" }, |
- | { 115, "GPIOX.18" }, { 104, "GPIOX.7" }, | + | { 237, "GPIOX.9" }, { 236, "GPIOX.8" }, |
- | { -1, "3.3V" }, { 102, "GPIOX.5" }, | + | { -1, "3.3V" }, { 233, "GPIOX.5" }, |
- | { 107, "GPIOX.10" }, { -1, "GND" }, | + | { 235, "GPIOX.7" }, { -1, "GND" }, |
- | { 106, "GPIOX.9" }, { 103, "GPIOX.6" }, | + | { 232, "GPIOX.4" }, { 231, "GPIOX.3" }, |
- | { 105, "GPIOX.8" }, { 117, "GPIOX.20" }, | + | { 230, "GPIOX.2" }, { 229, "GPIOX.1" }, |
- | { -1, "GND" }, { 118, "GPIOX.21" }, | + | { -1, "GND" }, { 225, "GPIOY.14" }, |
- | { 76, "I2CB_SDA" }, { 77, "I2CB_SCL" }, | + | { 207, "I2CB_SDA" }, { 208, "I2CB_SCL" }, |
- | { 101, "GPIOX.4" }, { -1, "GND" }, | + | { 228, "GPIOX.0" }, { -1, "GND" }, |
- | { 100, "GPIOX.3" }, { 99, "GPIOX.2" }, | + | { 219, "GPIOY.8" }, { 224, "GPIOY.13" }, |
- | { 108, "GPIOX.11" }, { -1, "GND" }, | + | { 234, "GPIOX.6" }, { -1, "GND" }, |
- | { 97, "GPIOX.0" }, { 98, "GPIOX.1" }, | + | { 214, "GPIOY.3" }, { 218, "GPIOY.7" }, |
{ -1, "ADC.AIN0" }, { -1, "1.8V REF" }, | { -1, "ADC.AIN0" }, { -1, "1.8V REF" }, | ||
{ -1, "GND" }, { -1, "ADC.AIN1" }, | { -1, "GND" }, { -1, "ADC.AIN1" }, | ||
Line 189: | Line 199: | ||
const struct header_info header_J7[7] = { | const struct header_info header_J7[7] = { | ||
{ -1, "GND" }, | { -1, "GND" }, | ||
- | { 6, "GPIOAO.6" }, | + | { 128, "GPIOAO.6" }, |
{ -1, "5.0V" }, | { -1, "5.0V" }, | ||
- | { 8, "GPIOAO.8" }, | + | { 130, "GPIOAO.8" }, |
- | { 10, "GPIOAO.10" }, | + | { 132, "GPIOAO.10" }, |
- | { 9, "GPIOAO.9" }, | + | { 131, "GPIOAO.9" }, |
- | { 11, "GPIOAO.11" }, | + | { 133, "GPIOAO.11" }, |
}; | }; | ||
Line 203: | Line 213: | ||
case 0: | case 0: | ||
if (*(gpio + MUX_REG8) & BIT(5)) return 1; | if (*(gpio + MUX_REG8) & BIT(5)) return 1; | ||
- | if (*(gpio + MUX_REG5) & BIT(14)) return 2; | ||
break; | break; | ||
case 1: | case 1: | ||
if (*(gpio + MUX_REG8) & BIT(4)) return 1; | if (*(gpio + MUX_REG8) & BIT(4)) return 1; | ||
- | if (*(gpio + MUX_REG5) & BIT(13)) return 2; | ||
break; | break; | ||
case 2: | case 2: | ||
if (*(gpio + MUX_REG8) & BIT(3)) return 1; | if (*(gpio + MUX_REG8) & BIT(3)) return 1; | ||
- | if (*(gpio + MUX_REG5) & BIT(13)) return 2; | ||
break; | break; | ||
case 3: | case 3: | ||
if (*(gpio + MUX_REG8) & BIT(2)) return 1; | if (*(gpio + MUX_REG8) & BIT(2)) return 1; | ||
- | if (*(gpio + MUX_REG5) & BIT(13)) return 2; | ||
break; | break; | ||
case 4: | case 4: | ||
- | if ((*(gpio + MUX_REG5) & BIT(29)) && (*(gpio + MUX_REG5) & BIT(12))) | + | if (*(gpio + MUX_REG8) & BIT(1)) return 1; |
- | return 1; | + | |
- | if (*(gpio + MUX_REG3) & BIT(30)) return 2; | + | |
- | if (*(gpio + MUX_REG4) & BIT(17)) return 3; | + | |
break; | break; | ||
case 5: | case 5: | ||
- | if ((*(gpio + MUX_REG5) & BIT(28)) && (*(gpio + MUX_REG5) & BIT(12))) | + | if (*(gpio + MUX_REG8) & BIT(0)) return 1; |
- | return 1; | + | |
- | if (*(gpio + MUX_REG3) & BIT(29)) return 2; | + | |
- | if (*(gpio + MUX_REG4) & BIT(16)) return 3; | + | |
break; | break; | ||
case 6: | case 6: | ||
- | if ((*(gpio + MUX_REG5) & BIT(28)) && (*(gpio + MUX_REG5) & BIT(12))) | + | if (*(gpio + MUX_REG3) & BIT(9)) return 4; |
- | return 1; | + | if (*(gpio + MUX_REG3) & BIT(17)) return 5; |
- | if (*(gpio + MUX_REG3) & BIT(27)) return 2; | + | |
- | if (*(gpio + MUX_REG4) & BIT(15)) return 3; | + | |
- | if (*(gpio + MUX_REG5) & BIT(9)) return 4; | + | |
break; | break; | ||
case 7: | case 7: | ||
- | if ((*(gpio + MUX_REG5) & BIT(28)) && (*(gpio + MUX_REG5) & BIT(12))) | + | if (*(gpio + MUX_REG8) & BIT(11)) return 1; |
- | return 1; | + | if (*(gpio + MUX_REG3) & BIT(8)) return 4; |
- | if (*(gpio + MUX_REG3) & BIT(27)) return 2; | + | if (*(gpio + MUX_REG3) & BIT(18)) return 5; |
- | if (*(gpio + MUX_REG4) & BIT(14)) return 3; | + | |
- | if (*(gpio + MUX_REG5) & BIT(8)) return 4; | + | |
break; | break; | ||
case 8: | case 8: | ||
- | if (*(gpio + MUX_REG8) & BIT(1)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(7)) return 1; |
- | if (*(gpio + MUX_REG5) & BIT(11)) return 2; | + | if (*(gpio + MUX_REG3) & BIT(30)) return 3; |
- | if (*(gpio + MUX_REG6) & BIT(19)) return 3; | + | if (*(gpio + MUX_REG3) & BIT(10)) return 4; |
- | if (*(gpio + MUX_REG4) & BIT(22)) return 4; | + | |
- | if (*(gpio + MUX_REG3) & BIT(6)) return 5; | + | |
break; | break; | ||
case 9: | case 9: | ||
- | if (*(gpio + MUX_REG8) & BIT(0)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(6)) return 1; |
- | if (*(gpio + MUX_REG5) & BIT(10)) return 2; | + | if (*(gpio + MUX_REG3) & BIT(29)) return 3; |
- | if (*(gpio + MUX_REG6) & BIT(18)) return 3; | + | if (*(gpio + MUX_REG3) & BIT(7)) return 4; |
- | if (*(gpio + MUX_REG4) & BIT(24)) return 4; | + | |
- | if (*(gpio + MUX_REG3) & BIT(6)) return 5; | + | |
break; | break; | ||
case 10: | case 10: | ||
- | if (*(gpio + MUX_REG3) & BIT(22)) return 1; | + | if (*(gpio + MUX_REG3) & BIT(28)) return 3; |
- | if ((*(gpio + MUX_REG7) & BIT(31)) && (*(gpio + MUX_REG9) & BIT(19))) | + | |
- | return 2; | + | |
- | if (*(gpio + MUX_REG6) & BIT(17)) return 3; | + | |
- | if (*(gpio + MUX_REG4) & BIT(23)) return 4; | + | |
- | if (*(gpio + MUX_REG3) & BIT(8)) return 5; | + | |
break; | break; | ||
case 11: | case 11: | ||
- | if (*(gpio + MUX_REG3) & BIT(20)) return 1; | + | if (*(gpio + MUX_REG3) & BIT(27)) return 3; |
- | if (*(gpio + MUX_REG7) & BIT(30)) return 2; | + | |
- | if (*(gpio + MUX_REG2) & BIT(3)) return 5; | + | |
break; | break; | ||
- | case 16: | + | case 12: |
- | if (*(gpio + MUX_REG4) & BIT(9)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(13)) return 2; |
- | if (*(gpio + MUX_REG4) & BIT(21)) return 4; | + | if (*(gpio + MUX_REG4) & BIT(17)) return 3; |
- | if (*(gpio + MUX_REG4) & BIT(5)) return 5; | + | |
break; | break; | ||
- | case 17: | + | case 13: |
- | if (*(gpio + MUX_REG4) & BIT(8)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(12)) return 2; |
- | if (*(gpio + MUX_REG4) & BIT(20)) return 4; | + | if (*(gpio + MUX_REG4) & BIT(16)) return 3; |
- | if (*(gpio + MUX_REG4) & BIT(4)) return 5; | + | |
break; | break; | ||
- | case 18: | + | case 14: |
- | if (*(gpio + MUX_REG4) & BIT(7)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(11)) return 2; |
- | if (*(gpio + MUX_REG4) & BIT(19)) return 4; | + | if (*(gpio + MUX_REG4) & BIT(15)) return 3; |
break; | break; | ||
- | case 19: | + | case 15: |
- | if (*(gpio + MUX_REG4) & BIT(6)) return 1; | + | if (*(gpio + MUX_REG4) & BIT(10)) return 2; |
- | if (*(gpio + MUX_REG4) & BIT(18)) return 4; | + | if (*(gpio + MUX_REG4) & BIT(14)) return 3; |
break; | break; | ||
- | case 20: | + | case 19: |
- | if (*(gpio + MUX_REG6) & BIT(16)) return 3; | + | if (*(gpio + MUX_REG2) & BIT(22)) return 2; |
- | if (*(gpio + MUX_REG4) & BIT(25)) return 4; | + | if (*(gpio + MUX_REG2) & BIT(30)) return 5; |
- | if (*(gpio + MUX_REG3) & BIT(9)) return 5; | + | |
break; | break; | ||
- | case 21: | + | case 20: case 21: |
break; | break; | ||
default : | default : | ||
return 0; | return 0; | ||
} | } | ||
- | return *(gpio + GPIOX_FSEL_REG_OFFSET) & BIT(pin) ? 6 : 7; | + | return *(gpio + GPIOX_FSEL_REG_OFFSET) & BIT(pin) ? 7 : 8; |
} | } | ||
Line 306: | Line 287: | ||
switch(pin) { | switch(pin) { | ||
case 0: | case 0: | ||
- | if (*(gpio + MUX_REG3) & BIT(2)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(19)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(2)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(0)) return 5; | ||
break; | break; | ||
case 1: | case 1: | ||
- | if (*(gpio + MUX_REG3) & BIT(1)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(18)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(1)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(1)) return 5; | ||
+ | break; | ||
+ | case 2: | ||
+ | if (*(gpio + MUX_REG2) & BIT(17)) return 1; | ||
+ | if (*(gpio + MUX_REG3) & BIT(0)) return 2; | ||
break; | break; | ||
case 3: | case 3: | ||
- | if (*(gpio + MUX_REG1) & BIT(7)) return 2; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
- | if (*(gpio + MUX_REG3) & BIT(18)) return 3; | + | if (*(gpio + MUX_REG3) & BIT(4)) return 2; |
+ | if (*(gpio + MUX_REG1) & BIT(2)) return 5; | ||
+ | break; | ||
+ | case 4: | ||
+ | if (*(gpio + MUX_REG2) & BIT(16)) return 1; | ||
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(12)) return 4; | ||
+ | break; | ||
+ | case 5: | ||
+ | if (*(gpio + MUX_REG2) & BIT(16)) return 1; | ||
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(13)) return 4; | ||
break; | break; | ||
case 6: | case 6: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(3)) return 5; | ||
break; | break; | ||
case 7: | case 7: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(4)) return 5; | ||
break; | break; | ||
case 8: | case 8: | ||
- | if (*(gpio + MUX_REG3) & BIT(0)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(5)) return 5; | ||
break; | break; | ||
case 9: | case 9: | ||
- | if (*(gpio + MUX_REG3) & BIT(4)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(6)) return 5; | ||
break; | break; | ||
case 10: | case 10: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG2) & BIT(16)) return 1; |
+ | if (*(gpio + MUX_REG3) & BIT(5)) return 2; | ||
+ | if (*(gpio + MUX_REG1) & BIT(7)) return 5; | ||
break; | break; | ||
case 11: | case 11: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG3) & BIT(3)) return 2; |
+ | if (*(gpio + MUX_REG1) & BIT(19)) return 3; | ||
+ | if (*(gpio + MUX_REG1) & BIT(8)) return 5; | ||
break; | break; | ||
case 12: | case 12: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG1) & BIT(18)) return 3; |
+ | if (*(gpio + MUX_REG1) & BIT(9)) return 5; | ||
break; | break; | ||
case 13: | case 13: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG1) & BIT(17)) return 3; |
- | if (*(gpio + MUX_REG5) & BIT(7)) return 3; | + | if (*(gpio + MUX_REG1) & BIT(10)) return 5; |
break; | break; | ||
case 14: | case 14: | ||
- | if (*(gpio + MUX_REG3) & BIT(5)) return 1; | + | if (*(gpio + MUX_REG1) & BIT(16)) return 3; |
- | if (*(gpio + MUX_REG5) & BIT(6)) return 3; | + | if (*(gpio + MUX_REG1) & BIT(11)) return 5; |
+ | break; | ||
+ | case 15: | ||
+ | if (*(gpio + MUX_REG2) & BIT(20)) return 1; | ||
+ | if (*(gpio + MUX_REG1) & BIT(20)) return 4; | ||
+ | if (*(gpio + MUX_REG1) & BIT(22)) return 5; | ||
+ | break; | ||
+ | case 16: | ||
+ | if (*(gpio + MUX_REG2) & BIT(21)) return 1; | ||
+ | if (*(gpio + MUX_REG1) & BIT(21)) return 4; | ||
break; | break; | ||
default : | default : | ||
return 0; | return 0; | ||
} | } | ||
- | return *(gpio + GPIOY_FSEL_REG_OFFSET) & BIT(pin) ? 6 : 7; | + | return *(gpio + GPIOY_FSEL_REG_OFFSET) & BIT(pin) ? 7 : 8; |
} | } | ||
Line 355: | Line 377: | ||
switch(pin) { | switch(pin) { | ||
case 24: | case 24: | ||
- | if (*(gpio + MUX_REG6) & BIT(23)) return 4; | + | if (*(gpio + MUX_REG0) & BIT(7)) return 1; |
- | if (*(gpio + MUX_REG9) & BIT(31)) return 5; | + | if (*(gpio + MUX_REG0) & BIT(12)) return 2; |
+ | if (*(gpio + MUX_REG5) & BIT(12)) return 3; | ||
+ | if (*(gpio + MUX_REG2) & BIT(29)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(26)) return 6; | ||
break; | break; | ||
case 25: | case 25: | ||
- | if (*(gpio + MUX_REG6) & BIT(22)) return 4; | + | if (*(gpio + MUX_REG0) & BIT(6)) return 1; |
- | if (*(gpio + MUX_REG9) & BIT(30)) return 5; | + | if (*(gpio + MUX_REG0) & BIT(11)) return 2; |
+ | if (*(gpio + MUX_REG5) & BIT(11)) return 3; | ||
+ | if (*(gpio + MUX_REG2) & BIT(28)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(27)) return 6; | ||
break; | break; | ||
case 26: | case 26: | ||
- | if (*(gpio + MUX_REG6) & BIT(21)) return 4; | + | if (*(gpio + MUX_REG0) & BIT(10)) return 2; |
- | if (*(gpio + MUX_REG9) & BIT(29)) return 5; | + | if (*(gpio + MUX_REG5) & BIT(10)) return 3; |
+ | if (*(gpio + MUX_REG2) & BIT(27)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(24)) return 6; | ||
break; | break; | ||
case 27: | case 27: | ||
- | if (*(gpio + MUX_REG6) & BIT(20)) return 4; | + | if (*(gpio + MUX_REG0) & BIT(9)) return 2; |
- | if (*(gpio + MUX_REG9) & BIT(28)) return 5; | + | if (*(gpio + MUX_REG5) & BIT(9)) return 3; |
+ | if (*(gpio + MUX_REG5) & BIT(8)) return 4; | ||
+ | if (*(gpio + MUX_REG2) & BIT(26)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(25)) return 6; | ||
+ | break; | ||
+ | case 28: | ||
+ | if (*(gpio + MUX_REG3) & BIT(20)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(22)) return 6; | ||
+ | break; | ||
+ | case 29: | ||
+ | if (*(gpio + MUX_REG3) & BIT(22)) return 4; | ||
+ | if (*(gpio + MUX_REG3) & BIT(21)) return 5; | ||
+ | if (*(gpio + MUX_REG7) & BIT(23)) return 6; | ||
break; | break; | ||
default : | default : | ||
return 0; | return 0; | ||
} | } | ||
- | return *(gpio + GPIODV_FSEL_REG_OFFSET) & BIT(pin) ? 6 : 7; | + | return *(gpio + GPIODV_FSEL_REG_OFFSET) & BIT(pin) ? 7 : 8; |
} | } | ||
Line 381: | Line 423: | ||
switch(pin) { | switch(pin) { | ||
case 0: | case 0: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(12)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(12)) return 1; |
- | if (*(gpio_ao + MUX_REG0) & BIT(26)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(26)) return 2; |
break; | break; | ||
case 1: | case 1: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(11)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(11)) return 1; |
- | if (*(gpio_ao + MUX_REG0) & BIT(25)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(25)) return 2; |
break; | break; | ||
case 2: | case 2: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(10)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(10)) return 1; |
- | if (*(gpio_ao + MUX_REG0) & BIT(8)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(8)) return 2; |
break; | break; | ||
case 3: | case 3: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(9)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(9)) return 1; |
- | if (*(gpio_ao + MUX_REG0) & BIT(22)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(7)) return 2; |
- | if (*(gpio_ao + MUX_REG0) & BIT(7)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(22)) return 3; |
break; | break; | ||
case 4: | case 4: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(6)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(24)) return 2; |
- | if (*(gpio_ao + MUX_REG0) & BIT(2)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(6)) return 3; |
- | if (*(gpio_ao + MUX_REG0) & BIT(24)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(2)) return 4; |
break; | break; | ||
case 5: | case 5: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(5)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(25)) return 2; |
- | if (*(gpio_ao + MUX_REG0) & BIT(1)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(5)) return 3; |
- | if (*(gpio_ao + MUX_REG0) & BIT(23)) return 3; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(1)) return 4; |
break; | break; | ||
case 6: | case 6: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(18)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(18)) return 3; |
- | if (*(gpio_ao + MUX_REG0) & BIT(16)) return 4; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(16)) return 4; |
- | if (*(gpio + MUX_REG1) & BIT(13)) return 5; | + | return 2; |
- | break; | + | |
case 7: | case 7: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(0)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(0)) return 1; |
- | if (*(gpio_ao + MUX_REG0) & BIT(21)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(21)) return 2; |
break; | break; | ||
case 8: | case 8: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(30)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(30)) return 4; |
- | return 1; | + | return 3; |
case 9: | case 9: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(29)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(29)) return 4; |
- | if (*(gpio + MUX_REG1) & BIT(15)) return 5; | + | return 2; |
- | return 1; | + | |
case 10: | case 10: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(28)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(28)) return 4; |
- | if (*(gpio + MUX_REG1) & BIT(14)) return 5; | + | return 2; |
- | return 1; | + | |
case 11: | case 11: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(27)) return 2; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(27)) return 4; |
- | return 1; | + | return 3; |
case 12: | case 12: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(17)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(15)) return 1; |
+ | if (*(gpio_ao + AO_MUX_REG1) & BIT(14)) return 2; | ||
+ | if (*(gpio_ao + AO_MUX_REG1) & BIT(17)) return 3; | ||
+ | if (*(gpio_ao + AO_MUX_REG2) & BIT(0)) return 4; | ||
break; | break; | ||
case 13: | case 13: | ||
- | if (*(gpio_ao + MUX_REG0) & BIT(31)) return 1; | + | if (*(gpio_ao + AO_MUX_REG1) & BIT(31)) return 1; |
+ | if (*(gpio_ao + AO_MUX_REG1) & BIT(4)) return 2; | ||
+ | if (*(gpio_ao + AO_MUX_REG1) & BIT(3)) return 3; | ||
+ | if (*(gpio_ao + AO_MUX_REG2) & BIT(1)) return 4; | ||
break; | break; | ||
default : | default : | ||
return 0; | return 0; | ||
} | } | ||
- | return *(gpio_ao + GPIOAO_FSEL_REG_OFFSET) & BIT(pin) ? 6 : 7; | + | return *(gpio_ao + GPIOAO_FSEL_REG_OFFSET) & BIT(pin) ? 7 : 8; |
} | } | ||
Line 619: | Line 664: | ||
//------------------------------------------------------------------------------------------------------------ | //------------------------------------------------------------------------------------------------------------ | ||
+ | //------------------------------------------------------------------------------------------------------------ | ||
</file> | </file> | ||