2023-08-11 15:53:17 +08:00
# include "wiringPi.h"
# include <stdio.h>
# include <stdint.h>
# include <string.h>
# include <unistd.h>
# include <fcntl.h>
# include "OrangePi.h"
# include <stdarg.h>
# include <stdlib.h>
# include <ctype.h>
# include <poll.h>
# include <errno.h>
# include <time.h>
# include <pthread.h>
# include <sys/time.h>
# include <sys/mman.h>
# include <sys/stat.h>
# include <sys/wait.h>
# include <sys/ioctl.h>
# include <limits.h>
# include "softPwm.h"
# include "softTone.h"
# ifdef CONFIG_ORANGEPI
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
70 , 37 , // 0, 1
14 , 15 , // 2, 3
69 , 89 , // 4 5
16 , 56 , // 6, 7
62 , 63 , // 8, 9
5 , 6 , //10,11
4 , 3 , //12,13
2 , 72 , //14,15
71 , - 1 , //16,17
- 1 , - 1 , //18,19
- 1 , 90 , //20,21
91 , 92 , //22,23
93 , 94 , //24,25
41 , 40 , //26,27
38 , 39 , //28,29
1 , 0 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
62 , - 1 , // 3, 4
63 , - 1 , // 5, 6
56 , 72 , // 7, 8
- 1 , 71 , // 9, 10
70 , 37 , // 11, 12
14 , - 1 , // 13, 14
15 , 69 , // 15, 16
- 1 , 89 , // 17, 18
4 , - 1 , // 19, 20
3 , 16 , // 21, 22
2 , 5 , // 23, 24
- 1 , 6 , // 25, 26
1 , 0 , // 27, 28
90 , - 1 , // 29, 30
91 , 41 , // 31, 32
92 , - 1 , // 33, 34
93 , 40 , // 35, 36
94 , 38 , // 37, 38
- 1 , 39 , // 39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
8 , - 1 , //3, 4
9 , - 1 , //5, 6
7 , 15 , //7, 8
- 1 , 16 , //9,10
0 , 1 , //11,12
2 , - 1 , //13,14
3 , 4 , //15,16
- 1 , 5 , //17,18
12 , - 1 , //19,20
13 , 6 , //21,22
14 , 10 , //23, 24
- 1 , 11 , // 25, 26
30 , 31 , //27, 28
21 , - 1 , //29, 30
22 , 26 , //31, 32
23 , - 1 , //33, 34
24 , 27 , //35, 36
25 , 28 , //37, 38
- 1 , 29 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
int ORANGEPI_PIN_MASK [ 4 ] [ 32 ] = //[BANK] [INDEX]
{
2023-11-30 12:50:07 +08:00
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PA
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PB
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PC
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
2023-08-11 15:53:17 +08:00
} ;
# endif /* CONFIG_ORANGEPI_2G_IOT */
# ifdef CONFIG_ORANGEPI_PRIME
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , // 0, 1
6 , 69 , // 2, 3
70 , 1 , // 4 5
110 , 0 , // 6, 7
3 , 68 , // 8, 9
71 , 15 , //10,11
16 , 2 , //12,13
14 , 13 , //14,15
72 , 19 , //16,17
18 , 7 , //18,19
8 , 73 , //20,21
9 , 10 , //22,23
74 , 107 , //24,25
75 , 76 , //26,27
- 1 , - 1 , //28, 29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 , // 3, 4
11 , - 1 , // 5, 6
6 , 69 , // 7, 8
- 1 , 70 , // 9, 10
1 , 110 , //11, 12
0 , - 1 , //13, 14
3 , 68 , //15, 16
- 1 , 71 , //17, 18
15 , - 1 , //19, 20
16 , 2 , //21, 22
14 , 13 , //23, 24
- 1 , 72 , //25, 26
19 , 18 , //27, 28
7 , - 1 , //29, 30
8 , 73 , //31, 32
9 , - 1 , //33, 34
10 , 74 , //35, 36
107 , 75 , //37, 38
- 1 , 76 , //39, 40
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , //41-> 55
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 // 56-> 63
} ;
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
17 , 18 , //27, 28
19 , - 1 , //29, 30
20 , 21 , //31, 32
22 , - 1 , //33, 34
23 , 24 , //35, 36
25 , 26 , //37, 38
- 1 , 27 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
int ORANGEPI_PIN_MASK [ 9 ] [ 32 ] = //[BANK] [INDEX]
{
2023-11-30 12:50:07 +08:00
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 11 , - 1 , - 1 , 14 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
2023-08-11 15:53:17 +08:00
} ;
# endif /* PRIME */
# ifdef CONFIG_ORANGEPI_PC2
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , // 0, 1
6 , 69 , // 2, 3
70 , 1 , // 4 5
110 , 0 , // 6, 7
3 , 68 , // 8, 9
71 , 15 , //10,11
16 , 2 , //12,13
14 , 13 , //14,15
21 , 19 , //16,17
18 , 7 , //18,19
8 , 200 , //20,21
9 , 10 , //22,23
201 , 107 , //24,25
198 , 199 , //26,27
- 1 , - 1 , //28, 29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 , // 3, 4
11 , - 1 , // 5, 6
6 , 69 , // 7, 8
- 1 , 70 , // 9, 10
1 , 110 , //11, 12
0 , - 1 , //13, 14
3 , 68 , //15, 16
- 1 , 71 , //17, 18
15 , - 1 , //19, 20
16 , 2 , //21, 22
14 , 13 , //23, 24
- 1 , 21 , //25, 26
19 , 18 , //27, 28
7 , - 1 , //29, 30
8 , 200 , //31, 32
9 , - 1 , //33, 34
10 , 201 , //35, 36
107 , 198 , //37, 38
- 1 , 199 , //39, 40
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , //41-> 55
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 // 56-> 63
} ;
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
17 , 18 , //27, 28
19 , - 1 , //29, 30
20 , 21 , //31, 32
22 , - 1 , //33, 34
23 , 24 , //35, 36
25 , 26 , //37, 38
- 1 , 27 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
int ORANGEPI_PIN_MASK [ 9 ] [ 32 ] = //[BANK] [INDEX]
{
2023-11-30 12:50:07 +08:00
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , - 1 , 21 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , 4 , 5 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 11 , - 1 , - 1 , 14 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , 8 , 9 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
2023-08-11 15:53:17 +08:00
} ;
# endif /* PC2 */
# ifdef CONFIG_ORANGEPI_ZEROPLUS
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , 6 , 198 , 199 , 1 , 7 , 0 , 3 , // From the Original Wiki - GPIO 0 through 7: wpi 0 - 7
19 , 18 , // I2C - SDA0, SCL0 wpi 8 - 9
15 , 16 , // SPI - CE1, CE0 wpi 10 - 11
2 , 14 , 13 , // SPI - MOSI, MISO, SCLK wpi 12 - 14
10 , - 1 , // UART - Tx, Rx wpi 15 - 16
- 1 , - 1 , - 1 , - 1 , // Rev 2: New GPIOs 8 though 11 wpi 17 - 20
- 1 , - 1 , - 1 , - 1 , - 1 , // B+ wpi 21, 22, 23, 24, 25
- 1 , - 1 , // wpi 26, 27
- 1 , - 1 , //PA4, PA5(PWM0) wpi 28, 29
- 1 , - 1 , // B+ wpi 30, 31
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 ,
11 , - 1 ,
6 , 198 ,
- 1 , 199 ,
1 , 7 ,
0 , - 1 ,
3 , 19 ,
- 1 , 18 ,
15 , - 1 ,
16 , 2 ,
14 , 13 ,
- 1 , 10 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
- 1 , - 1 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
- 1 , - 1 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , 7 , - 1 , - 1 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PL
2023-08-11 15:53:17 +08:00
} ;
# endif /* ZEROPLUS */
# ifdef CONFIG_ORANGEPI_WIN
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
227 , 226 , // 0, 1
362 , 354 , // 2, 3
355 , 229 , // 4 5
100 , 228 , // 6, 7
231 , 361 , // 8, 9
68 , 98 , //10,11
99 , 230 , //12,13
97 , 96 , //14,15
102 , 143 , //16,17
142 , 36 , //18,19
37 , 34 , //20,21
38 , 39 , //22,23
35 , 101 , //24,25
32 , 33 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
227 , - 1 , // 3, 4
226 , - 1 , // 5, 6
362 , 354 , // 7, 8
- 1 , 355 , // 9, 10
229 , 100 , //11, 12
228 , - 1 , //13, 14
231 , 361 , //15, 16
- 1 , 68 , //17, 18
98 , - 1 , //19, 20
99 , 230 , //21, 22
97 , 96 , //23, 24
- 1 , 102 , //25, 26
143 , 142 , //27, 28
36 , - 1 , //29, 30
37 , 34 , //31, 32
38 , - 1 , //33, 34
39 , 35 , //35, 36
101 , 32 , //37, 38
- 1 , 33 , //39, 40
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , //41-> 55
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 // 56-> 63
} ;
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , // 3, 4
1 , - 1 , // 5, 6
2 , 3 , // 7, 8
- 1 , 4 , // 9, 10
5 , 6 , //11, 12
7 , - 1 , //13, 14
8 , 9 , //15, 16
- 1 , 10 , //17, 18
11 , - 1 , //19, 20
12 , 13 , //21, 22
14 , 15 , //23, 24
- 1 , 16 , //25, 26
17 , 18 , //27, 28
19 , - 1 , //29, 30
20 , 21 , //31, 32
22 , - 1 , //33, 34
23 , 24 , //35, 36
25 , 26 , //37, 38
- 1 , 27 , //39, 40
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , //41-> 55
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 // 56-> 63
} ;
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , 20 , 21 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , - 1 , - 1 , - 1 , - 1 , 11 , - 1 , - 1 , 14 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 14 , 15 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , 8 , 9 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , 2 , 3 , 4 , 5 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , 2 , 3 , - 1 , - 1 , - 1 , - 1 , - 1 , 9 , 10 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PL
2023-08-11 15:53:17 +08:00
} ;
# endif
# ifdef CONFIG_ORANGEPI_H3
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , 6 , 13 , 14 , 1 , 110 , 0 , // From the Original Wiki - GPIO 0 through 7: wpi 0 - 7
3 , 68 , // I2C - SDA0, SCL0 wpi 8 - 9
71 , 64 , // SPI - CE1, CE0 wpi 10 - 11
65 , 2 , 66 , // SPI - MOSI, MISO, SCLK wpi 12 - 14
67 , 21 , // UART - Tx, Rx wpi 15 - 16
19 , 18 , 7 , 8 , // Rev 2: New GPIOs 8 though 11 wpi 17 - 20
200 , 9 , 10 , 201 , 20 , // B+ wpi 21, 22, 23, 24, 25
198 , 199 , // wpi 26, 27
- 1 , - 1 , //PA4, PA5(PWM0) wpi 28, 29
- 1 , - 1 , // B+ wpi 30, 31
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 ,
11 , - 1 ,
6 , 13 ,
- 1 , 14 ,
1 , 110 ,
0 , - 1 ,
3 , 68 ,
- 1 , 71 ,
64 , - 1 ,
65 , 2 ,
66 , 67 ,
- 1 , 21 , // 25, 26
19 , 18 , //27, 28
7 , - 1 , //29, 30
8 , 200 , //31, 32
9 , - 1 , //33, 34
10 , 201 , //35, 36
20 , 198 , //37, 38
- 1 , 199 , //39, 40
4 , 5 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
17 , 18 , //27, 28
19 , - 1 , //29, 30
20 , 21 , //31, 32
22 , - 1 , //33, 34
23 , 24 , //35, 36
25 , 26 , //37, 38
- 1 , 27 , //39, 40
28 , 29 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
int ORANGEPI_PIN_MASK [ 9 ] [ 32 ] = //[BANK] [INDEX]
{
2023-11-30 12:50:07 +08:00
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , - 1 , - 1 , - 1 , 18 , 19 , 20 , 21 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ 0 , 1 , 2 , 3 , 4 , - 1 , - 1 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 14 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , 8 , 9 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
2023-08-11 15:53:17 +08:00
} ;
# endif
# if CONFIG_ORANGEPI_ZEROPLUS2_H3 || CONFIG_ORANGEPI_ZEROPLUS2_H5
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , 6 , 0 , 1 , 352 , 107 , 353 , 3 , // From the Original Wiki - GPIO 0 through 7: wpi 0 - 7
19 , 18 , // I2C - SDA0, SCL0 wpi 8 - 9
15 , 16 , // SPI - CE1, CE0 wpi 10 - 11
2 , 14 , 13 , // SPI - MOSI, MISO, SCLK wpi 12 - 14
110 , - 1 , // UART - Tx, Rx wpi 15 - 16
- 1 , - 1 , - 1 , - 1 , // Rev 2: New GPIOs 8 though 11 wpi 17 - 20
- 1 , - 1 , - 1 , - 1 , - 1 , // B+ wpi 21, 22, 23, 24, 25
- 1 , - 1 , // wpi 26, 27
- 1 , - 1 , //PA4, PA5(PWM0) wpi 28, 29
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 ,
11 , - 1 ,
6 , 0 ,
- 1 , 1 ,
352 , 107 ,
353 , - 1 ,
3 , 19 ,
- 1 , 18 ,
15 , - 1 ,
16 , 2 ,
14 , 13 ,
- 1 , 110 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
- 1 , - 1 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
- 1 , - 1 , //41, 42
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , - 1 , - 1 , - 1 , - 1 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 11 , - 1 , - 1 , 14 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ 0 , 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PL
2023-08-11 15:53:17 +08:00
} ;
# endif
# ifdef CONFIG_ORANGEPI_ZERO
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
12 , 11 , 6 , 198 , 199 , 1 , 7 , 0 , // From the Original Wiki - GPIO 0 through 7: wpi 0 - 7
3 , 19 , // I2C - SDA0, SCL0 wpi 8 - 9
18 , 15 , // SPI - CE1, CE0 wpi 10 - 11
16 , 2 , 14 , // SPI - MOSI, MISO, SCLK wpi 12 - 14
13 , 10 , // UART - Tx, Rx wpi 15 - 16
- 1 , - 1 , - 1 , - 1 , // Rev 2: New GPIOs 8 though 11 wpi 17 - 20
- 1 , - 1 , - 1 , - 1 , - 1 , // B+ wpi 21, 22, 23, 24, 25
- 1 , - 1 , - 1 , - 1 , // B+ wpi 26, 27, 28, 29
- 1 , 1 , // B+ wpi 30, 31
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
12 , - 1 ,
11 , - 1 ,
6 , 198 ,
- 1 , 199 ,
1 , 7 ,
0 , - 1 ,
3 , 19 ,
- 1 , 18 ,
15 , - 1 ,
16 , 2 ,
14 , 13 ,
- 1 , 10 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
//
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ 0 , 1 , 2 , 3 , - 1 , - 1 , 6 , 7 , - 1 , - 1 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , 18 , 19 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PL
2023-08-11 15:53:17 +08:00
} ;
# endif
# ifdef CONFIG_ORANGEPI_LITE2
//pinToGpioR3 is for OrangePi H6 Lite2/OnePlus
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
230 , 229 ,
228 , 117 , 118 ,
120 , 73 , 119 , 122 , 72 , 71 ,
66 , 67 , 121 , 64 , 69 , 227 ,
// 71, 72, 73, 117, 118, 227, //GPIO 0 through 6: wpi 0 - 5
// 229, 230, // I2C1 - SCL1, SDA1 wpi 6 - 7
// 228, // PWM1 wpi 8
// 119, 120, 121, 122, // UART3 - Tx3, Rx3, RTS3, CTS3 wpi 9 - 12
// 64, 66, 67, 69, // SPI0 - SCLK, MOSI, MISO, CS wpi 13 - 16
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
// Padding:
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
//physToGpioR3 is for OrangePi H6 Lite2/OnePlus
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
230 , - 1 ,
229 , - 1 ,
228 , 117 ,
2023-08-11 15:53:17 +08:00
- 1 , 118 ,
2023-11-30 12:50:07 +08:00
120 , 73 ,
119 , - 1 ,
122 , 72 ,
2023-08-11 15:53:17 +08:00
- 1 , 71 ,
66 , - 1 ,
67 , 121 ,
64 , 69 ,
2023-11-30 12:50:07 +08:00
- 1 , 227 , // 25, 26
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 ,
1 , - 1 ,
2 , 3 , //7, 8
- 1 , 4 ,
5 , 6 , //11, 12
7 , - 1 ,
8 , 9 , //15, 16
- 1 , 10 ,
11 , - 1 , //19, 20
12 , 13 ,
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
2023-08-11 15:53:17 +08:00
{
2023-11-30 12:50:07 +08:00
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ 0 , - 1 , 2 , 3 , - 1 , 5 , - 1 , 7 , 8 , 9 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 21 , 22 , 23 , 24 , 25 , 26 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 6 , 7 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , 3 , 4 , 5 , 6 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
2023-08-11 15:53:17 +08:00
} ;
# endif
# ifdef CONFIG_ORANGEPI_3
//pinToGpioR3 is for OrangePi H6 Pi 3
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
122 , 121 ,
118 , 354 , 355 ,
120 , 114 , 119 , 362 , 111 , 112 ,
229 , 230 , 117 , 228 , 227 , 360 ,
// 71, 72, 73, 117, 118, 227, //GPIO 0 through 6: wpi 0 - 5
// 229, 230, // I2C1 - SCL1, SDA1 wpi 6 - 7
// 228, // PWM1 wpi 8
// 119, 120, 121, 122, // UART3 - Tx3, Rx3, RTS3, CTS3 wpi 9 - 12
// 64, 66, 67, 69, // SPI0 - SCLK, MOSI, MISO, CS wpi 13 - 16
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
// Padding:
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
//physToGpioR3 is for OrangePi H6 Lite2/OnePlus
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
122 , - 1 ,
121 , - 1 ,
118 , 354 ,
2023-08-11 15:53:17 +08:00
- 1 , 355 ,
2023-11-30 12:50:07 +08:00
120 , 114 ,
119 , - 1 ,
362 , 111 ,
2023-08-11 15:53:17 +08:00
- 1 , 112 ,
2023-11-30 12:50:07 +08:00
229 , - 1 ,
230 , 117 ,
228 , 227 ,
- 1 , 360 , // 25, 26
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 ,
1 , - 1 ,
2 , 3 , //7, 8
- 1 , 4 ,
5 , 6 , //11, 12
7 , - 1 ,
8 , 9 , //15, 16
- 1 , 10 ,
11 , - 1 , //19, 20
12 , 13 ,
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , 15 , 16 , - 1 , 18 , - 1 , - 1 , 21 , 22 , 23 , 24 , 25 , 26 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ - 1 , - 1 , - 1 , 3 , 4 , 5 , 6 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , 2 , 3 , - 1 , - 1 , - 1 , - 1 , 8 , - 1 , 10 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PL
2023-08-11 15:53:17 +08:00
} ;
# endif
# ifdef CONFIG_ORANGEPI_ZERO2
2023-11-30 14:51:55 +08:00
int pinToGpioOrangePi [ 64 ] =
{
- 1 , // 0
- 1 , - 1 , // 3.3V 5V
266 , - 1 , // PI10 266 5V
271 , - 1 , // PI15 271 GND
268 , 267 , // PI12 268 PI11 267
- 1 , 261 , // GND PI5 261
260 , 262 , // PI4 260 PI6 262
263 , - 1 , // PI7 263 GND
272 , 270 , // PI16 272 PI14 270
- 1 , 256 , // 3.3V PI0 256
258 , - 1 , // PI2 258 GND
232 , 225 , // PH8 232 PH1 225
224 , 231 , // PH0 224 PH7 231
- 1 , 234 , // GND PH10 234
229 , 233 , // PH5 229 PH9 233
259 , - 1 , // PI3 259 GND
265 , 257 , // PI9 265 PI1 257
269 , - 1 , // PI13 269 GND
228 , 264 , // PH4 228 PI8 264
226 , 230 , // PH2 226 PH6 230
- 1 , 227 , // GND PH3 227
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
- 1 , - 1 , - 1 , - 1 , - 1 , // 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToGpioOrangePi [ 64 ] = {
2023-11-30 14:51:55 +08:00
- 1 , // 0
- 1 , - 1 , // 3.3V 5V
266 , - 1 , // PI10 266 5V
271 , - 1 , // PI15 271 GND
268 , 267 , // PI12 268 PI11 267
- 1 , 261 , // GND PI5 261
260 , 262 , // PI4 260 PI6 262
263 , - 1 , // PI7 263 GND
272 , 270 , // PI16 272 PI14 270
- 1 , 256 , // 3.3V PI0 256
258 , - 1 , // PI2 258 GND
232 , 225 , // PH8 232 PH1 225
224 , 231 , // PH0 224 PH7 231
- 1 , 234 , // GND PH10 234
229 , 233 , // PH5 229 PH9 233
259 , - 1 , // PI3 259 GND
265 , 257 , // PI9 265 PI1 257
269 , - 1 , // PI13 269 GND
228 , 264 , // PH4 228 PI8 264
226 , 230 , // PH2 226 PH6 230
- 1 , 227 , // GND PH3 227
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
- 1 , - 1 , - 1 , - 1 , - 1 , // 63
2023-11-30 12:50:07 +08:00
} ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
3 , - 1 , //3, 4
5 , - 1 , //5, 6
7 , 8 , //7, 8
- 1 , 10 , //9,10
11 , 12 , //11,12
13 , - 1 , //13,14
15 , 16 , //15,16
- 1 , 18 , //17,18
19 , - 1 , //19,20
21 , 22 , //21,22
23 , 24 , //23, 24
- 1 , 26 , // 25, 26
27 , 28 , //27, 28
29 , - 1 , //29, 30
31 , 32 , //31, 32
33 , - 1 , //33, 34
35 , 36 , //35, 36
37 , 38 , //37, 38
- 1 , 40 , //39, 40
2023-11-30 11:12:06 +08:00
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
2023-08-11 15:53:17 +08:00
} ;
# endif
2023-12-01 17:50:18 +08:00
// 蓝莓
# ifdef CONFIG_BLUEBERRY
int pinToGpioOrangePi [ 64 ] =
{
- 1 , // 0
- 1 , - 1 , // 3.3V 5V
266 , - 1 , // PI10 266 5V
271 , - 1 , // PI15 271 GND
268 , 267 , // PI12 268 PI11 267
- 1 , 261 , // GND PI5 261
260 , 262 , // PI4 260 PI6 262
263 , - 1 , // PI7 263 GND
272 , 270 , // PI16 272 PI14 270
- 1 , 256 , // 3.3V PI0 256
258 , - 1 , // PI2 258 GND
232 , 225 , // PH8 232 PH1 225
224 , 231 , // PH0 224 PH7 231
- 1 , 234 , // GND PH10 234
229 , 233 , // PH5 229 PH9 233
259 , - 1 , // PI3 259 GND
265 , 257 , // PI9 265 PI1 257
269 , - 1 , // PI13 269 GND
228 , 264 , // PH4 228 PI8 264
226 , 230 , // PH2 226 PH6 230
- 1 , 227 , // GND PH3 227
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
- 1 , - 1 , - 1 , - 1 , - 1 , // 63
} ;
int physToGpioOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 3.3V 5V
266 , - 1 , // PI10 266 5V
271 , - 1 , // PI15 271 GND
268 , 267 , // PI12 268 PI11 267
- 1 , 261 , // GND PI5 261
260 , 262 , // PI4 260 PI6 262
263 , - 1 , // PI7 263 GND
272 , 270 , // PI16 272 PI14 270
- 1 , 256 , // 3.3V PI0 256
258 , - 1 , // PI2 258 GND
232 , 225 , // PH8 232 PH1 225
224 , 231 , // PH0 224 PH7 231
- 1 , 234 , // GND PH10 234
229 , 233 , // PH5 229 PH9 233
259 , - 1 , // PI3 259 GND
265 , 257 , // PI9 265 PI1 257
269 , - 1 , // PI13 269 GND
228 , 264 , // PH4 228 PI8 264
226 , 230 , // PH2 226 PH6 230
- 1 , 227 , // GND PH3 227
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 ,
- 1 , - 1 , - 1 , - 1 , - 1 , // 63
} ;
int physToPinOrangePi [ 64 ] = {
- 1 , // 0
- 1 , - 1 , // 1, 2
3 , - 1 , //3, 4
5 , - 1 , //5, 6
7 , 8 , //7, 8
- 1 , 10 , //9,10
11 , 12 , //11,12
13 , - 1 , //13,14
15 , 16 , //15,16
- 1 , 18 , //17,18
19 , - 1 , //19,20
21 , 22 , //21,22
23 , 24 , //23, 24
- 1 , 26 , // 25, 26
27 , 28 , //27, 28
29 , - 1 , //29, 30
31 , 32 , //31, 32
33 , - 1 , //33, 34
35 , 36 , //35, 36
37 , 38 , //37, 38
- 1 , 40 , //39, 40
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 12 ] [ 32 ] = //[BANK] [INDEX]
{
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PA
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PB
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PC
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PD
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PF
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PG
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PH
{ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 , 10 , 11 , 12 , 13 , 14 , 15 , 16 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PI
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PJ
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PK
{ - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , } , //PE
} ;
# endif
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_RK3399
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
43 , 44 , // 0, 1
64 , 148 , // 2, 3
147 , 80 , // 4 5
65 , 81 , // 6, 7
82 , 66 , // 8, 9
67 , 39 , //10,11
40 , 83 , //12,13
41 , 42 , //14,15
133 , 154 , //16,17
50 , 68 , //18,19
69 , 76 , //20,21
70 , 71 , //22,23
73 , 72 , //24,25
74 , 75 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
43 , - 1 , // 3, 4
44 , - 1 , // 5, 6
64 , 148 , // 7, 8
- 1 , 147 , // 9, 10
80 , 65 , // 11, 12
81 , - 1 , // 13, 14
82 , 66 , // 15, 16
- 1 , 67 , // 17, 18
39 , - 1 , // 19, 20
40 , 83 , // 21, 22
41 , 42 , // 23, 24
- 1 , 133 , // 25, 26
154 , 50 , // 27, 28
68 , - 1 , // 29, 30
69 , 76 , // 31, 32
70 , - 1 , // 33, 34
71 , 73 , // 35, 36
72 , 74 , // 37, 38
- 1 , 75 , // 39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
17 , 18 , //27, 28
19 , - 1 , //29, 30
20 , 21 , //31, 32
22 , - 1 , //33, 34
23 , 24 , //35, 36
25 , 26 , //37, 38
- 1 , 27 , //39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 5 ] [ 32 ] = //[BANK] [INDEX]
{
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PA
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PB
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PC
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
2023-08-11 15:53:17 +08:00
} ;
volatile uint32_t * gpio2_base ;
volatile uint32_t * cru_base ;
volatile uint32_t * grf_base ;
volatile uint32_t * pmugrf_base ;
volatile uint32_t * pmucru_base ;
volatile uint32_t * gpio1_base ;
volatile uint32_t * gpio4_base ;
2023-11-30 12:50:07 +08:00
# endif /* CONFIG_ORANGEPI_RK3399 */
2023-08-11 15:53:17 +08:00
// add 2019.1.8
# ifdef CONFIG_ORANGEPI_800
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
43 , 44 , //0,1
150 , 39 , //2,3
40 , 148 , //4,5
152 , 147 , //6,7
149 , 64 , //8,9
65 , 74 , //10,11
73 , 153 , //12,13
75 , 76 , //14,15
154 , - 1 , //16,17
- 1 , - 1 , //18,19
- 1 , - 1 , //20,21
- 1 , - 1 , //22,23
- 1 , - 1 , //24,25
- 1 , - 1 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
43 , - 1 , // 3, 4
44 , - 1 , // 5, 6
150 , 39 , // 7, 8
- 1 , 40 , // 9, 10
148 , 152 , // 11, 12
147 , - 1 , // 13, 14
149 , 64 , // 15, 16
- 1 , 65 , // 17, 18
74 , - 1 , // 19, 20
73 , 153 , // 21, 22
75 , 76 , // 23, 24
- 1 , 154 , // 25, 26
- 1 , - 1 , // 27, 28
- 1 , - 1 , // 29, 30
- 1 , - 1 , // 31, 32
- 1 , - 1 , // 33, 34
- 1 , - 1 , // 35, 36
- 1 , - 1 , // 37, 38
- 1 , 75 , // 39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , //0
- 1 , - 1 , //1,2
0 , - 1 , //3,4
1 , - 1 , //5,6
2 , 3 , //7,8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23,24
- 1 , 16 , //25,26
- 1 , - 1 , //27,28
- 1 , - 1 , //29,30
- 1 , - 1 , //31,32
- 1 , - 1 , //33,34
- 1 , - 1 , //35,36
- 1 , - 1 , //37,38
- 1 , - 1 , //39,40
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 5 ] [ 32 ] = //[BANK] [INDEX]
2023-08-11 15:53:17 +08:00
{
2023-11-30 12:50:07 +08:00
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } ,
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } ,
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } ,
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } ,
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } ,
2023-08-11 15:53:17 +08:00
} ;
volatile uint32_t * gpio2_base ;
volatile uint32_t * cru_base ;
volatile uint32_t * grf_base ;
volatile uint32_t * pmugrf_base ;
volatile uint32_t * pmucru_base ;
volatile uint32_t * gpio1_base ;
volatile uint32_t * gpio4_base ;
2023-11-30 12:50:07 +08:00
# endif /* CONFIG_ORANGEPI_800 */
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_4
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
64 , 65 , // 0, 1
150 , 145 , // 2, 3
144 , 33 , // 4 5
50 , 35 , // 6, 7
92 , 54 , // 8, 9
55 , 40 , //10,11
39 , 56 , //12,13
41 , 42 , //14,15
149 , 64 , //16,17
65 , - 1 , //18,19
- 1 , - 1 , //20,21
- 1 , - 1 , //22,23
- 1 , - 1 , //24,25
- 1 , - 1 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
64 , - 1 , // 3, 4
65 , - 1 , // 5, 6
150 , 145 , // 7, 8
- 1 , 144 , // 9, 10
33 , 50 , // 11, 12
35 , - 1 , // 13, 14
92 , 54 , // 15, 16
- 1 , 55 , // 17, 18
40 , - 1 , // 19, 20
39 , 56 , // 21, 22
41 , 42 , // 23, 24
- 1 , 149 , // 25, 26
64 , 65 , // 27, 28
- 1 , - 1 , // 29, 30
- 1 , 76 , // 31, 32
- 1 , - 1 , // 33, 34
- 1 , 73 , // 35, 36
- 1 , 74 , // 37, 38
- 1 , 75 , // 39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
17 , 18 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 5 ] [ 32 ] = //[BANK] [INDEX]
2023-08-11 15:53:17 +08:00
{
2023-11-30 12:50:07 +08:00
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PA
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PB
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PC
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
} ;
2023-08-11 15:53:17 +08:00
volatile uint32_t * gpio2_base ;
volatile uint32_t * cru_base ;
volatile uint32_t * grf_base ;
volatile uint32_t * pmugrf_base ;
volatile uint32_t * pmucru_base ;
volatile uint32_t * gpio1_base ;
volatile uint32_t * gpio4_base ;
2023-11-30 12:50:07 +08:00
# endif /* CONFIG_ORANGEPI_4 */
2023-08-11 15:53:17 +08:00
// add 2019.1.8
# ifdef CONFIG_ORANGEPI_4_LTS
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
52 , 53 , // 0, 1
150 , 145 , // 2, 3
144 , 33 , // 4 5
50 , 35 , // 6, 7
92 , 54 , // 8, 9
55 , 40 , //10,11
39 , 56 , //12,13
41 , 42 , //14,15
149 , 64 , //16,17
65 , - 1 , //18,19
- 1 , - 1 , //20,21
- 1 , - 1 , //22,23
- 1 , - 1 , //24,25
- 1 , - 1 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
64 , - 1 , // 3, 4
65 , - 1 , // 5, 6
150 , 145 , // 7, 8
- 1 , 144 , // 9, 10
33 , 50 , // 11, 12
35 , - 1 , // 13, 14
92 , 54 , // 15, 16
- 1 , 55 , // 17, 18
40 , - 1 , // 19, 20
39 , 56 , // 21, 22
41 , 42 , // 23, 24
- 1 , 149 , // 25, 26
- 1 , - 1 , // 27, 28
- 1 , - 1 , // 29, 30
- 1 , - 1 , // 31, 32
- 1 , - 1 , // 33, 34
- 1 , - 1 , // 35, 36
- 1 , - 1 , // 37, 38
- 1 , - 1 , // 39, 40
2023-08-11 15:53:17 +08:00
//Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , // 0
- 1 , - 1 , // 1, 2
0 , - 1 , //3, 4
1 , - 1 , //5, 6
2 , 3 , //7, 8
- 1 , 4 , //9,10
5 , 6 , //11,12
7 , - 1 , //13,14
8 , 9 , //15,16
- 1 , 10 , //17,18
11 , - 1 , //19,20
12 , 13 , //21,22
14 , 15 , //23, 24
- 1 , 16 , // 25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int ORANGEPI_PIN_MASK [ 5 ] [ 32 ] = //[BANK] [INDEX]
2023-08-11 15:53:17 +08:00
{
2023-11-30 12:50:07 +08:00
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PA
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PB
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PC
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
} ;
2023-08-11 15:53:17 +08:00
volatile uint32_t * gpio2_base ;
volatile uint32_t * cru_base ;
volatile uint32_t * grf_base ;
volatile uint32_t * pmugrf_base ;
volatile uint32_t * pmucru_base ;
volatile uint32_t * gpio1_base ;
volatile uint32_t * gpio4_base ;
2023-11-30 12:50:07 +08:00
# endif /* CONFIG_ORANGEPI_4_LTS */
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_R1PLUS
2023-11-30 12:50:07 +08:00
int pinToGpioOrangePi [ 64 ] = {
89 , 88 , // 0, 1
100 , 102 , // 2, 3
112 , 103 , // 4 5
101 , 66 , // 6, 7
- 1 , - 1 , // 8, 9
- 1 , - 1 , //10,11
- 1 , - 1 , //12,13
- 1 , - 1 , //14,15
- 1 , - 1 , //16,17
- 1 , - 1 , //18,19
- 1 , - 1 , //20,21
- 1 , - 1 , //22,23
- 1 , - 1 , //24,25
- 1 , - 1 , //26,27
- 1 , - 1 , //28,29
- 1 , - 1 , //30,31
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 47
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int physToGpioOrangePi [ 64 ] = //head num map to OrangePi
{
- 1 , // 0
- 1 , - 1 , // 1, 2
89 , 88 , // 3, 4
100 , 102 , // 5, 6
- 1 , - 1 , // 7, 8
- 1 , 112 , // 9, 10
103 , 101 , // 11, 12
66 , - 1 , // 13, 14
- 1 , - 1 , // 15, 16
- 1 , - 1 , // 17, 18
- 1 , - 1 , // 19, 20
- 1 , - 1 , // 21, 22
- 1 , - 1 , // 23, 24
- 1 , - 1 , // 25, 26
- 1 , - 1 , // 27, 28
- 1 , - 1 , // 29, 30
- 1 , - 1 , // 31, 32
- 1 , - 1 , // 33, 34
- 1 , - 1 , // 35, 36
- 1 , - 1 , // 37, 38
- 1 , - 1 , // 39, 40
2023-08-11 15:53:17 +08:00
// Padding:
2023-11-30 12:50:07 +08:00
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
2023-08-11 15:53:17 +08:00
} ;
2023-11-30 12:50:07 +08:00
int physToPinOrangePi [ 64 ] = //return wiringPI pin
{
- 1 , //0
- 1 , - 1 , //1, 2
0 , 1 , //3, 4
2 , 3 , //5, 6
- 1 , - 1 , //7, 8
- 1 , 4 , //9, 10
5 , 6 , //11, 12
7 , - 1 , //13, 14
- 1 , - 1 , //15, 16
- 1 , - 1 , //17, 18
- 1 , - 1 , //19, 20
- 1 , - 1 , //21, 22
- 1 , - 1 , //23, 24
- 1 , - 1 , //25, 26
- 1 , - 1 , //27, 28
- 1 , - 1 , //29, 30
- 1 , - 1 , //31, 32
- 1 , - 1 , //33, 34
- 1 , - 1 , //35, 36
- 1 , - 1 , //37, 38
- 1 , - 1 , //39, 40
// Padding:
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 56
- 1 , - 1 , - 1 , - 1 , - 1 , - 1 , - 1 , // ... 63
} ;
int ORANGEPI_PIN_MASK [ 5 ] [ 32 ] = //[BANK] [INDEX]
2023-08-11 15:53:17 +08:00
{
2023-11-30 12:50:07 +08:00
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PA
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PB
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PC
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
{ 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , 1 , } , //PD
2023-08-11 15:53:17 +08:00
} ;
volatile uint32_t * gpio2_base ;
volatile uint32_t * gpio3_base ;
volatile uint32_t * cru_base ;
volatile uint32_t * grf_base ;
2023-11-30 12:50:07 +08:00
# endif /* CONFIG_ORANGEPI_R1PLUS */
2023-08-11 15:53:17 +08:00
// add 2020.11.26
/*
* Data for use with the boardId functions .
* The order of entries here to correspond with the PI_MODEL_X
* and PI_VERSION_X defines in wiringPi . h
* Only intended for the gpio command - use at your own risk !
*/
2023-11-30 12:50:07 +08:00
const char * piModelNames [ 6 ] = {
2023-08-11 15:53:17 +08:00
" Unknown " ,
" Model A " ,
" Model B " ,
" Model B+ " ,
" Compute Module " ,
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
" OrangePi 2G-IOT " ,
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_PC2 || CONFIG_ORANGEPI_ZEROPLUS || CONFIG_ORANGEPI_ZEROPLUS2_H5 || CONFIG_ORANGEPI_PRIME
2023-11-30 12:50:07 +08:00
" OrangePi H5 family " ,
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_WIN
2023-11-30 12:50:07 +08:00
" OrangePi Win/Winplus " ,
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_H3 || CONFIG_ORANGEPI_ZEROPLUS2_H3
2023-11-30 12:50:07 +08:00
" OrangePi H3 family " ,
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_ZERO || CONFIG_ORANGEPI_R1
2023-11-30 12:50:07 +08:00
" OrangePi H2+ family " ,
2023-08-11 15:53:17 +08:00
# endif
} ;
volatile uint32_t * OrangePi_gpio ;
volatile uint32_t * OrangePi_gpioC ;
int pwmmode = 1 ;
2023-11-30 12:50:07 +08:00
const char * int2bin ( uint32_t param )
{
int bits = sizeof ( uint32_t ) * CHAR_BIT ;
static char buffer [ sizeof ( uint32_t ) * CHAR_BIT + 1 ] ;
char chars [ 2 ] = { ' 0 ' , ' 1 ' } ;
int i , j , offset ;
2023-08-11 15:53:17 +08:00
for ( i = 0 ; i < bits ; i + + ) {
j = bits - i - 1 ;
offset = ( param & ( 1 < < j ) ) > > j ;
buffer [ i ] = chars [ offset ] ;
}
buffer [ bits ] = ' \0 ' ;
return buffer ;
}
/*
* Read register value helper
*/
unsigned int readR ( unsigned int addr )
{
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
unsigned int val = 0 ;
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
if ( mmap_base = = 0x11a08000 ) /* Group C */
val = * ( ( char * ) OrangePi_gpioC + mmap_seek ) ;
else /* Group A, B and D */
val = * ( ( char * ) OrangePi_gpio + mmap_seek ) ;
return val ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 )
2023-11-30 12:50:07 +08:00
unsigned int val = 0 ;
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
if ( mmap_base = = CRU_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) cru_base + mmap_seek ) ) ;
else if ( mmap_base = = GRF_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) grf_base + mmap_seek ) ) ;
else if ( mmap_base = = GPIO2_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) gpio2_base + mmap_seek ) ) ;
else if ( mmap_base = = GPIO1_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) gpio1_base + mmap_seek ) ) ;
else if ( mmap_base = = PMUCRU_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) pmucru_base + mmap_seek ) ) ;
else if ( mmap_base = = PMUGRF_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) pmugrf_base + mmap_seek ) ) ;
else if ( mmap_base = = GPIO4_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) gpio4_base + mmap_seek ) ) ;
else ;
return val ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
unsigned int val = 0 ;
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
if ( mmap_base = = CRU_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) cru_base + mmap_seek ) ) ;
else if ( mmap_base = = GRF_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) grf_base + mmap_seek ) ) ;
else if ( mmap_base = = GPIO2_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) gpio2_base + mmap_seek ) ) ;
else if ( mmap_base = = GPIO3_BASE )
val = * ( ( unsigned int * ) ( ( unsigned char * ) gpio3_base + mmap_seek ) ) ;
else ;
return val ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
uint32_t val = 0 ;
uint32_t mmap_base = ( addr & ~ MAP_MASK ) ;
uint32_t mmap_seek = ( ( addr - mmap_base ) > > 2 ) ;
if ( addr > = GPIOL_BASE ) {
val = * ( OrangePi_gpioC + mmap_seek ) ;
} else
val = * ( OrangePi_gpio + mmap_seek ) ;
return val ;
2023-08-11 15:53:17 +08:00
# endif
}
/*
* Wirte value to register helper
*/
void writeR ( unsigned int val , unsigned int addr )
{
# ifdef CONFIG_ORANGEPI_2G_IOT
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
2023-11-30 12:50:07 +08:00
if ( mmap_base = = 0x11a08000 )
* ( ( char * ) OrangePi_gpioC + mmap_seek ) = val ;
else
* ( ( char * ) OrangePi_gpio + mmap_seek ) = val ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
if ( mmap_base = = CRU_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) cru_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GRF_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) grf_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GPIO2_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) gpio2_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GPIO1_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) gpio1_base + mmap_seek ) ) = val ;
else if ( mmap_base = = PMUCRU_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) pmucru_base + mmap_seek ) ) = val ;
else if ( mmap_base = = PMUGRF_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) pmugrf_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GPIO4_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) gpio4_base + mmap_seek ) ) = val ;
else ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( addr - mmap_base ) ;
if ( mmap_base = = CRU_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) cru_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GRF_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) grf_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GPIO2_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) gpio2_base + mmap_seek ) ) = val ;
else if ( mmap_base = = GPIO3_BASE )
* ( ( unsigned int * ) ( ( unsigned char * ) gpio3_base + mmap_seek ) ) = val ;
else ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
unsigned int mmap_base = ( addr & ~ MAP_MASK ) ;
unsigned int mmap_seek = ( ( addr - mmap_base ) > > 2 ) ;
if ( addr > = GPIOL_BASE ) {
* ( OrangePi_gpioC + mmap_seek ) = val ;
} else
* ( OrangePi_gpio + mmap_seek ) = val ;
2023-08-11 15:53:17 +08:00
# endif
}
2023-11-30 12:50:07 +08:00
void print_pwm_reg ( )
{
2023-08-11 15:53:17 +08:00
uint32_t val = readR ( SUNXI_PWM_CTRL_REG ) ;
uint32_t val2 = readR ( SUNXI_PWM_CH0_PERIOD ) ;
if ( wiringPiDebug ) {
printf ( " SUNXI_PWM_CTRL_REG: %s \n " , int2bin ( val ) ) ;
printf ( " SUNXI_PWM_CH0_PERIOD: %s \n " , int2bin ( val2 ) ) ;
}
}
2023-11-30 12:50:07 +08:00
void sunxi_pwm_set_enable ( int en )
{
2023-08-11 15:53:17 +08:00
int val = 0 ;
val = readR ( SUNXI_PWM_CTRL_REG ) ;
if ( en ) {
val | = ( SUNXI_PWM_CH0_EN | SUNXI_PWM_SCLK_CH0_GATING ) ;
2023-11-30 12:50:07 +08:00
} else {
2023-08-11 15:53:17 +08:00
val & = ~ ( SUNXI_PWM_CH0_EN | SUNXI_PWM_SCLK_CH0_GATING ) ;
}
if ( wiringPiDebug )
printf ( " >>function%s,no:%d,enable? :0x%x \n " , __func__ , __LINE__ , val ) ;
writeR ( val , SUNXI_PWM_CTRL_REG ) ;
delay ( 1 ) ;
print_pwm_reg ( ) ;
}
2023-11-30 12:50:07 +08:00
void sunxi_pwm_set_mode ( int mode )
{
2023-08-11 15:53:17 +08:00
int val = 0 ;
val = readR ( SUNXI_PWM_CTRL_REG ) ;
2023-11-30 12:50:07 +08:00
mode & = 1 ; //cover the mode to 0 or 1
if ( mode ) { //pulse mode
2023-08-11 15:53:17 +08:00
val | = ( SUNXI_PWM_CH0_MS_MODE | SUNXI_PWM_CH0_PUL_START ) ;
pwmmode = 1 ;
2023-11-30 12:50:07 +08:00
} else { //cycle mode
2023-08-11 15:53:17 +08:00
val & = ~ ( SUNXI_PWM_CH0_MS_MODE ) ;
pwmmode = 0 ;
}
val | = ( SUNXI_PWM_CH0_ACT_STA ) ;
if ( wiringPiDebug )
printf ( " >>function%s,no:%d,mode? :0x%x \n " , __func__ , __LINE__ , val ) ;
writeR ( val , SUNXI_PWM_CTRL_REG ) ;
delay ( 1 ) ;
2023-11-30 12:50:07 +08:00
print_pwm_reg ( ) ;
2023-08-11 15:53:17 +08:00
}
2023-11-30 12:50:07 +08:00
void sunxi_pwm_set_clk ( int clk )
{
2023-08-11 15:53:17 +08:00
int val = 0 ;
if ( wiringPiDebug )
printf ( " >>function%s,no:%d \n " , __func__ , __LINE__ ) ;
// sunxi_pwm_set_enable(0);
val = readR ( SUNXI_PWM_CTRL_REG ) ;
if ( wiringPiDebug )
printf ( " read reg val: 0x%x \n " , val ) ;
//clear clk to 0
val & = 0xf801f0 ;
val | = ( ( clk & 0xf ) < < 15 ) ; //todo check wether clk is invalid or not
writeR ( val , SUNXI_PWM_CTRL_REG ) ;
sunxi_pwm_set_enable ( 1 ) ;
if ( wiringPiDebug )
printf ( " >>function%s,no:%d,clk? :0x%x \n " , __func__ , __LINE__ , val ) ;
delay ( 1 ) ;
print_pwm_reg ( ) ;
}
/**
* ch0 and ch1 set the same , 16 bit period and 16 bit act
*/
2023-11-30 12:50:07 +08:00
int sunxi_pwm_get_period ( void )
{
2023-08-11 15:53:17 +08:00
uint32_t period_cys = 0 ;
period_cys = readR ( SUNXI_PWM_CH0_PERIOD ) ; //get ch1 period_cys
if ( wiringPiDebug ) {
printf ( " periodcys: %d \n " , period_cys ) ;
}
2023-11-30 12:50:07 +08:00
period_cys & = 0xffff0000 ; //get period_cys
2023-08-11 15:53:17 +08:00
period_cys = period_cys > > 16 ;
if ( wiringPiDebug )
printf ( " >>func:%s,no:%d,period/range:%d " , __func__ , __LINE__ , period_cys ) ;
delay ( 1 ) ;
return period_cys ;
}
2023-11-30 12:50:07 +08:00
int sunxi_pwm_get_act ( void )
{
2023-08-11 15:53:17 +08:00
uint32_t period_act = 0 ;
period_act = readR ( SUNXI_PWM_CH0_PERIOD ) ; //get ch1 period_cys
2023-11-30 12:50:07 +08:00
period_act & = 0xffff ; //get period_act
2023-08-11 15:53:17 +08:00
if ( wiringPiDebug )
printf ( " >>func:%s,no:%d,period/range:%d " , __func__ , __LINE__ , period_act ) ;
delay ( 1 ) ;
return period_act ;
}
2023-11-30 12:50:07 +08:00
void sunxi_pwm_set_period ( int period_cys )
{
2023-08-11 15:53:17 +08:00
uint32_t val = 0 ;
//all clear to 0
if ( wiringPiDebug )
printf ( " >>func:%s no:%d \n " , __func__ , __LINE__ ) ;
2023-11-30 12:50:07 +08:00
period_cys & = 0xffff ; //set max period to 2^16
2023-08-11 15:53:17 +08:00
period_cys = period_cys < < 16 ;
val = readR ( SUNXI_PWM_CH0_PERIOD ) ;
if ( wiringPiDebug )
printf ( " read reg val: 0x%x \n " , val ) ;
val & = 0x0000ffff ;
period_cys | = val ;
if ( wiringPiDebug )
printf ( " write reg val: 0x%x \n " , period_cys ) ;
writeR ( period_cys , SUNXI_PWM_CH0_PERIOD ) ;
delay ( 1 ) ;
val = readR ( SUNXI_PWM_CH0_PERIOD ) ;
if ( wiringPiDebug )
printf ( " readback reg val: 0x%x \n " , val ) ;
print_pwm_reg ( ) ;
}
2023-11-30 12:50:07 +08:00
void sunxi_pwm_set_act ( int act_cys )
{
2023-08-11 15:53:17 +08:00
uint32_t per0 = 0 ;
//keep period the same, clear act_cys to 0 first
if ( wiringPiDebug )
printf ( " >>func:%s no:%d \n " , __func__ , __LINE__ ) ;
per0 = readR ( SUNXI_PWM_CH0_PERIOD ) ;
if ( wiringPiDebug )
printf ( " read reg val: 0x%x \n " , per0 ) ;
per0 & = 0xffff0000 ;
act_cys & = 0xffff ;
act_cys | = per0 ;
if ( wiringPiDebug )
printf ( " write reg val: 0x%x \n " , act_cys ) ;
writeR ( act_cys , SUNXI_PWM_CH0_PERIOD ) ;
delay ( 1 ) ;
print_pwm_reg ( ) ;
}
int OrangePi_get_gpio_mode ( int pin )
{
2023-11-30 12:50:07 +08:00
unsigned int regval = 0 ;
unsigned int bank = pin > > 5 ;
unsigned int index = pin - ( bank < < 5 ) ;
unsigned int phyaddr = 0 ;
unsigned char mode = - 1 ;
2023-08-11 15:53:17 +08:00
# if (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
unsigned int grf_phyaddr = 0 , ddr_phyaddr = 0 ;
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) ) ;
if ( bank = = 1 ) {
grf_phyaddr = PMUGRF_BASE + ( ( index > > 3 ) < < 2 ) + 0x10 ;
ddr_phyaddr = GPIO1_BASE + GPIO_SWPORTA_DDR_OFFSET ;
} else if ( bank = = 2 ) {
grf_phyaddr = GRF_BASE + ( ( index > > 3 ) < < 2 ) ;
ddr_phyaddr = GPIO2_BASE + GPIO_SWPORTA_DDR_OFFSET ;
} else if ( bank = = 4 ) {
grf_phyaddr = GRF_BASE + ( ( index > > 3 ) < < 2 ) + 0x20 ;
ddr_phyaddr = GPIO4_BASE + GPIO_SWPORTA_DDR_OFFSET ;
} else ;
if ( ORANGEPI_PIN_MASK [ bank - 1 ] [ index ] ! = - 1 ) {
regval = readR ( grf_phyaddr ) ;
mode = ( regval > > ( offset < < 1 ) ) & 0x3 ; //获取控制模式的那两位的值
if ( mode = = 0 ) { //如果是gpio模式
regval = readR ( ddr_phyaddr ) ; //获取gpio方向寄存器的值
return ( regval > > index ) & 1 ; //index对应的gpio的方向值, 0为in, 1为out
}
return mode + 1 ; //如果不是gpio模式, 返回的alt, 从2开始, 0和1是in和out
}
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_R1PLUS
2023-11-30 12:50:07 +08:00
unsigned int grf_phyaddr = 0 , ddr_phyaddr = 0 ;
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) ) ;
if ( bank = = 2 ) { //gpio2
//ddr_phyaddr = GPIO2_BASE + GPIO_SWPORTA_DDR_OFFSET;
ddr_phyaddr = 0xff230004 ;
//grf_phyaddr = GRF_BASE + ((index >> 3) << 2) + 0x10;
if ( 0 = = ( index > > 3 ) ) //gpio2_ax
{
grf_phyaddr = GRF_BASE + 0x20 ;
} else if ( 3 = = ( index > > 3 ) ) //gpio2_dx
{
grf_phyaddr = GRF_BASE + 0x34 ;
}
} else if ( bank = = 3 ) {
//grf_phyaddr = GRF_BASE + ((index >> 3) << 2) +0x20;
ddr_phyaddr = GPIO3_BASE + GPIO_SWPORTA_DDR_OFFSET ;
if ( 0 = = ( index > > 3 ) ) {
if ( 4 = = offset ) //gpio3_a4
{
grf_phyaddr = GRF_BASE + 0x38 ;
} else //gpio3_a567
{
grf_phyaddr = GRF_BASE + 0x3c ;
}
} else if ( 2 = = ( index > > 3 ) ) //gpio3_c
{
grf_phyaddr = GRF_BASE + 0x48 ;
}
} else ;
if ( ORANGEPI_PIN_MASK [ bank - 1 ] [ index ] ! = - 1 ) {
regval = readR ( grf_phyaddr ) ;
writeR ( 0xffff9877 , 0xff440240 ) ;
if ( 3 = = bank & & ( 0 = = ( index > > 3 ) ) ) //gpio3_ax需要写3位
{
mode = ( regval > > ( ( offset % 5 ) * 3 ) ) & 0x7 ;
} else {
mode = ( regval > > ( offset < < 1 ) ) & 0x3 ;
}
if ( mode = = 0 ) {
regval = readR ( ddr_phyaddr ) ;
return ( regval > > index ) & 1 ;
}
return mode + 1 ;
}
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) < < 2 ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
if ( bank = = 11 ) {
phyaddr = GPIOL_BASE + ( ( index > > 3 ) < < 2 ) ;
} else
phyaddr = GPIO_BASE_MAP + ( bank * 36 ) + ( ( index > > 3 ) < < 2 ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
/* Ignore unused gpio */
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
regval = readR ( phyaddr ) ;
mode = ( regval > > offset ) & 7 ;
}
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
return mode ;
2023-08-11 15:53:17 +08:00
# endif
}
/*
* Set GPIO Mode
*/
int OrangePi_set_gpio_mode ( int pin , int mode )
{
unsigned int regval = 0 ;
2023-11-30 12:50:07 +08:00
unsigned int bank = pin > > 5 ;
unsigned int index = pin - ( bank < < 5 ) ;
2023-08-11 15:53:17 +08:00
unsigned int phyaddr = 0 ;
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
unsigned int base_address = 0 ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 || defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) ) ;
unsigned int cru_phyaddr , grf_phyaddr , gpio_phyaddr ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) < < 2 ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
if ( bank = = 11 ) {
phyaddr = GPIOL_BASE + ( ( index > > 3 ) < < 2 ) ;
} else
phyaddr = GPIO_BASE_MAP + ( bank * 36 ) + ( ( index > > 3 ) < < 2 ) ;
2023-08-11 15:53:17 +08:00
# endif
# ifdef CONFIG_ORANGEPI_2G_IOT
/* Offset of register */
2023-11-30 12:50:07 +08:00
if ( bank = = 0 ) /* group A */
base_address = GPIOA_BASE ;
else if ( bank = = 1 ) /* group B */
base_address = GPIOB_BASE ;
else if ( bank = = 2 ) /* group C */
base_address = GPIOC_BASE ;
else if ( bank = = 3 ) /* group D */
base_address = GPIOD_BASE ;
else
printf ( " Bad pin number \n " ) ;
if ( mode = = INPUT )
phyaddr = base_address + SET_IN_REGISTER ;
else if ( mode = = OUTPUT )
phyaddr = base_address + OEN_SET_OUT_REGISTER ;
else
printf ( " Invalid mode \n " ) ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
if ( bank = = 1 ) {
cru_phyaddr = PMUCRU_BASE + PMUCRU_CLKGATE_CON1_OFFSET ;
grf_phyaddr = PMUGRF_BASE + ( ( index > > 3 ) < < 2 ) + 0x10 ;
gpio_phyaddr = GPIO1_BASE + GPIO_SWPORTA_DDR_OFFSET ;
}
else if ( bank = = 2 ) {
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON31_OFFSET ;
grf_phyaddr = GRF_BASE + ( ( index > > 3 ) < < 2 ) ;
gpio_phyaddr = GPIO2_BASE + GPIO_SWPORTA_DDR_OFFSET ;
} else if ( bank = = 4 ) {
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON31_OFFSET ;
grf_phyaddr = GRF_BASE + ( ( index > > 3 ) < < 2 ) + 0x20 ;
gpio_phyaddr = GPIO4_BASE + GPIO_SWPORTA_DDR_OFFSET ;
} else ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
if ( bank = = 2 ) { //gpio2
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON16_OFFSET ;
//grf_phyaddr = GRF_BASE + ((index >> 3) << 2) + 0x10;
gpio_phyaddr = GPIO2_BASE + GPIO_SWPORTA_DDR_OFFSET ;
if ( 0 = = ( index > > 3 ) ) //gpio2_ax
{
grf_phyaddr = GRF_BASE + 0x20 ;
} else if ( 3 = = ( index > > 3 ) ) //gpio2_dx
{
grf_phyaddr = GRF_BASE + 0x34 ;
}
} else if ( bank = = 3 ) {
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON16_OFFSET ;
//grf_phyaddr = GRF_BASE + ((index >> 3) << 2) +0x20;
gpio_phyaddr = GPIO3_BASE + GPIO_SWPORTA_DDR_OFFSET ;
if ( 0 = = ( index > > 3 ) ) {
if ( 4 = = offset ) //gpio3_a4
{
grf_phyaddr = GRF_BASE + 0x38 ;
} else //gpio3_a567
{
grf_phyaddr = GRF_BASE + 0x3c ;
}
} else if ( 2 = = ( index > > 3 ) ) //gpio3_c
{
grf_phyaddr = GRF_BASE + 0x48 ;
}
} else ;
2023-08-11 15:53:17 +08:00
# endif
/* Ignore unused gpio */
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
# if ! (defined CONFIG_ORANGEPI_2G_IOT || defined CONFIG_ORANGEPI_RK3399 || CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 || CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " Before read reg val: 0x%x offset:%d \n " , regval , offset ) ;
2023-08-11 15:53:17 +08:00
# endif
if ( wiringPiDebug )
printf ( " Register[%#x]: %#x index:%d \n " , phyaddr , regval , index ) ;
/* Set Input */
2023-11-30 12:50:07 +08:00
if ( INPUT = = mode ) {
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_2G_IOT
writeR ( GPIO_BIT ( index ) , phyaddr ) ;
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
writeR ( 0xffff0180 , cru_phyaddr ) ;
regval = readR ( grf_phyaddr ) ;
regval | = 0x3 < < ( ( offset < < 1 ) | 0x10 ) ;
regval & = ~ ( 0x3 < < ( offset < < 1 ) ) ;
writeR ( regval , grf_phyaddr ) ;
regval = readR ( gpio_phyaddr ) ;
regval & = ~ ( 1 < < index ) ;
writeR ( regval , gpio_phyaddr ) ;
if ( wiringPiDebug ) {
regval = readR ( gpio_phyaddr ) ;
printf ( " Input mode set over reg val: %#x \n " , regval ) ;
}
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
writeR ( 0xffff9877 , cru_phyaddr ) ;
regval = readR ( grf_phyaddr ) ;
if ( 3 = = bank & & ( 0 = = ( index > > 3 ) ) ) //gpio3_a iomux需要写3位
{
regval | = 0xffff0000 ;
regval & = ~ ( 0x7 < < ( ( offset % 5 ) * 3 ) ) ;
} else //其他的写两位
{
regval | = 0xffff0000 ;
regval & = ~ ( 0x3 < < ( offset < < 1 ) ) ;
}
writeR ( regval , grf_phyaddr ) ;
regval = readR ( gpio_phyaddr ) ;
regval & = ~ ( 1 < < index ) ;
writeR ( regval , gpio_phyaddr ) ;
if ( wiringPiDebug ) {
regval = readR ( gpio_phyaddr ) ;
printf ( " Input mode set over reg val: %#x \n " , regval ) ;
}
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
regval & = ~ ( 7 < < offset ) ;
writeR ( regval , phyaddr ) ;
2023-08-11 15:53:17 +08:00
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
2023-11-30 12:50:07 +08:00
printf ( " Input mode set over reg val: %#x \n " , regval ) ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
} else if ( OUTPUT = = mode ) { /* Set Output */
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_2G_IOT
writeR ( GPIO_BIT ( index ) , phyaddr ) ;
2023-11-30 12:50:07 +08:00
/* Set default value as 0 */
writeR ( GPIO_BIT ( index ) , base_address + CLR_REGISTER ) ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
writeR ( 0xffff0180 , cru_phyaddr ) ;
regval = readR ( grf_phyaddr ) ;
regval | = 0x3 < < ( ( offset < < 1 ) | 0x10 ) ;
regval & = ~ ( 0x3 < < ( offset < < 1 ) ) ;
writeR ( regval , grf_phyaddr ) ;
regval = readR ( gpio_phyaddr ) ;
regval | = 1 < < index ;
writeR ( regval , gpio_phyaddr ) ;
if ( wiringPiDebug ) {
regval = readR ( gpio_phyaddr ) ;
printf ( " Out mode get value: 0x%x \n " , regval ) ;
}
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
writeR ( 0xffff9877 , cru_phyaddr ) ;
regval = readR ( grf_phyaddr ) ;
if ( 3 = = bank & & ( 0 = = ( index > > 3 ) ) ) //gpio3_a iomux需要写3位
{
regval | = 0xffff0000 ;
regval & = ~ ( 0x7 < < ( ( offset % 5 ) * 3 ) ) ;
} else //其他的写两位
{
regval | = 0xffff0000 ;
regval & = ~ ( 0x3 < < ( offset < < 1 ) ) ;
}
writeR ( regval , grf_phyaddr ) ;
regval = readR ( gpio_phyaddr ) ;
regval | = 1 < < index ;
writeR ( regval , gpio_phyaddr ) ;
if ( wiringPiDebug ) {
regval = readR ( gpio_phyaddr ) ;
printf ( " Out mode get value: 0x%x \n " , regval ) ;
}
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
regval & = ~ ( 7 < < offset ) ;
regval | = ( 1 < < offset ) ;
if ( wiringPiDebug )
printf ( " Out mode ready set val: 0x%x \n " , regval ) ;
writeR ( regval , phyaddr ) ;
2023-08-11 15:53:17 +08:00
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
2023-11-30 12:50:07 +08:00
printf ( " Out mode get value: 0x%x \n " , regval ) ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
} else if ( PWM_OUTPUT = = mode ) {
2023-08-11 15:53:17 +08:00
// set pin PWMx to pwm mode
regval & = ~ ( 7 < < offset ) ;
regval | = ( 0x3 < < offset ) ;
if ( wiringPiDebug )
printf ( " >>>>>line:%d PWM mode ready to set val: 0x%x \n " , __LINE__ , regval ) ;
writeR ( regval , phyaddr ) ;
delayMicroseconds ( 200 ) ;
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " <<<<<PWM mode set over reg val: 0x%x \n " , regval ) ;
//clear all reg
writeR ( 0 , SUNXI_PWM_CTRL_REG ) ;
writeR ( 0 , SUNXI_PWM_CH0_PERIOD ) ;
//set default M:S to 1/2
sunxi_pwm_set_period ( 1024 ) ;
sunxi_pwm_set_act ( 512 ) ;
pwmSetMode ( PWM_MODE_MS ) ;
sunxi_pwm_set_clk ( PWM_CLK_DIV_120 ) ; //default clk:24M/120
delayMicroseconds ( 200 ) ;
2023-11-30 12:50:07 +08:00
} else {
2023-08-11 15:53:17 +08:00
printf ( " Unknow mode \n " ) ;
}
} else
printf ( " Pin mode failed! \n " ) ;
return 0 ;
}
/*
* Set GPIO Pull Up / Down
*/
int OrangePi_set_gpio_pullUpDnControl ( int pin , int pud )
{
2023-11-30 12:50:07 +08:00
unsigned int regval = 0 ;
unsigned int bank = pin > > 5 ;
unsigned int index = pin - ( bank < < 5 ) ;
unsigned int phyaddr = 0 ;
unsigned int bit_value = - 1 , bit_enable = 0 ;
unsigned int offset ;
2023-08-11 15:53:17 +08:00
# if (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
/* */ if ( bank > 1 )
phyaddr = GRF_BASE + RK3399_GRF_GPIO2_3_4_P_OFFSET + ( ( ( pin - 64 ) > > 3 ) < < 2 ) ;
else if ( bank = = 1 | | pin < 16 )
phyaddr = PMUGRF_BASE + RK3399_PMUGRF_GPIO0_1_P_OFFSET + ( ( ( pin - 0 ) > > 3 ) < < 2 ) ;
else {
printf ( " gpio0 Group c,d does not support PU/PD control \n " ) ;
return ;
}
//offset = index - ((index >> 3) << 3);
offset = ( index % 8 ) < < 1 ;
bit_enable = 3 < < ( 16 + offset ) ;
/* */ if ( PUD_UP = = pud ) {
if ( pin < 8 | | ( bank = = 2 & & index > 15 ) ) /* gpio0a, gpio2c, gpio2d */
bit_value = 3 ;
else
bit_value = 1 ;
} else if ( PUD_DOWN = = pud ) {
if ( pin < 8 | | ( bank = = 2 & & index > 15 ) ) /* gpio0a, gpio2c, gpio2d */
bit_value = 1 ;
else
bit_value = 2 ;
} else if ( PUD_OFF = = pud ) {
bit_value = 0 ;
}
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
unsigned int pullOffset = 0x1C ;
switch ( pud ) {
case PUD_OFF :
bit_value = SUNXI_PUD_OFF ;
break ;
case PUD_UP :
bit_value = SUNXI_PUD_UP ;
break ;
case PUD_DOWN :
bit_value = SUNXI_PUD_DOWN ;
break ;
default :
printf ( " Unknow pull mode \n " ) ;
return 0 ;
}
offset = ( ( index - ( ( index > > 4 ) < < 4 ) ) < < 1 ) ;
pullOffset = 0x1C ;
if ( bank = = 11 ) {
phyaddr = pullOffset + GPIOL_BASE + ( ( index > > 4 ) < < 2 ) ;
} else
phyaddr = pullOffset + GPIO_BASE_MAP + ( bank * 36 ) + ( ( index > > 4 ) < < 2 ) ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
/* Ignore unused gpio */
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
if ( wiringPiDebug )
printf ( " bank: %d, index: %d \n " , bank , index ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " read val(%#x) from register[%#x] \n " , regval , phyaddr ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
/* clear bit */
regval & = ~ ( 3 < < offset ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
/* bit write enable */
regval | = bit_enable ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
/* set bit */
regval | = ( bit_value & 3 ) < < offset ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
if ( wiringPiDebug )
printf ( " write val(%#x) to register[%#x] \n " , regval , phyaddr ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
writeR ( regval , phyaddr ) ;
regval = readR ( phyaddr ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
if ( wiringPiDebug )
printf ( " over reg val: %#x \n " , regval ) ;
} else
printf ( " Pin pull control failed! \n " ) ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
return 0 ;
2023-08-11 15:53:17 +08:00
}
# if !(defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 || defined CONFIG_ORANGEPI_R1PLUS || CONFIG_ORANGEPI_2G_IOT)
int OrangePi_set_gpio_alt ( int pin , int mode )
{
2023-11-30 12:50:07 +08:00
unsigned int regval = 0 ;
unsigned int bank = pin > > 5 ;
unsigned int index = pin - ( bank < < 5 ) ;
unsigned int phyaddr = 0 ;
int offset = ( ( index - ( ( index > > 3 ) < < 3 ) ) < < 2 ) ;
if ( bank = = 11 ) {
phyaddr = GPIOL_BASE + ( ( index > > 3 ) < < 2 ) ;
} else
phyaddr = GPIO_BASE_MAP + ( bank * 36 ) + ( ( index > > 3 ) < < 2 ) ;
/* Ignore unused gpio */
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
if ( wiringPiDebug )
printf ( " Register[%#x]: %#x index:%d \n " , phyaddr , regval , index ) ;
regval = readR ( phyaddr ) ;
regval & = ~ ( 7 < < offset ) ;
regval | = ( mode < < offset ) ;
writeR ( regval , phyaddr ) ;
} else
printf ( " Pin alt mode failed! \n " ) ;
return 0 ;
2023-08-11 15:53:17 +08:00
}
# endif
/*
* OrangePi Digital write
*/
int OrangePi_digitalWrite ( int pin , int value )
{
2023-11-30 12:50:07 +08:00
unsigned int bank = pin > > 5 ;
unsigned int index = pin - ( bank < < 5 ) ;
2023-08-11 15:53:17 +08:00
unsigned int phyaddr = 0 ;
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
unsigned int base_address = 0 ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 || defined CONFIG_ORANGEPI_R1PLUS )
2023-11-30 12:50:07 +08:00
unsigned int regval = 0 ;
unsigned int cru_phyaddr = 0 ;
2023-08-11 15:53:17 +08:00
# else
unsigned int regval = 0 ;
2023-11-30 12:50:07 +08:00
if ( bank = = 11 ) {
phyaddr = GPIOL_BASE + 0x10 ;
} else
phyaddr = GPIO_BASE_MAP + ( bank * 36 ) + 0x10 ;
2023-08-11 15:53:17 +08:00
# endif
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
/* version 0.1 only support GPIOC output on OrangePi 2G-IOT */
if ( bank = = 2 ) { /* group C */
int fd ;
char buf [ 20 ] ;
if ( value = = 1 )
fd = open ( " /sys/bus/platform/drivers/rda-gpioc/rda-gpioc/gpo_set " , O_RDWR ) ;
else
fd = open ( " /sys/bus/platform/drivers/rda-gpioc/rda-gpioc/gpo_clear " , O_RDWR ) ;
if ( fd < 0 ) {
printf ( " ERROR: can't operate GPIOC-%d \n " , index ) ;
return - 1 ;
}
sprintf ( buf , " %d " , index ) ;
write ( fd , buf , strlen ( buf ) ) ;
close ( fd ) ;
return 0 ;
}
2023-08-11 15:53:17 +08:00
# endif
# ifdef CONFIG_ORANGEPI_2G_IOT
/* Offset of register */
2023-11-30 12:50:07 +08:00
if ( bank = = 0 ) /* group A */
base_address = GPIOA_BASE ;
else if ( bank = = 1 ) /* group B */
base_address = GPIOB_BASE ;
else if ( bank = = 2 ) /* group C */
base_address = GPIOC_BASE ;
else if ( bank = = 3 ) /* group D */
base_address = GPIOD_BASE ;
else
printf ( " Bad pin number \n " ) ;
if ( value = = 0 )
phyaddr = base_address + CLR_REGISTER ;
else if ( value = = 1 )
phyaddr = base_address + SET_REGISTER ;
else
printf ( " Invalid value \n " ) ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
if ( bank = = 1 ) {
phyaddr = GPIO1_BASE + GPIO_SWPORTA_DR_OFFSET ;
cru_phyaddr = PMUCRU_BASE + PMUCRU_CLKGATE_CON1_OFFSET ;
} else if ( bank = = 2 ) {
phyaddr = GPIO2_BASE + GPIO_SWPORTA_DR_OFFSET ;
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON31_OFFSET ;
} else if ( bank = = 4 ) {
phyaddr = GPIO4_BASE + GPIO_SWPORTA_DR_OFFSET ;
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON31_OFFSET ;
} else ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
if ( bank = = 2 ) {
phyaddr = GPIO2_BASE + GPIO_SWPORTA_DR_OFFSET ;
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON16_OFFSET ;
} else if ( bank = = 3 ) {
phyaddr = GPIO3_BASE + GPIO_SWPORTA_DR_OFFSET ;
cru_phyaddr = CRU_BASE + CRU_CLKGATE_CON16_OFFSET ;
} else ;
2023-08-11 15:53:17 +08:00
# endif
/* Ignore unused gpio */
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
writeR ( GPIO_BIT ( index ) , phyaddr ) ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
# if (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
writeR ( 0xffff0180 , cru_phyaddr ) ;
# elif (defined CONFIG_ORANGEPI_R1PLUS)
writeR ( 0xffff9877 , cru_phyaddr ) ;
# endif
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " befor write reg val: 0x%x,index:%d \n " , regval , index ) ;
if ( 0 = = value ) {
regval & = ~ ( 1 < < index ) ;
writeR ( regval , phyaddr ) ;
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " LOW val set over reg val: 0x%x \n " , regval ) ;
} else {
regval | = ( 1 < < index ) ;
writeR ( regval , phyaddr ) ;
regval = readR ( phyaddr ) ;
if ( wiringPiDebug )
printf ( " HIGH val set over reg val: 0x%x \n " , regval ) ;
}
2023-08-11 15:53:17 +08:00
# endif
} else
printf ( " Pin mode failed! \n " ) ;
return 0 ;
}
/*
* OrangePi Digital Read
*/
int OrangePi_digitalRead ( int pin )
{
2023-11-30 12:50:07 +08:00
int bank = pin > > 5 ;
int index = pin - ( bank < < 5 ) ;
int val ;
2023-08-11 15:53:17 +08:00
# if ! (defined CONFIG_ORANGEPI_2G_IOT || defined CONFIG_ORANGEPI_RK3399 || CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800 || defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
unsigned int phyaddr ;
if ( bank = = 11 ) {
phyaddr = GPIOL_BASE + 0x10 ;
} else
phyaddr = GPIO_BASE_MAP + ( bank * 36 ) + 0x10 ;
2023-08-11 15:53:17 +08:00
# endif
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
unsigned int base_address = 0 ;
unsigned int phys_OEN_R ;
unsigned int phys_SET_R ;
unsigned int phys_VAL_R ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
/* version 0.1 not support GPIOC input function */
if ( bank = = 2 )
return - 1 ;
2023-08-11 15:53:17 +08:00
/* Offset of register */
2023-11-30 12:50:07 +08:00
if ( bank = = 0 ) /* group A */
base_address = GPIOA_BASE ;
else if ( bank = = 1 ) /* group B */
base_address = GPIOB_BASE ;
else if ( bank = = 2 ) /* group C */
base_address = GPIOC_BASE ;
else if ( bank = = 3 ) /* group D */
base_address = GPIOD_BASE ;
else
printf ( " Bad pin number \n " ) ;
phys_OEN_R = base_address + OEN_VAL_REGISTER ;
phys_SET_R = base_address + SET_REGISTER ;
phys_VAL_R = base_address + VAL_REGISTER ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
unsigned int phyaddr ;
if ( bank = = 1 )
phyaddr = GPIO1_BASE + GPIO_EXT_PORTA_OFFSET ;
else if ( bank = = 2 )
phyaddr = GPIO2_BASE + GPIO_EXT_PORTA_OFFSET ;
else if ( bank = = 4 )
phyaddr = GPIO4_BASE + GPIO_EXT_PORTA_OFFSET ;
else ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
unsigned int phyaddr ;
if ( bank = = 2 )
phyaddr = GPIO2_BASE + GPIO_EXT_PORTA_OFFSET ;
else if ( bank = = 3 )
phyaddr = GPIO3_BASE + GPIO_EXT_PORTA_OFFSET ;
else ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
if ( ORANGEPI_PIN_MASK [ bank ] [ index ] ! = - 1 ) {
2023-08-11 15:53:17 +08:00
# ifndef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
val = readR ( phyaddr ) ;
val = val > > index ;
val & = 1 ;
if ( wiringPiDebug )
printf ( " Read reg val: 0x%#x, bank:%d, index:%d \n " , val , bank , index ) ;
return val ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
if ( readR ( phys_OEN_R ) & GPIO_BIT ( index ) ) /* Input */
val = ( readR ( phys_VAL_R ) & GPIO_BIT ( index ) ) ? 1 : 0 ;
else /* Ouput */
val = ( readR ( phys_SET_R ) & GPIO_BIT ( index ) ) ? 1 : 0 ;
return val ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
}
return 0 ;
2023-08-11 15:53:17 +08:00
}
/*
* Probe OrangePi Platform .
*/
int isOrangePi ( void )
{
2023-11-30 12:50:07 +08:00
FILE * cpuFd ;
char line [ 120 ] ;
char * d ;
2023-08-11 15:53:17 +08:00
# ifdef CONFIG_ORANGEPI_2G_IOT
2023-11-30 12:50:07 +08:00
/* Support: OrangePi 2G-IOT and OrangePi i96 */
char * OrangePi_string = " rda8810 " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_PC2 || CONFIG_ORANGEPI_ZEROPLUS || CONFIG_ORANGEPI_ZEROPLUS2_H5 || CONFIG_ORANGEPI_PRIME
2023-11-30 12:50:07 +08:00
/* Support: OrangePi PC2 */
char * OrangePi_string = " sun50iw2 " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_WIN
2023-11-30 12:50:07 +08:00
/* Support: OrangePi Win/Win plus */
char * OrangePi_string = " sun50iw1 " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_H3 || CONFIG_ORANGEPI_ZEROPLUS2_H3
2023-11-30 12:50:07 +08:00
/* Support: OrangePi Win/Win plus */
char * OrangePi_string = " sun8i " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_ZERO || CONFIG_ORANGEPI_R1
2023-11-30 12:50:07 +08:00
/* Support: OrangePi zero */
char * OrangePi_string = " sun8i " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_LITE2 || CONFIG_ORANGEPI_3
2023-11-30 12:50:07 +08:00
/* Support: OrangePi zero */
char * OrangePi_string = " sun50iw6 " ;
2023-08-11 15:53:17 +08:00
# elif CONFIG_ORANGEPI_ZERO2
2023-11-30 12:50:07 +08:00
/* Support: OrangePi zero */
char * OrangePi_string = " sun50iw9 " ;
2023-12-01 17:50:18 +08:00
# elif CONFIG_BLUEBERRY
/* Support: OrangePi zero */
char * OrangePi_string = " sun50iw9 " ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
/* Support: OrangePi RK3399 */
char * OrangePi_string = " rk3399 " ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
/* Support: OrangePi R1plus */
char * OrangePi_string = " rk3328 " ;
2023-08-11 15:53:17 +08:00
# else
2023-11-30 12:50:07 +08:00
/* Non-support */
char * OrangePi_string = " none " ;
2023-08-11 15:53:17 +08:00
# endif
2023-11-30 12:50:07 +08:00
//printf("OrangePi String is %s\n", OrangePi_string);
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
return 1 ;
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
if ( ( cpuFd = fopen ( " /proc/cpuinfo " , " r " ) ) = = NULL )
piGpioLayoutOops ( " Unable to open /proc/cpuinfo " ) ;
while ( fgets ( line , 120 , cpuFd ) ! = NULL ) {
if ( strncmp ( line , " Hardware " , 8 ) = = 0 )
break ;
}
2023-08-11 15:53:17 +08:00
2023-11-30 12:50:07 +08:00
fclose ( cpuFd ) ;
2023-08-11 15:53:17 +08:00
# if (defined CONFIG_ORANGEPI_RK3399 || defined CONFIG_ORANGEPI_4 || defined CONFIG_ORANGEPI_4_LTS || defined CONFIG_ORANGEPI_800)
2023-11-30 12:50:07 +08:00
strcpy ( line , " Hardware : Rockchip rk3399 Family " ) ;
2023-08-11 15:53:17 +08:00
# elif (defined CONFIG_ORANGEPI_R1PLUS)
2023-11-30 12:50:07 +08:00
strcpy ( line , " Hardware : Rockchip rk3328 Family " ) ;
# endif
if ( strncmp ( line , " Hardware " , 8 ) ! = 0 )
piGpioLayoutOops ( " No \" Hardware \" line " ) ;
for ( d = & line [ strlen ( line ) - 1 ] ; ( * d = = ' \n ' ) | | ( * d = = ' \r ' ) ; - - d )
* d = 0 ;
if ( wiringPiDebug )
printf ( " piboardRev: Hardware string: %s \n " , line ) ;
if ( strstr ( line , OrangePi_string ) ! = NULL ) {
if ( wiringPiDebug )
printf ( " Hardware:%s \n " , line ) ;
return 1 ;
} else {
if ( wiringPiDebug )
printf ( " Hardware:%s \n " , line ) ;
return 0 ;
}
2023-08-11 15:53:17 +08:00
}
# endif /* CONFIG_ORANGEPI */