From 017c9a43c23d1d6e792c6e24eff11c50328f031f Mon Sep 17 00:00:00 2001 From: Qubot <1445788683@qq.com> Date: Wed, 29 Nov 2023 17:19:41 +0800 Subject: [PATCH] add zero and berry --- README.md | 402 +--- examples/oled_demo.c | 5 +- examples/speed.c | 2 +- gpio/gpio.c | 57 +- gpio/readall.c | 1353 +------------ wiringPi/wiringPi.c | 4342 +++--------------------------------------- wiringPi/wiringPi.h | 469 +---- 7 files changed, 400 insertions(+), 6230 deletions(-) diff --git a/README.md b/README.md index 925a7fb..acc6dab 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,15 @@ -## How to download wiringOP +## How to download wiringPi ``` # apt-get update # apt-get install -y git -# git clone https://github.com/orangepi-xunlong/wiringOP.git +# git clone https://github.com/BigQubot/wiringPi.git ``` -## How to build wiringOP +## How to build wiringPi ``` -# cd wiringOP +# cd wiringPi # ./build clean # ./build ``` @@ -17,374 +17,36 @@ --- ## The output of the gpio readall command -## Allwinner H2+ +## Allwinner H618 -### Orange Pi Zero/R1 +### Banana Pi M4Berry / M4Zero ``` - +------+-----+----------+------+---+ OPi H2 +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PWM.1 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.1 | 3 | 198 | - | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.1 | 4 | 199 | - | 1 | 5 | RXD.2 | ALT2 | 0 | 11 || 12 | 0 | OFF | PA07 | 6 | 7 | - | 0 | 7 | TXD.2 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | OFF | 0 | 15 || 16 | 0 | ALT3 | SDA.1 | 9 | 19 | - | | | 3.3V | | | 17 || 18 | 0 | ALT3 | SCK.1 | 10 | 18 | - | 15 | 11 | MOSI.1 | ALT2 | 1 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | OFF | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PA10 | 16 | 10 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ OPi H2 +---+------+----------+-----+------+ + +------+-----+----------+--------+---+BPI-M4B/Z +---+--------+----------+-----+------+ + | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | + +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+ + | | | 3.3V | | | 1 || 2 | | | 5V | | | + | 208 | 0 | SDA.4 | OFF | 0 | 3 || 4 | | | 5V | | | + | 207 | 1 | SCL.4 | OFF | 0 | 5 || 6 | | | GND | | | + | 211 | 2 | PWM.1 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.1 | 3 | 198 | + | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.1 | 4 | 199 | + | 226 | 5 | TXD.5 | ALT2 | 0 | 11 || 12 | 0 | OFF | PCM_BCLK | 6 | 203 | + | 227 | 7 | RXD.5 | ALT2 | 0 | 13 || 14 | | | GND | | | + | 194 | 8 | PG02 | OFF | 0 | 15 || 16 | 0 | OFF | RTS.1 | 9 | 200 | + | | | 3.3V | | | 17 || 18 | 0 | OFF | CTS.1 | 10 | 201 | + | 231 | 11 | MOSI.1 | ALT4 | 0 | 19 || 20 | | | GND | | | + | 232 | 12 | MISO.1 | ALT4 | 0 | 21 || 22 | 0 | OFF | PG01 | 13 | 193 | + | 230 | 14 | SCLK.1 | ALT4 | 0 | 23 || 24 | 0 | OFF | CS0.1 | 15 | 229 | + | | | GND | | | 25 || 26 | 0 | ALT4 | CS1.1 | 16 | 233 | + | 210 | 17 | SDA.3 | OFF | 0 | 27 || 28 | 0 | OFF | SCL.3 | 18 | 209 | + | 195 | 19 | PG03 | OFF | 0 | 29 || 30 | | | GND | | | + | 196 | 20 | PG04 | OFF | 0 | 31 || 32 | 0 | OFF | PG00 | 21 | 192 | + | 197 | 22 | PG05 | OFF | 0 | 33 || 34 | | | GND | | | + | 204 | 23 | PCM_LRCK | OFF | 0 | 35 || 36 | 0 | OFF | SPDIF | 24 | 228 | + | 202 | 25 | PCM_MCLK | OFF | 0 | 37 || 38 | 0 | OFF | PCM_IN | 26 | 206 | + | | | GND | | | 39 || 40 | 0 | OFF | PCM_OUT | 27 | 205 | + +------+-----+----------+--------+---+----++----+---+--------+----------+-----+------+ + | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | + +------+-----+----------+--------+---+BPI-M4B/Z +---+--------+----------+-----+------+ ``` -## Allwinner H3 - -### Orange Pi Zero Plus 2 - -``` - +------+-----+----------+------+---+ZEROPLUS 2+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PA6 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.2 | 3 | 0 | - | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.2 | 4 | 1 | - | 352 | 5 | S-SCL | ALT2 | 0 | 11 || 12 | 0 | OFF | PD11 | 6 | 107 | - | 353 | 7 | S-SDA | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | OFF | 0 | 15 || 16 | 0 | ALT3 | SDA.1 | 9 | 19 | - | | | 3.3V | | | 17 || 18 | 0 | ALT3 | SCL.1 | 10 | 18 | - | 15 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | OFF | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PD14 | 16 | 110 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ZEROPLUS 2+---+------+----------+-----+------+ -``` - -### OrangePi One/Lite/Pc/Plus/PcPlus/Plus2e - -``` - +------+-----+----------+------+---+OrangePiH3+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | OUT | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | OUT | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PA6 | OUT | 0 | 7 || 8 | 0 | OUT | TXD.3 | 3 | 13 | - | | | GND | | | 9 || 10 | 0 | OUT | RXD.3 | 4 | 14 | - | 1 | 5 | RXD.2 | OUT | 0 | 11 || 12 | 0 | OUT | PD14 | 6 | 110 | - | 0 | 7 | TXD.2 | OUT | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | OUT | 0 | 15 || 16 | 0 | OUT | PC04 | 9 | 68 | - | | | 3.3V | | | 17 || 18 | 0 | OUT | PC07 | 10 | 71 | - | 64 | 11 | MOSI.0 | OUT | 0 | 19 || 20 | | | GND | | | - | 65 | 12 | MISO.0 | OUT | 0 | 21 || 22 | 0 | OUT | RTS.2 | 13 | 2 | - | 66 | 14 | SCLK.0 | OUT | 0 | 23 || 24 | 0 | OUT | CE.0 | 15 | 67 | - | | | GND | | | 25 || 26 | 0 | OUT | PA21 | 16 | 21 | - | 19 | 17 | SDA.1 | OUT | 0 | 27 || 28 | 0 | OUT | SCL.1 | 18 | 18 | - | 7 | 19 | PA07 | OUT | 0 | 29 || 30 | | | GND | | | - | 8 | 20 | PA08 | OUT | 0 | 31 || 32 | 0 | OUT | RTS.1 | 21 | 200 | - | 9 | 22 | PA09 | OUT | 0 | 33 || 34 | | | GND | | | - | 10 | 23 | PA10 | OUT | 0 | 35 || 36 | 0 | OUT | CTS.1 | 24 | 201 | - | 20 | 25 | PA20 | OUT | 0 | 37 || 38 | 0 | OUT | TXD.1 | 26 | 198 | - | | | GND | | | 39 || 40 | 0 | OUT | RXD.1 | 27 | 199 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+OrangePiH3+---+------+----------+-----+------+ -``` - -## Allwinner H5 - -### Orange Pi Zero Plus - -``` - +------+-----+----------+------+---+ ZEROPLUS +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PA6 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.1 | 3 | 198 | - | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.1 | 4 | 199 | - | 1 | 5 | RXD.2 | ALT2 | 0 | 11 || 12 | 0 | OFF | PA07 | 6 | 7 | - | 0 | 7 | TXD.2 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | OFF | 0 | 15 || 16 | 0 | ALT3 | SDA.1 | 9 | 19 | - | | | 3.3V | | | 17 || 18 | 0 | ALT3 | SCL.1 | 10 | 18 | - | 15 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | OFF | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PA10 | 16 | 10 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ ZEROPLUS +---+------+----------+-----+------+ -``` - -### Orange Pi Zero Plus 2 - -``` - +------+-----+----------+------+---+ZEROPLUS 2+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PA6 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.2 | 3 | 0 | - | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.2 | 4 | 1 | - | 352 | 5 | S-SCL | ALT2 | 0 | 11 || 12 | 0 | OFF | PD11 | 6 | 107 | - | 353 | 7 | S-SDA | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | OFF | 0 | 15 || 16 | 0 | ALT3 | SDA.1 | 9 | 19 | - | | | 3.3V | | | 17 || 18 | 0 | ALT3 | SCL.1 | 10 | 18 | - | 15 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | OFF | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PD14 | 16 | 110 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ZEROPLUS 2+---+------+----------+-----+------+ -``` - -### Orange Pi Pc 2 - -``` - +------+-----+----------+------+---+ OPi PC2 +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PWM.1 | OFF | 0 | 7 || 8 | 0 | OFF | PC05 | 3 | 69 | - | | | GND | | | 9 || 10 | 0 | OFF | PC06 | 4 | 70 | - | 1 | 5 | RXD.2 | ALT2 | 0 | 11 || 12 | 0 | OFF | PD14 | 6 | 110 | - | 0 | 7 | TXD.2 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | ALT2 | 0 | 15 || 16 | 0 | OFF | PC04 | 9 | 68 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PC07 | 10 | 71 | - | 15 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | ALT2 | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PA21 | 16 | 21 | - | 19 | 17 | SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1 | 18 | 18 | - | 7 | 19 | PA07 | OFF | 0 | 29 || 30 | | | GND | | | - | 8 | 20 | PA08 | OFF | 0 | 31 || 32 | 0 | ALT2 | RTS.1 | 21 | 200 | - | 9 | 22 | PA09 | OFF | 0 | 33 || 34 | | | GND | | | - | 10 | 23 | PA10 | OFF | 0 | 35 || 36 | 0 | ALT2 | CTS.1 | 24 | 201 | - | 107 | 25 | PD11 | OFF | 0 | 37 || 38 | 0 | ALT2 | TXD.1 | 26 | 198 | - | | | GND | | | 39 || 40 | 0 | ALT2 | RXD.1 | 27 | 199 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ OPi PC2 +---+------+----------+-----+------+ -``` - -### Orange Pi Prime - -``` - +------+-----+----------+------+---+ PRIME +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 12 | 0 | SDA.0 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 11 | 1 | SCL.0 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 6 | 2 | PWM.1 | OFF | 0 | 7 || 8 | 0 | OFF | PC05 | 3 | 69 | - | | | GND | | | 9 || 10 | 0 | OFF | PC06 | 4 | 70 | - | 1 | 5 | RXD.2 | ALT2 | 0 | 11 || 12 | 0 | OFF | PD14 | 6 | 110 | - | 0 | 7 | TXD.2 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 3 | 8 | CTS.2 | ALT2 | 0 | 15 || 16 | 0 | OFF | PC04 | 9 | 68 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PC07 | 10 | 71 | - | 15 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 16 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | ALT2 | RTS.2 | 13 | 2 | - | 14 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 13 | - | | | GND | | | 25 || 26 | 0 | OFF | PC08 | 16 | 72 | - | 19 | 17 | SDA.1 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.1 | 18 | 18 | - | 7 | 19 | PA07 | OFF | 0 | 29 || 30 | | | GND | | | - | 8 | 20 | PA08 | OFF | 0 | 31 || 32 | 0 | OFF | PC09 | 21 | 73 | - | 9 | 22 | PA09 | OFF | 0 | 33 || 34 | | | GND | | | - | 10 | 23 | PA10 | OFF | 0 | 35 || 36 | 0 | OFF | PC10 | 24 | 74 | - | 107 | 25 | PD11 | OFF | 0 | 37 || 38 | 0 | OFF | PC11 | 26 | 75 | - | | | GND | | | 39 || 40 | 0 | OFF | PC12 | 27 | 76 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ PRIME +---+------+----------+-----+------+ -``` - -## Allwinner A64 - -### Orange Pi Win/Winplus - -``` - +------+-----+----------+------+---+ OPi Win +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 227 | 0 | SDA.1 | ALT2 | 0 | 3 || 4 | | | 5V | | | - | 226 | 1 | SCL.1 | ALT2 | 0 | 5 || 6 | | | GND | | | - | 362 | 2 | PL10 | OFF | 0 | 7 || 8 | 0 | ALT2 | PL02 | 3 | 354 | - | | | GND | | | 9 || 10 | 0 | ALT2 | PL03 | 4 | 355 | - | 229 | 5 | RXD.3 | ALT2 | 0 | 11 || 12 | 0 | OFF | PD04 | 6 | 100 | - | 228 | 7 | TXD.3 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 231 | 8 | CTS.3 | OUT | 0 | 15 || 16 | 0 | OFF | PL09 | 9 | 361 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PC04 | 10 | 68 | - | 98 | 11 | MOSI.1 | ALT4 | 0 | 19 || 20 | | | GND | | | - | 99 | 12 | MISO.1 | ALT4 | 0 | 21 || 22 | 0 | OFF | RTS.3 | 13 | 230 | - | 97 | 14 | SCLK.1 | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE.1 | 15 | 96 | - | | | GND | | | 25 || 26 | 0 | OFF | PD06 | 16 | 102 | - | 143 | 17 | SDA.2 | ALT3 | 0 | 27 || 28 | 0 | ALT3 | SCL.2 | 18 | 142 | - | 36 | 19 | PB04 | OFF | 0 | 29 || 30 | | | GND | | | - | 37 | 20 | PB05 | OFF | 0 | 31 || 32 | 0 | ALT2 | RTS.2 | 21 | 34 | - | 38 | 22 | PB06 | OFF | 0 | 33 || 34 | | | GND | | | - | 39 | 23 | PB07 | OFF | 0 | 35 || 36 | 0 | ALT2 | CTS.2 | 24 | 35 | - | 101 | 25 | PD05 | OFF | 0 | 37 || 38 | 0 | ALT2 | TXD.2 | 26 | 32 | - | | | GND | | | 39 || 40 | 0 | ALT2 | RXD.2 | 27 | 33 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ OPi Win +---+------+----------+-----+------+ -``` - -## Allwinner H6 - -### Orange Pi 3/3 LTS - -``` - +------+-----+----------+------+---+ OPi 3 +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 122 | 0 | SDA.0 | OFF | 0 | 3 || 4 | | | 5V | | | - | 121 | 1 | SCL.0 | OFF | 0 | 5 || 6 | | | GND | | | - | 118 | 2 | PWM.0 | OFF | 0 | 7 || 8 | 0 | OFF | PL02 | 3 | 354 | - | | | GND | | | 9 || 10 | 0 | OFF | PL03 | 4 | 355 | - | 120 | 5 | RXD.3 | ALT4 | 0 | 11 || 12 | 0 | OFF | PD18 | 6 | 114 | - | 119 | 7 | TXD.3 | ALT4 | 0 | 13 || 14 | | | GND | | | - | 362 | 8 | PL10 | OFF | 0 | 15 || 16 | 0 | OFF | PD15 | 9 | 111 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PD16 | 10 | 112 | - | 229 | 11 | MOSI.1 | ALT2 | 0 | 19 || 20 | | | GND | | | - | 230 | 12 | MISO.1 | ALT2 | 0 | 21 || 22 | 0 | OFF | PD21 | 13 | 117 | - | 228 | 14 | SCLK.1 | ALT2 | 0 | 23 || 24 | 0 | ALT2 | CE.1 | 15 | 227 | - | | | GND | | | 25 || 26 | 0 | OFF | PL08 | 16 | 360 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ OPi 3 +---+------+----------+-----+------+ -``` - -### Orange Pi Lite2/OnePlus - -``` - +------+-----+----------+------+---+ OPi H6 +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 230 | 0 | SDA.1 | OFF | 0 | 3 || 4 | | | 5V | | | - | 229 | 1 | SCL.1 | OFF | 0 | 5 || 6 | | | GND | | | - | 228 | 2 | PWM1 | OFF | 0 | 7 || 8 | 0 | OFF | PD21 | 3 | 117 | - | | | GND | | | 9 || 10 | 0 | OFF | PD22 | 4 | 118 | - | 120 | 5 | RXD.3 | ALT4 | 0 | 11 || 12 | 0 | OFF | PC09 | 6 | 73 | - | 119 | 7 | TXD.3 | ALT4 | 0 | 13 || 14 | | | GND | | | - | 122 | 8 | CTS.3 | OFF | 0 | 15 || 16 | 0 | OFF | PC08 | 9 | 72 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PC07 | 10 | 71 | - | 66 | 11 | MOSI.0 | ALT4 | 0 | 19 || 20 | | | GND | | | - | 67 | 12 | MISO.0 | ALT4 | 0 | 21 || 22 | 0 | OFF | RTS.3 | 13 | 121 | - | 64 | 14 | SCLK.0 | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE.0 | 15 | 69 | - | | | GND | | | 25 || 26 | 0 | OFF | PH03 | 16 | 227 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ OPi H6 +---+------+----------+-----+------+ -``` - -## Allwinner H616 - -### Orange Pi Zero2/Zero2 LTS/Zero2 B - -``` - +------+-----+----------+------+---+ Zero 2 +---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 229 | 0 | SDA.3 | OFF | 0 | 3 || 4 | | | 5V | | | - | 228 | 1 | SCL.3 | OFF | 0 | 5 || 6 | | | GND | | | - | 73 | 2 | PC9 | OFF | 0 | 7 || 8 | 0 | ALT2 | TXD.5 | 3 | 226 | - | | | GND | | | 9 || 10 | 0 | ALT2 | RXD.5 | 4 | 227 | - | 70 | 5 | PC6 | ALT5 | 0 | 11 || 12 | 0 | OFF | PC11 | 6 | 75 | - | 69 | 7 | PC5 | ALT5 | 0 | 13 || 14 | | | GND | | | - | 72 | 8 | PC8 | OFF | 0 | 15 || 16 | 0 | OFF | PC15 | 9 | 79 | - | | | 3.3V | | | 17 || 18 | 0 | OFF | PC14 | 10 | 78 | - | 231 | 11 | MOSI.1 | ALT4 | 0 | 19 || 20 | | | GND | | | - | 232 | 12 | MISO.1 | ALT4 | 0 | 21 || 22 | 0 | OFF | PC7 | 13 | 71 | - | 230 | 14 | SCLK.1 | ALT4 | 0 | 23 || 24 | 0 | ALT4 | CE.1 | 15 | 233 | - | | | GND | | | 25 || 26 | 0 | OFF | PC10 | 16 | 74 | - | 65 | 17 | PC1 | OFF | 0 | 27 || 28 | | | | | | - | 272 | 18 | PI16 | OFF | 0 | 29 || 30 | | | | | | - | 262 | 19 | PI6 | OFF | 0 | 31 || 32 | | | | | | - | 234 | 20 | PH10 | ALT3 | 0 | 33 || 34 | | | | | | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+ Zero 2 +---+------+----------+-----+------+ -``` - -## RockChip RK3399 - -### Orange Pi RK3399 - -``` - +------+-----+----------+------+---+OPi RK3399+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 43 | 0 | SDA.0 | ALT2 | 1 | 3 || 4 | | | 5V | | | - | 44 | 1 | SCL.0 | ALT2 | 1 | 5 || 6 | | | GND | | | - | 64 | 2 | GPIO4 | ALT3 | 0 | 7 || 8 | 0 | ALT2 | Tx | 3 | 148 | - | | | GND | | | 9 || 10 | 1 | ALT2 | Rx | 4 | 147 | - | 80 | 5 | GPIO17 | ALT2 | 0 | 11 || 12 | 0 | ALT3 | GPIO18 | 6 | 65 | - | 81 | 7 | GPIO27 | ALT2 | 0 | 13 || 14 | | | GND | | | - | 82 | 8 | GPIO22 | ALT2 | 0 | 15 || 16 | 0 | IN | GPIO23 | 9 | 66 | - | | | 3.3V | | | 17 || 18 | 0 | IN | GPIO24 | 10 | 67 | - | 39 | 11 | MOSI | ALT2 | 1 | 19 || 20 | | | GND | | | - | 40 | 12 | MISO | ALT2 | 1 | 21 || 22 | 0 | ALT2 | GPIO25 | 13 | 83 | - | 41 | 14 | SCLK | ALT3 | 1 | 23 || 24 | 1 | ALT3 | CS0 | 15 | 42 | - | | | GND | | | 25 || 26 | 0 | ALT2 | CS1 | 16 | 133 | - | 154 | 17 | DNP1 | IN | 0 | 27 || 28 | 1 | IN | DNP2 | 18 | 50 | - | 68 | 19 | GPIO5 | OUT | 1 | 29 || 30 | | | GND | | | - | 69 | 20 | GPIO6 | OUT | 1 | 31 || 32 | 1 | OUT | GPIO12 | 21 | 76 | - | 70 | 22 | GPIO13 | OUT | 1 | 33 || 34 | | | GND | | | - | 71 | 23 | GPIO19 | OUT | 1 | 35 || 36 | 1 | OUT | GPIO16 | 24 | 73 | - | 72 | 25 | GPIO26 | OUT | 1 | 37 || 38 | 0 | IN | GPIO20 | 26 | 74 | - | | | GND | | | 39 || 40 | 0 | ALT4 | GPIO21 | 27 | 75 | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+OPi RK3399+---+------+----------+-----+------+ - ``` - - ### Orange Pi 4/4B/4 LTS - - ``` - +------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | | | 3.3V | | | 1 || 2 | | | 5V | | | - | 64 | 0 | I2C2_SDA | ALT3 | 0 | 3 || 4 | | | 5V | | | - | 65 | 1 | I2C2_SCL | ALT3 | 0 | 5 || 6 | | | GND | | | - | 150 | 2 | PWM1 | IN | 0 | 7 || 8 | 1 | ALT2 | I2C3_SCL | 3 | 145 | - | | | GND | | | 9 || 10 | 1 | ALT2 | I2C3_SDA | 4 | 144 | - | 33 | 5 | GPIO1_A1 | IN | 0 | 11 || 12 | 1 | IN | GPIO1_C2 | 6 | 50 | - | 35 | 7 | GPIO1_A3 | OUT | 0 | 13 || 14 | | | GND | | | - | 92 | 8 | GPIO2_D4 | OUT | 1 | 15 || 16 | 0 | IN | GPIO1_C6 | 9 | 54 | - | | | 3.3V | | | 17 || 18 | 0 | IN | GPIO1_C7 | 10 | 55 | - | 40 | 11 | SPI1_TXD | ALT2 | 1 | 19 || 20 | | | GND | | | - | 39 | 12 | SPI1_RXD | ALT2 | 1 | 21 || 22 | 0 | IN | GPIO1_D0 | 13 | 56 | - | 41 | 14 | SPI1_CLK | ALT3 | 1 | 23 || 24 | 1 | ALT3 | SPI1_CS | 15 | 42 | - | | | GND | | | 25 || 26 | 0 | IN | GPIO4_C5 | 16 | 149 | - | 64 | 17 | I2C2_SDA | ALT3 | 0 | 27 || 28 | 0 | ALT3 | I2C2_SCL | 18 | 65 | - | | | I2S0_RX | | | 29 || 30 | | | GND | | | - | | | I2S0_TX | | | 31 || 32 | | | I2S_CLK | | | - | | | I2S0_SCK | | | 33 || 34 | | | GND | | | - | | | I2S0_SI0 | | | 35 || 36 | | | I2S0_SO0 | | | - | | | I2S0_SI1 | | | 37 || 38 | | | I2S0_SI2 | | | - | | | GND | | | 39 || 40 | | | I2S0_SI3 | | | - +------+-----+----------+------+---+----++----+---+------+----------+-----+------+ - | GPIO | wPi | Name | Mode | V | Physical | V | Mode | Name | wPi | GPIO | - +------+-----+----------+------+---+OrangePi 4+---+---+--+----------+-----+------+ -``` diff --git a/examples/oled_demo.c b/examples/oled_demo.c index 93c1e30..9afd9ed 100644 --- a/examples/oled_demo.c +++ b/examples/oled_demo.c @@ -5,9 +5,6 @@ * SSD1306 demo of block and font drawing. */ -// -// fixed for OrangePiZero by HypHop -// #include #include @@ -28,7 +25,7 @@ int oled_demo(struct display_info *disp) { oled_putstrto(disp, 0, 9+1, "Welcome to"); disp->font = font1; // oled_putstrto(disp, 0, 18+2, "Spnd tmp 53 C"); - oled_putstrto(disp, 0, 18+2, "----OrangePi----"); + oled_putstrto(disp, 0, 18+2, "----BananaPi----"); disp->font = font2; // oled_putstrto(disp, 0, 27+3, "DrvX tmp 64 C"); oled_putstrto(disp, 0, 27+3, "This is 0.96OLED"); diff --git a/examples/speed.c b/examples/speed.c index aa31e15..f8f7c17 100644 --- a/examples/speed.c +++ b/examples/speed.c @@ -60,7 +60,7 @@ void speedTest (int pin, int maxCount) int main (void) { - printf ("OrangePi Pi wiringPi GPIO speed test program\n") ; + printf ("Banana Pi wiringPi GPIO speed test program\n") ; printf ("=============================================\n") ; // Start the standard way diff --git a/gpio/gpio.c b/gpio/gpio.c index c057e90..8c2c7ec 100644 --- a/gpio/gpio.c +++ b/gpio/gpio.c @@ -63,7 +63,7 @@ extern void doQmode (int argc, char *argv []) ; int wpMode ; -#ifdef CONFIG_ORANGEPI +#ifdef CONFIG_BANANAPI const char *piModelNames[6] = { "Unknown", @@ -71,16 +71,10 @@ const char *piModelNames[6] = "Model B", "Model B+", "Compute Module", -#ifdef CONFIG_ORANGEPI_2G_IOT - "OrangePi 2G-IOT", -#elif CONFIG_ORANGEPI_PC2 || CONFIG_ORANGEPI_ZEROPLUS2_H5 || CONFIG_ORANGEPI_ZEROPLUS || CONFIG_ORANGEPI_PRIME - "OrangePi PC2", -#elif CONFIG_ORANGEPI_A64 - "OrangePi Win/Winplus", -#elif CONFIG_ORANGEPI_H3 || CONFIG_ORANGEPI_ZEROPLUS2_H3 - "OrangePi H3 family", -#elif CONFIG_ORANGEPI_ZERO - "OrangePi Zero", +#ifdef CONFIG_BANANAPI_M4_BERRY + "BananaPi M4 Berry", +#elif CONFIG_BANANAPI_M4_ZERO + "BananaPi M4 Zero", #endif }; #endif @@ -402,7 +396,7 @@ static void doI2Cdetect (UNU int argc, char *argv []) return ; } -#ifndef CONFIG_ORANGEPI +#ifndef CONFIG_BANANAPI if (!moduleLoaded ("i2c_dev")) { fprintf (stderr, "%s: The I2C kernel module(s) are not loaded.\n", argv [0]) ; @@ -486,7 +480,7 @@ static void doExports (UNU int argc, UNU char *argv []) char fName [128] ; char buf [16] ; -#ifdef CONFIG_ORANGEPI +#ifdef CONFIG_BANANAPI for (first = 0, j = 0 ; j < 64 ; ++j) // Crude, but effective #else for (first = 0, i = 0 ; i < 64 ; ++i) // Crude, but effective @@ -494,11 +488,8 @@ static void doExports (UNU int argc, UNU char *argv []) { // Try to read the direction -#ifdef CONFIG_ORANGEPI - i = pinToGpioOrangePi[j]; -#ifdef CONFIG_ORANGEPI_RK3399 - i += 1000; -#endif +#ifdef CONFIG_BANANAPI + i = pinToGpioBananaPi[j]; #endif @@ -587,11 +578,8 @@ void doExport (int argc, char *argv []) } pin = atoi (argv [2]) ; -#ifdef CONFIG_ORANGEPI - pin = pinToGpioOrangePi[pin]; -#ifdef CONFIG_ORANGEPI_RK3399 - pin += 1000; -#endif +#ifdef CONFIG_BANANAPI + pin = pinToGpioBananaePi[pin]; #endif @@ -708,11 +696,8 @@ void doEdge (int argc, char *argv []) } pin = atoi (argv [2]) ; -#ifdef CONFIG_ORANGEPI - pin = pinToGpioOrangePi[pin]; -#ifdef CONFIG_ORANGEPI_RK3399 - pin += 1000; -#endif +#ifdef CONFIG_BANANAPI + pin = pinToGpioBananaPi[pin]; #endif mode = argv [3] ; @@ -786,11 +771,8 @@ void doUnexport (int argc, char *argv []) } pin = atoi (argv [2]) ; -#ifdef CONFIG_ORANGEPI - pin = pinToGpioOrangePi[pin]; -#ifdef CONFIG_ORANGEPI_RK3399 - pin += 1000; -#endif +#ifdef CONFIG_BANANAPI + pin = pinToGpioBananaPi[pin]; #endif @@ -821,11 +803,8 @@ void doUnexportall (char *progName) for (pin = 0 ; pin < 63 ; ++pin) { -#ifdef CONFIG_ORANGEPI - i = pinToGpioOrangePi[pin]; -#ifdef CONFIG_ORANGEPI_RK3399 - i += 1000; -#endif +#ifdef CONFIG_BANANAPI + i = pinToGpioBananaPi[pin]; #endif if ((fd = fopen ("/sys/class/gpio/unexport", "w")) == NULL) @@ -1444,7 +1423,7 @@ int main (int argc, char *argv []) if ((strcmp (argv [1], "-R") == 0) || (strcmp (argv [1], "-V") == 0)) { - printf ("wiringPi for Orange Pi\n") ; + printf ("wiringPi for Banana Pi\n") ; exit (EXIT_SUCCESS) ; } diff --git a/gpio/readall.c b/gpio/readall.c index 7a855f7..8c565a9 100644 --- a/gpio/readall.c +++ b/gpio/readall.c @@ -79,14 +79,9 @@ static char * alts_common [] = "IN", "OUT", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "OFF" }; -static char * alts_rk3588 [] = -{ - "IN", "OUT", "ALT1", "ALT2", "ALT3", "ALT4", "ALT5", "ALT6", "ALT7", "ALT8", "ALT9", "ALT10", "ALT11", "ALT12", "ALT13", "ALT14", -}; +static char ** alts = alts_common; -static char ** alts = alts_rk3588; - -static int physToWpi_PC_2[64] = +static int physToWpi_M4_BERRY[64] = { -1, // 0 -1, -1, // 1, 2 @@ -114,187 +109,38 @@ static int physToWpi_PC_2[64] = -1, -1, -1, -1, -1, -1, -1, -1 // 56-> 63 }; -static char * physNames_PC_2[64] = +static char * physNames_M4_BERRY[64] = { NULL, " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PWM.1", "PC05 ", - " GND", "PC06 ", - " RXD.2", "PD14 ", - " TXD.2", "GND ", - " CTS.2", "PC04 ", - " 3.3V", "PC07 ", - " MOSI.1", "GND ", - " MISO.1", "RTS.2 ", - " SCLK.1", "CE.1 ", - " GND", "PA21 ", - " SDA.1", "SCL.1 ", - " PA07", "GND ", - " PA08", "RTS.1 ", - " PA09", "GND ", - " PA10", "CTS.1 ", - " PD11", "TXD.1 ", + " SDA.4", "5V ", + " SCL.4", "GND ", + " PWM.1", "TXD.1 ", " GND", "RXD.1 ", -}; - -static int physToWpi_PRIME[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 -}; - -static char * physNames_PRIME[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PWM.1", "PC05 ", - " GND", "PC06 ", - " RXD.2", "PD14 ", - " TXD.2", "GND ", - " CTS.2", "PC04 ", - " 3.3V", "PC07 ", + " TXD.5", "PCM_BCLK", + " RXD.5", "GND ", + " PG02", "RTS.1 ", + " 3.3V", "CTS.1 ", " MOSI.1", "GND ", - " MISO.1", "RTS.2 ", - " SCLK.1", "CE.1 ", - " GND", "PC08 ", - " SDA.1", "SCL.1 ", - " PA07", "GND ", - " PA08", "PC09 ", - " PA09", "GND ", - " PA10", "PC10 ", - " PD11", "PC11 ", - " GND", "PC12 ", + " MISO.1", "PG01 ", + " SCLK.1", "CS0.1 ", + " GND", "CS1.1 ", + " SDA.3", "SCL.3 ", + " PG03", "GND ", + " PG04", "PG00 ", + " PG05", "GND ", + "PCM_LRCK", "SPDIF ", + "PCM_MCLK", "PCM_IN ", + " GND", "PCM_OUT ", }; -static int physToWpi_ZERO_PLUS[64] = +static int physToWpi_M4_ZERO[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 - - // Padding: - -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 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_ZERO_PLUS[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PA6", "TXD.1 ", - " GND", "RXD.1 ", - " RXD.2", "PA07 ", - " TXD.2", "GND ", - " CTS.2", "SDA.1 ", - " 3.3V", "SCL.1 ", - " MOSI.1", "GND ", - " MISO.1", "RTS.2 ", - " SCLK.1", "CE.1 ", - " GND", "PA10 ", -}; - -static int physToWpi_ZERO_PLUS_2[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 - - // Padding: - -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 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_ZERO_PLUS_2[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PA6", "TXD.2 ", - " GND", "RXD.2 ", - " S-SCL", "PD11 ", - " S-SDA", "GND ", - " CTS.2", "SDA.1 ", - " 3.3V", "SCL.1 ", - " MOSI.1", "GND ", - " MISO.1", "RTS.2 ", - " SCLK.1", "CE.1 ", - " GND", "PD14 ", -}; - -static int physToWpi_H3[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 0, -1, // 3, 4 - 1, -1, // 5, 6 - 2, 3, // 7, 8 + -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 @@ -303,898 +149,42 @@ static int physToWpi_H3[64] = 11, -1, //19, 20 12, 13, //21, 22 14, 15, //23, 24 - -1, 16, //25, 26 + -1, 16, //25, 26 17, 18, //27, 28 - 19, -1, //29, 30 - 20, 21, //31, 32 + 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 - // Padding: - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_H3[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PA6", "TXD.3 ", - " GND", "RXD.3 ", - " RXD.2", "PD14 ", - " TXD.2", "GND ", - " CTS.2", "PC04 ", - " 3.3V", "PC07 ", - " MOSI.0", "GND ", - " MISO.0", "RTS.2 ", - " SCLK.0", "CE.0 ", - " GND", "PA21 ", - " SDA.1", "SCL.1 ", - " PA07", "GND ", - " PA08", "RTS.1 ", - " PA09", "GND ", - " PA10", "CTS.1 ", - " PA20", "TXD.1 ", - " GND", "RXD.1 ", - " PA04", "PA05 ", -}; - -static int physToWpi_ZERO[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 - - // Padding: - -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, -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 }; -static char * physNames_ZERO[64] = +static char * physNames_M4_ZERO[64] = { - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PA6", "TXD.1 ", - " GND", "RXD.1 ", - " RXD.2", "PA07 ", - " TXD.2", "GND ", - " CTS.2", "SDA.1 ", - " 3.3V", "SCK.1 ", - " MOSI.1", "GND ", - " MISO.1", "RTS.2 ", - " SCLK.1", "CE.1 ", - " GND", "PA10 ", -}; - -static int physToWpi_WIN[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 - - // Padding: - -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 -}; - -static char * physNames_WIN[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.1", "5V ", - " SCL.1", "GND ", - " PL10", "PL02 ", - " GND", "PL03 ", - " RXD.3", "PD04 ", - " TXD.3", "GND ", - " CTS.3", "PL09 ", - " 3.3V", "PC04 ", - " MOSI.1", "GND ", - " MISO.1", "RTS.3 ", - " SCLK.1", "CE.1 ", - " GND", "PD06 ", - " SDA.2", "SCL.2 ", - " PB04", "GND ", - " PB05", "RTS.2 ", - " PB06", "GND ", - " PB07", "CTS.2 ", - " PD05", "TXD.2 ", - " GND", "RXD.2 ", -}; - -static int physToWpi_LITE_2[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 - - // Padding: - -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 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_LITE_2[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.1", "5V ", - " SCL.1", "GND ", - " PH4", "PD21 ", - " GND", "PD22 ", - " RXD.3", "PC9 ", - " TXD.3", "GND ", - " CTS.3", "PC8 ", - " 3.3V", "PC7 ", - " MOSI.0", "GND ", - " MISO.0", "RTS.3 ", - " SCLK.0", "CE.0 ", - " GND", "PH3 ", -}; - -static int physToWpi_3[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 - - // Padding: - -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 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 - -}; - -static char * physNames_3[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " PWM.0", "PL02 ", - " GND", "PL03 ", - " RXD.3", "PD18 ", - " TXD.3", "GND ", - " PL10", "PD15 ", - " 3.3V", "PD16 ", - " MOSI.1", "GND ", - " MISO.1", "PD21 ", - " SCLK.1", "CE.1 ", - " GND", "PL08 ", -}; - -static int physToWpi_ZERO_2[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 0, -1, // 3, 4 - 1, -1, // 5, 6 - 2, 3, // 7, 8 - -1, 4, // 8, 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, 21, //27, 28 - 18, 22, //29, 30 - 19, -1, //31, 32 - 20, -1, //33, 34 - - // Padding: - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, // ... 63 -}; - -static char * physNames_ZERO_2[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.3", "5V ", - " SCL.3", "GND ", - " PC9", "TXD.5 ", - " GND", "RXD.5 ", - " PC6", "PC11 ", - " PC5", "GND ", - " PC8", "PC15 ", - " 3.3V", "PC14 ", - " MOSI.1", "GND ", - " MISO.1", "PC7 ", - " SCLK.1", "CE.1 ", - " GND", "PC10 ", - " PC1", "PWM3 ", - " PI16", "PWM4 ", - " PI6", " ", - " PH10", " ", -}; - -static int physToWpi_ZERO_2_W[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 -}; - -static char * physNames_ZERO_2_W[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.1", "5V ", - " SCL.1", "GND ", - " PWM3", "TXD.0 ", - " GND", "RXD.0 ", - " TXD.5", "PI01 ", - " RXD.5", "GND ", - " TXD.2", "PWM4 ", - " 3.3V", "PH04 ", - " MOSI.1", "GND ", - " MISO.1", "RXD.2 ", - " SCLK.1", "CE.0 ", - " GND", "CE.1 ", - " SDA.2", "SCL.2 ", - " PI00", "GND ", - " PI15", "PWM1 ", - " PI12", "GND ", - " PI02", "PC12 ", - " PI16", "PI04 ", - " GND", "PI03 ", -}; - -static int physToWpi_RK3399[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 - - // 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 -}; - -static char * physNames_RK3399[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.0", "5V ", - " SCL.0", "GND ", - " GPIO4", "Tx ", - " GND", "Rx ", - " GPIO17", "GPIO18 ", - " GPIO27", "GND ", - " GPIO22", "GPIO23 ", - " 3.3V", "GPIO24 ", - " MOSI", "GND ", - " MISO", "GPIO25 ", - " SCLK", "CS0 ", - " GND", "CS1 ", - " DNP1", "DNP2 ", - " GPIO5", "GND ", - " GPIO6", "GPIO12 ", - " GPIO13", "GND ", - " GPIO19", "GPIO16 ", - " GPIO26", "GPIO20 ", - " GND", "GPIO21 ", -}; - -static int physToWpi_4[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 - - // Padding: - -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_4[64] = -{ - NULL, - " 3.3V", "5V ", - "I2C2_SDA", "5V ", - "I2C2_SCL", "GND ", - " PWM1", "I2C3_SCL", - " GND", "I2C3_SDA", - "GPIO1_A1", "GPIO1_C2", - "GPIO1_A3", "GND ", - "GPIO2_D4", "GPIO1_C6", - " 3.3V", "GPIO1_C7", - "SPI1_TXD", "GND ", - "SPI1_RXD", "GPIO1_D0", - "SPI1_CLK", "SPI1_CS ", - " GND", "GPIO4_C5", - "I2C2_SDA", "I2C2_SCL", - " I2S0_RX", "GND ", - " I2S0_TX", "I2S_CLK ", - "I2S0_SCK", "GND ", - "I2S0_SI0", "I2S0_SO0", - "I2S0_SI1", "I2S0_SI2", - " GND", "I2S0_SI3", -}; - -static int physToWpi_4_LTS[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 - - // Padding: - -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, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -static char * physNames_4_LTS[64] = -{ - NULL, - " 3.3V", "5V ", - "I2C8_SDA", "5V ", - "I2C8_SCL", "GND ", - " PWM1", "I2C3_SCL", - " GND", "I2C3_SDA", - "GPIO1_A1", "GPIO1_C2", - "GPIO1_A3", "GND ", - "GPIO2_D4", "GPIO1_C6", - " 3.3V", "GPIO1_C7", - "SPI1_TXD", "GND ", - "SPI1_RXD", "GPIO1_D0", - "SPI1_CLK", "SPI1_CS ", - " GND", "GPIO4_C5", -}; - -static int physToWpi_800[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 - - // 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 -}; - -static char * physNames_800[64] = -{ - NULL, + NULL, " 3.3V", "5V ", " SDA.4", "5V ", " SCL.4", "GND ", - " PWM1", "RXD.4 ", - " GND", "TXD.4 ", - " TXD.2", "GPIO4_D0", - " RXD.2", "GND ", - "GPIO4_C5", "SDA.2 ", - " 3.3V", "SCL.2 ", - "SPI2_TXD", "GND ", - "SPI2_RXD", "GPIO4_D1", - "SPI2_CLK", "SPI2_CS ", - " GND", "GPIO4_D2", -}; - - -static int physToWpi_R1_PLUS[64] = -{ - -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 - - // Padding: - -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 - -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 -}; - -static char * physNames_R1_PLUS[64] = -{ - NULL, - "5V ", "GND ", - "SDA.0 ", "SCK.0 ", - "TXD.1 ", "RXD.1 ", - " ", " ", - " ", "GPIO3_C0", - "CTS.1 ", "RTS.1 ", - "GPIO2_A2", " ", -}; - -static int physToWpi_5[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 - - // 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 -}; - -static char * physNames_5[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.5", "5V ", - " SCL.5", "GND ", - " PWM15", "RXD.0 ", - " GND", "TXD.0 ", - " CAN1_RX", "CAN2_TX ", - " CAN1_TX", "GND ", - " CAN2_RX", "SDA.1 ", - " 3.3V", "SCL.1 ", - "SPI4_TXD", "GND ", - "SPI4_RXD", "GPIO2_D4", - "SPI4_CLK", "SPI4_CS1", - " GND", "PWM1 ", -}; - -static int physToWpi_5B[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, -1, //21,22 - 13, 14, //23,24 - -1, 15, //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 -}; - -static char * physNames_5B[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.5", "5V ", - " SCL.5", "GND ", - " PWM15", "RXD.0 ", - " GND", "TXD.0 ", - " CAN1_RX", "CAN2_TX ", - " CAN1_TX", "GND ", - " CAN2_RX", "SDA.1 ", - " 3.3V", "SCL.1 ", - "SPI4_TXD", "GND ", - "SPI4_RXD", "PowerKey", - "SPI4_CLK", "SPI4_CS1", - " GND", "PWM1 ", -}; - -static int physToWpi_5PLUS[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 - - // 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 -}; - -static char * physNames_5PLUS[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.2", "5V ", - " SCL.2", "GND ", - " PWM14", "GPIO1_A1", - " GND", "GPIO1_A0", - "GPIO1_A4", "GPIO3_A1", - "GPIO1_A7", "GND ", - "GPIO1_B0", "GPIO3_B5", - " 3.3V", "GPIO3_B6", - "SPI0_TXD", "GND ", - "SPI0_RXD", "GPIO1_A2", - "SPI0_CLK", "SPI0_CS0", - " GND", "SPI0_CS1", - "GPIO1_B7", "GPIO1_B6", - "GPIO1_D7", "GND ", - "GPIO3_A0", "GPIO1_A3", - "GPIO3_C2", "GND ", - "GPIO3_A2", "GPIO3_A5", - "GPIO3_C1", "GPIO3_A4", - " GND", "GPIO3_A3", -}; - -static int physToWpi_900[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 - - // 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 -}; - -static char * physNames_900[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.4", "5V ", - " SCL.4", "GND ", - " PWM3", "GPIO1_B6", - " GND", "GPIO1_B7", - "GPIO3_A5", "GPIO3_A1", - "GPIO3_A0", "GND ", - "GPIO1_C1", "GPIO3_B3", - " 3.3V", "GPIO1_D6", - "GPIO1_B2", "GND ", - "GPIO1_B1", "GPIO1_D7", - "GPIO1_B3", "GPIO1_B4", - " GND", "GPIO1_B5", - "GPIO1_A0", "GPIO1_A1", - "GPIO1_A4", "GND ", - "GPIO1_B0", "GPIO3_C2", - "GPIO3_B2", "GND ", - "GPIO3_A2", "GPIO3_B6", - "GPIO3_B5", "GPIO3_A4", - " GND", "GPIO3_A3", -}; - -static int physToWpi_CM4[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 - - // 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 -}; - -static char * physNames_CM4[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA.2", "5V ", - " SCL.2", "GND ", - " PWM15", "RXD.2 ", - " GND", "TXD.2 ", - "GPIO3_C6", "GPIO3_C7", - "GPIO4_A0", "GND ", - " TXD.7", "RXD.7 ", - " 3.3V", "GPIO4_A1", - "SPI3_TXD", "GND ", - "SPI3_RXD", "TXD.9 ", - "SPI3_CLK", "SPI3_CS1", - " GND", "GPIO4_A7", + " PWM.1", "TXD.1 ", + " GND", "RXD.1 ", + " TXD.5", "PCM_BCLK", + " RXD.5", "GND ", + " PG02", "RTS.1 ", + " 3.3V", "CTS.1 ", + " MOSI.1", "GND ", + " MISO.1", "PG01 ", + " SCLK.1", "CS0.1 ", + " GND", "CS1.1 ", " SDA.3", "SCL.3 ", - " RXD.9", "GND ", - "GPIO3_D4", "PWM11 ", - "GPIO3_D7", "GND ", - "GPIO3_D0", "GPIO3_D5", - "GPIO3_D3", "GPIO3_D2", - " GND", "GPIO3_D1", -}; - -static int physToWpi_3PLUS[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 - - // 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 -}; - -static char * physNames_3PLUS[64] = -{ - NULL, - " 3.3V", "5V ", - " SDA_M3", "5V ", - " SCL_M3", "GND ", - " PWM_F", "TXD_A ", - " GND", "RXD_A ", - " PAO7", "PA12 ", - " RXD_B", "GND ", - " TXD_B", "PH8 ", - " 3.3V", "PA3 ", - " MOSI_B", "GND ", - " MISO_B", "PAO5 ", - " SCLK_B", "SSO_B ", - " GND", "PWMAO_C ", - " SDA_M0", "SCL_M0 ", - " PA2", "GND ", - " PC7", "PA4 ", - " PAO10", "GND ", - " PA13", "PA0 ", - " PA7", "PA10 ", - " GND", "PA9 ", + " PG03", "GND ", + " PG04", "PG00 ", + " PG05", "GND ", + "PCM_LRCK", "SPDIF ", + "PCM_MCLK", "PCM_IN ", + " GND", "PCM_OUT ", }; @@ -1357,8 +347,6 @@ static void plus2header (int model) printf (" +-----+-----+---------+------+---+-Pi ZeroW-+---+------+---------+-----+-----+\n") ; else if (model == PI_MODEL_2) printf (" +-----+-----+---------+------+---+---Pi 2---+---+------+---------+-----+-----+\n") ; - else if (model == PI_MODEL_3) - printf (" +-----+-----+---------+------+---+---Pi 3---+---+------+---------+-----+-----+\n") ; else if (model == PI_MODEL_3P) printf (" +-----+-----+---------+------+---+---Pi 3+--+---+------+---------+-----+-----+\n") ; else @@ -1385,7 +373,7 @@ static void piPlusReadall (int model) /* * ReadAll */ -void OrangePiReadAll(int model) +void BananaPiReadAll(int model) { int pin; int tmp = wiringPiDebug; @@ -1393,142 +381,16 @@ void OrangePiReadAll(int model) switch (model) { - case PI_MODEL_PC_2: - printf (" +------+-----+----------+--------+---+ OPi PC2 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_PC_2; - physNames = physNames_PC_2; - alts = alts_common; - break; - case PI_MODEL_PRIME: - printf (" +------+-----+----------+--------+---+ PRIME +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_PRIME; - physNames = physNames_PRIME; - alts = alts_common; - break; - case PI_MODEL_ZERO_PLUS: - printf (" +------+-----+----------+--------+---+ ZEROPLUS +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_ZERO_PLUS; - physNames = physNames_ZERO_PLUS; - alts = alts_common; - break; - case PI_MODEL_ZERO_PLUS_2: - printf (" +------+-----+----------+--------+---+ZEROPLUS 2+---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_ZERO_PLUS_2; - physNames = physNames_ZERO_PLUS_2; - alts = alts_common; - break; - case PI_MODEL_H3: - printf (" +------+-----+----------+--------+---+OrangePiH3+---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_H3; - physNames = physNames_H3; + case PI_MODEL_BERRY: + printf (" +------+-----+----------+--------+---+ BPI-M4B +---+--------+----------+-----+------+\n"); + physToWpi = physToWpi_M4_BERRY; + physNames = physNames_M4_BERRY; alts = alts_common; break; case PI_MODEL_ZERO: - printf (" +------+-----+----------+--------+---+ OPi H2 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_ZERO; - physNames = physNames_ZERO; - alts = alts_common; - break; - case PI_MODEL_WIN: - printf (" +------+-----+----------+--------+---+ OPi Win +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_WIN; - physNames = physNames_WIN; - alts = alts_common; - break; - case PI_MODEL_LTIE_2: - printf (" +------+-----+----------+--------+---+ OPi H6 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_LITE_2; - physNames = physNames_LITE_2; - alts = alts_common; - break; - case PI_MODEL_3: - printf (" +------+-----+----------+--------+---+ OPi 3 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_3; - physNames = physNames_3; - alts = alts_common; - break; - case PI_MODEL_ZERO_2: - printf (" +------+-----+----------+--------+---+ H616 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_ZERO_2; - physNames = physNames_ZERO_2; - alts = alts_common; - break; - case PI_MODEL_ZERO_2_W: - printf (" +------+-----+----------+--------+---+ ZERO2W +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_ZERO_2_W; - physNames = physNames_ZERO_2_W; - alts = alts_common; - break; - case PI_MODEL_RK3399: - printf (" +------+-----+----------+--------+---+OPi RK3399+---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_RK3399; - physNames = physNames_RK3399; - alts = alts_common; - break; - case PI_MODEL_4: - printf (" +------+-----+----------+--------+---+OrangePi 4+---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_4; - physNames = physNames_4; - alts = alts_common; - break; - case PI_MODEL_4_LTS: - printf (" +------+-----+----------+--------+---+ OPi 4 LTS+---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_4_LTS; - physNames = physNames_4_LTS; - alts = alts_common; - break; - case PI_MODEL_800: - physToWpi = physToWpi_800; - physNames = physNames_800; - alts = alts_common; - printf (" +------+-----+----------+--------+---+ opi800 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_R1_PLUS: - printf (" +------+-----+----------+--------+---+ R1 Plus +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_R1_PLUS; - physNames = physNames_R1_PLUS; - alts = alts_common; - break; - case PI_MODEL_5: - printf (" +------+-----+----------+--------+---+ OPI5 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_5; - physNames = physNames_5; - alts = alts_rk3588; - break; - case PI_MODEL_5B: - printf (" +------+-----+----------+--------+---+ PI5B +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_5B; - physNames = physNames_5B; - alts = alts_rk3588; - break; - case PI_MODEL_5_PLUS: - printf (" +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_5PLUS; - physNames = physNames_5PLUS; - alts = alts_rk3588; - break; - case PI_MODEL_900: - printf (" +------+-----+----------+--------+---+ PI 900 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_900; - physNames = physNames_900; - alts = alts_rk3588; - break; - case PI_MODEL_CM4: - printf (" +------+-----+----------+--------+---+ PI CM4 +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_CM4; - physNames = physNames_CM4; - alts = alts_rk3588; - break; - case PI_MODEL_3B: - printf (" +------+-----+----------+--------+---+ PI3B +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_CM4; - physNames = physNames_CM4; - alts = alts_rk3588; - break; - case PI_MODEL_3_PLUS: - printf (" +------+-----+----------+--------+---+ PI3 PLUS +---+--------+----------+-----+------+\n"); - physToWpi = physToWpi_3PLUS; - physNames = physNames_3PLUS; + printf (" +------+-----+----------+--------+---+ BPI-M4Z +---+--------+----------+-----+------+\n"); + physToWpi = physToWpi_M4_ZERO; + physNames = physNames_M4_ZERO; alts = alts_common; break; default: @@ -1541,41 +403,11 @@ void OrangePiReadAll(int model) switch (model) { - case PI_MODEL_H3: - case PI_MODEL_RK3399: - case PI_MODEL_4: - case PI_MODEL_PC_2: - case PI_MODEL_PRIME: - case PI_MODEL_WIN: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - case PI_MODEL_CM4: - case PI_MODEL_3B: - case PI_MODEL_ZERO_2_W: - case PI_MODEL_3_PLUS: + case PI_MODEL_BERRY: + case PI_MODEL_ZERO: for (pin = 1 ; pin <= 40; pin += 2) readallPhys(pin); break; - case PI_MODEL_LTIE_2: - case PI_MODEL_ZERO_PLUS: - case PI_MODEL_ZERO_PLUS_2: - case PI_MODEL_3: - case PI_MODEL_ZERO: - case PI_MODEL_800: - case PI_MODEL_4_LTS: - case PI_MODEL_5: - case PI_MODEL_5B: - for (pin = 1 ; pin <= 26; pin += 2) - readallPhys(pin); - break; - case PI_MODEL_R1_PLUS: - for (pin = 1 ; pin <= 13; pin += 2) - readallPhys(pin); - break; - case PI_MODEL_ZERO_2: - for (pin = 1 ; pin <= 34; pin += 2) - readallPhys(pin); - break; default: printf ("Oops - unable to determine board type... model: %d\n", model); break ; @@ -1586,74 +418,11 @@ void OrangePiReadAll(int model) switch (model) { - case PI_MODEL_PC_2: - printf (" +------+-----+----------+--------+---+ OPi PC2 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_PRIME: - printf (" +------+-----+----------+--------+---+ PRIME +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_ZERO_PLUS: - printf (" +------+-----+----------+--------+---+ ZEROPLUS +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_ZERO_PLUS_2: - printf (" +------+-----+----------+--------+---+ZEROPLUS 2+---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_H3: - printf (" +------+-----+----------+--------+---+OrangePiH3+---+--------+----------+-----+------+\n"); + case PI_MODEL_BERRY: + printf (" +------+-----+----------+--------+---+ BPI-M4B +---+--------+----------+-----+------+\n"); break; case PI_MODEL_ZERO: - printf (" +------+-----+----------+--------+---+ OPi H2 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_WIN: - printf (" +------+-----+----------+--------+---+ OPi Win +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_LTIE_2: - printf (" +------+-----+----------+--------+---+ OPi H6 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_3: - printf (" +------+-----+----------+--------+---+ OPi 3 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_ZERO_2: - printf (" +------+-----+----------+--------+---+ H616 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_ZERO_2_W: - printf (" +------+-----+----------+--------+---+ ZERO2W +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_RK3399: - printf (" +------+-----+----------+--------+---+OPi RK3399+---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_4: - printf (" +------+-----+----------+--------+---+OrangePi 4+---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_4_LTS: - printf (" +------+-----+----------+--------+---+ OPi 4 LTS+---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_800: - printf (" +------+-----+----------+--------+---+ opi800 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_R1_PLUS: - printf (" +------+-----+----------+--------+---+ R1 Plus +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_5: - printf (" +------+-----+----------+--------+---+ OPI5 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_5B: - printf (" +------+-----+----------+--------+---+ PI5B +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_5_PLUS: - printf (" +------+-----+----------+--------+---+ PI5 PLUS +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_900: - printf (" +------+-----+----------+--------+---+ PI900 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_CM4: - printf (" +------+-----+----------+--------+---+ PI CM4 +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_3B: - printf (" +------+-----+----------+--------+---+ PI3B +---+--------+----------+-----+------+\n"); - break; - case PI_MODEL_3_PLUS: - printf (" +------+-----+----------+--------+---+ PI3 PLUS +---+--------+----------+-----+------+\n"); + printf (" +------+-----+----------+--------+---+ BPI-M4Z +---+--------+----------+-----+------+\n"); break; default: printf ("Oops - unable to determine board type... model: %d\n", model); @@ -1682,7 +451,7 @@ void doReadall (void) piBoardId (&model) ; - OrangePiReadAll(model); + BananaPiReadAll(model); } diff --git a/wiringPi/wiringPi.c b/wiringPi/wiringPi.c index 7fa23a2..a83c060 100644 --- a/wiringPi/wiringPi.c +++ b/wiringPi/wiringPi.c @@ -103,281 +103,39 @@ const char * int2bin(uint32_t param) { return buffer; } -static int ORANGEPI_PIN_MASK_3[12][32] = //[BANK] [INDEX] +static int BANANAPI_PIN_MASK_M4_BERRY[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 -}; - -static int ORANGEPI_PIN_MASK_LITE_2[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 - { 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 -}; - -static int ORANGEPI_PIN_MASK_ZERO[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 + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PG + {-1,-1, 2, 3, 4, 5, 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,},//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 -}; - -static int ORANGEPI_PIN_MASK_ZERO_PLUS_2[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 }; -static int ORANGEPI_PIN_MASK_WIN[12][32] = //[BANK] [INDEX] +static int BANANAPI_PIN_MASK_M4_ZERO[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 -}; - -static int ORANGEPI_PIN_MASK_PRIME[9][32] = //[BANK] [INDEX] -{ - { 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 -}; - -static int ORANGEPI_PIN_MASK_PC_2[9][32] = //[BANK] [INDEX] -{ - { 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 -}; - -static int ORANGEPI_PIN_MASK_ZERO_PLUS[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,},//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 -}; - -static int ORANGEPI_PIN_MASK_ZERO_2[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, 5, 6, 7, 8, 9,10,11,-1,-1,14,15,-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 - {-1,-1,-1,-1,-1,-1, 6,-1,-1,-1,-1,-1,-1,-1,-1,-1,16,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PI + { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//PG + {-1,-1, 2, 3, 4, 5, 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,},//PH + { 0, 1, 2, 3, 4,-1,-1,-1,-1, 9,10,11,12,-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,},//PE }; -static int ORANGEPI_PIN_MASK_ZERO_2_W[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,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,-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 -}; - -static int ORANGEPI_PIN_MASK_800[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,}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, - { 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,}, -}; - -static int ORANGEPI_PIN_MASK_4[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 -}; - -static int ORANGEPI_PIN_MASK_4_LTS[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 -}; - -static int ORANGEPI_PIN_MASK_RK3399[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 -}; - -static int ORANGEPI_PIN_MASK_5[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, 4, 5,-1,-1,},//GPIO0 - {-1,-1,-1, 3,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7, 0, 1, 2,-1, 4,-1, 6,-1, -1,-1, 2, 3,-1,-1,-1,-1,},//GPIO1 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1, 4,-1,-1,-1,},//GPIO2 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO3 - {-1,-1,-1, 3, 4,-1,-1,-1, -1,-1, 2, 3, 4,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4 -}; - -static int ORANGEPI_PIN_MASK_5B[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, 4, 5,-1,-1,},//GPIO0 - {-1,-1,-1, 3,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7, 0, 1, 2,-1, 4,-1, 6,-1, -1,-1, 2, 3,-1,-1,-1,-1,},//GPIO1 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO2 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO3 - {-1,-1,-1, 3, 4,-1,-1,-1, -1,-1, 2, 3, 4,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4 -}; - -static int ORANGEPI_PIN_MASK_5PLUS[5][32] = //[BANK] [INDEX] -{ - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1, 7, 0,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO0 - { 0, 1, 2, 3, 4,-1,-1, 7, 0, 1, 2, 3, 4, 5, 6, 7, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7,},//GPIO1 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO2 - { 0, 1, 2, 3, 4, 5,-1,-1, -1,-1,-1,-1,-1, 5, 6,-1, -1, 1, 2,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO3 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4 -}; - -static int ORANGEPI_PIN_MASK_900[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,},//GPIO0 - { 0, 1, 2, 3, 4,-1,-1, 7, 0, 1, 2, 3, 4, 5, 6, 7, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7,},//GPIO1 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO2 - { 0, 1, 2, 3, 4, 5,-1,-1, -1,-1, 2, 3,-1, 5, 6,-1, -1, 1, 2,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO3 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4 -}; - -static int ORANGEPI_PIN_MASK_CM4[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, 0, 1,-1,-1,-1,-1,-1,-1,},//GPIO0 - { 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,},//GPIO1 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO2 - {-1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1, 6, 7, 0, 1, 2, 3, 4, 5,-1, 7,},//GPIO3 - { 0, 1, 2, 3, 4, 5, 6, 7, 0,-1, 2, 3, 4, 5,-1,-1, 0,-1,-1, 3,-1,-1,-1,-1, -1,-1,-1,-1,-1,-1,-1,-1,},//GPIO4 -}; - - -static int ORANGEPI_PIN_MASK_R1_PLUS[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 -}; - -static int ORANGEPI_PIN_MASK_H3[9][32] = //[BANK] [INDEX] -{ - { 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 -}; - -static int ORANGEPI_PIN_MASK_3PLUS[16][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,},//31 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//63 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//95 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//127 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//159 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//191 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//223 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//255 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//287 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//319 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//351 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//383 - {-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,28,29,30,31,},//415 - {-1, 1, 2, 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,31,},//447 - { 0, 1, 2, 3,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,27,28,-1,30,31,},//479 - { 0,-1,-1, 3,-1, 5, 6, 7, 8, 9,10,11,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,-1,},//511 -}; - -int (*ORANGEPI_PIN_MASK)[32]; +int (*BANANAPI_PIN_MASK)[32]; // Extend wiringPi with other pin-based devices and keep track of // them in this structure @@ -428,7 +186,7 @@ struct wiringPiNodeStruct *wiringPiNodes = NULL ; static volatile unsigned int GPIO_PADS ; static volatile unsigned int GPIO_CLOCK_BASE ; -#ifndef CONFIG_ORANGEPI +#ifndef CONFIG_BANANAPI static volatile unsigned int GPIO_BASE ; #endif @@ -540,11 +298,6 @@ int wiringPiReturnCodes = FALSE ; int wiringPiTryGpioMem = FALSE ; sunxi_gpio_info sunxi_gpio_info_t; -rk3328_soc_info rk3328_soc_info_t; -rk3399_soc_info rk3399_soc_info_t; -rk3588_soc_info rk3588_soc_info_t; -rk3566_soc_info rk3566_soc_info_t; -s905d3_gpio_info s905d3_gpio_info_t; // sysFds: // Map a file descriptor from the /sys/class/gpio/gpioX/value @@ -576,471 +329,34 @@ static void (*isrFunctions [64])(void) ; // Take a Wiring pin (0 through X) and re-map it to the GPIO pin // Cope for 3 different board revisions here. -static int OrangePiModel; +static int BananaPiModel; static int *pinToGpio ; -int pinToGpio_3[64] = +int pinToGpio_M4_BERRY[64] = { - 122, 121, - 118, 354, 355, - 120, 114, 119, 362, 111, 112, - 229, 230, 117, 228, 227, 360, + 208, 207, 211, 198, 199, 226, 203, + 227, 194, 200, 201, 231, 232, 193, + 230, 229, 233, 210, 209, 195, 196, + 192, 197, 204, 228, 202, 206, 205, // Padding: - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 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 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 31 + -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, // ... 63 }; -int pinToGpio_LITE_2[64] = +int pinToGpio_M4_ZERO[64] = { - 230, 229, - 228, 117, 118, - 120, 73, 119, 122, 72, 71, - 66, 67, 121, 64, 69, 227, - - // Padding: - -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 pinToGpio_ZERO[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 - -// Padding: - - -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 pinToGpio_H3[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 - -// Padding: - - -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 pinToGpio_ZERO_PLUS_2[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 - -// Padding: - - -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 pinToGpio_WIN[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 pinToGpio_PRIME[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 + 208, 207, 211, 198, 199, 226, 203, + 227, 194, 200, 201, 231, 232, 193, + 230, 229, 233, 210, 209, 195, 196, + 192, 197, 204, 228, 202, 206, 205, // Padding: - -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 pinToGpio_PC_2[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 pinToGpio_ZERO_PLUS[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 - - // Padding: - -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 pinToGpio_ZERO_2[64] = -{ - 229, 228, 73, 226, 227, 70, 75, - 69, 72, 79, 78, 231, 232, 71, - 230, 233, 74, 65, 272, 262, 234, - 224, 225, - - // Padding: - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 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, // ... 63 -}; - -int pinToGpio_ZERO_2_W[64] = -{ - 264, 263, // 0, 1 - 269, 224, // 2, 3 - 225, 226, // 4 5 - 257, 227, // 6, 7 - 261, 270, // 8, 9 - 228, 231, //10,11 - 232, 262, //12,13 - 230, 229, //14,15 - 233, 266, //16,17 - 265, 256, //18,19 - 271, 267, //20,21 - 268, 258, //22,23 - 76, 272, //24,25 - 260, 259, //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 pinToGpio_RK3399[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 pinToGpio_800[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 pinToGpio_4[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 pinToGpio_4_LTS[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 pinToGpio_5[64] = -{ - 47, 46, // 0, 1 - 54, 131, // 2, 3 - 132,138, // 4 5 - 29, 139, // 6, 7 - 28, 59, // 8, 9 - 58, 49, //10,11 - 48, 92, //12,13 - 50, 52, //14,15 - 35, -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 pinToGpio_5B[64] = -{ - 47, 46, // 0, 1 - 54, 131, // 2, 3 - 132,138, // 4 5 - 29, 139, // 6, 7 - 28, 59, // 8, 9 - 58, 49, //10,11 - 48, 50, //12,13 - 52, 35, //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 pinToGpio_5PLUS[64] = -{ - 16, 15, // 0, 1 - 62, 33, // 2, 3 - 32, 36, // 4 5 - 97, 39, // 6, 7 - 40, 109, // 8, 9 - 110, 42, //10,11 - 41, 34, //12,13 - 43, 44, //14,15 - 45, 47, //16,17 - 46, 63, //18,19 - 96, 35, //20,21 - 114, 98, //22,23 - 101,113, //24,25 - 100, 99, //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 pinToGpio_900[64] = -{ - 34, 35, // 0, 1 - 39, 46, // 2, 3 - 47, 101, // 4 5 - 97, 96, // 6, 7 - 113,107, // 8, 9 - 62, 42, //10,11 - 41, 63, //12,13 - 43, 44, //14,15 - 45, 32, //16,17 - 33, 36, //18,19 - 40, 114, //20,21 - 106, 98, //22,23 - 110,109, //24,25 - 100, 99, //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 pinToGpio_CM4[64] = -{ - 140,141, // 0, 1 - 147, 25, // 2, 3 - 24, 118, // 4 5 - 119,128, // 6, 7 - 130,131, // 8, 9 - 129,138, //10,11 - 136,132, //12,13 - 139,134, //14,15 - 135, 32, //16,17 - 33, 133, //18,19 - 124,144, //20,21 - 127,120, //22,23 - 125,123, //24,25 - 122,121, //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 pinToGpio_R1_PLUS[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 pinToGpio_3PLUS[64] = -{ - 490, 491, // 0, 1 - 487, 412, // 2, 3 - 413, 419, // 4 5 - 488, 421, // 6, 7 - 420, 451, // 8, 9 - 479, 447, //10,11 - 448, 417, //12,13 - 450, 449, //14,15 - 418, 415, //16,17 - 414, 478, //18,19 - 475, 480, //20,21 - 422, 489, //22,23 - 476, 483, //24,25 - 486, 485, //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 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 31 + -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, // ... 63 }; // physToGpio: @@ -1050,623 +366,60 @@ int pinToGpio_3PLUS[64] = static int *physToGpio ; -int physToGpio_3[64] = +int physToGpio_M4_BERRY[64] = { - -1, // 0 + -1, // 0 -1, -1, // 1, 2 - 122, -1, - 121, -1, - 118, 354, - -1, 355, - 120, 114, - 119, -1, - 362, 111, - -1, 112, - 229, -1, - 230, 117, - 228, 227, - -1, 360, // 25, 26 - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 42 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 58 - -1, -1, -1, -1, -1, // ... 63 -}; - -int physToGpio_LITE_2[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 230, -1, - 229, -1, - 228, 117, - -1, 118, - 120, 73, - 119, -1, - 122, 72, - -1, 71, - 66, -1, - 67, 121, - 64, 69, - -1, 227, // 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 physToGpio_ZERO[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 -// 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 physToGpio_H3[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 -// Padding: - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -int physToGpio_ZERO_PLUS_2[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 -// Padding: - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -int physToGpio_WIN[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 physToGpio_PRIME[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 - - // Padding: - -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 physToGpio_PC_2[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 physToGpio_ZERO_PLUS[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 - - // Padding: - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 56 - -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -int physToGpio_ZERO_2[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 229, -1, - 228, -1, - 73, 226, - -1, 227, - 70, 75, - 69, -1, - 72, 79, - -1, 78, - 231, -1, - 232, 71, - 230, 233, - -1, 74, // 25, 26 - 65, 224, // 27 - 272, 225, // 29 - 262, -1, // 31 - 234, -1, // 33 - - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 49 - -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 63 -}; - -int physToGpio_ZERO_2_W[64] = -{ - -1, - -1, -1, - 264, -1, - 263, -1, - 269, 224, - -1, 225, - 226, 257, + 208, -1, + 207, -1, + 211, 198, + -1, 199, + 226, 203, 227, -1, - 261, 270, - -1, 228, + 194, 200, + -1, 201, 231, -1, - 232, 262, + 232, 193, 230, 229, - -1, 233, - 266, 265, - 256, -1, - 271, 267, - 268, -1, - 258, 76, - 272, 260, - -1, 259, + -1, 233, // 25, 26 + 210, 209, // 27 + 195, -1, // 29 + 196, 192, // 31 + 197, -1, // 33 + 204, 228, // 35 + 202, 206, // 37 + -1, 205, // 39 - -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 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 49 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 63 }; -int physToGpio_RK3399[64] =//head num map to OrangePi +int physToGpio_M4_ZERO[64] = { - -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 -// 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 -}; + -1, // 0 + -1, -1, // 1, 2 + 208, -1, + 207, -1, + 211, 198, + -1, 199, + 226, 203, + 227, -1, + 194, 200, + -1, 201, + 231, -1, + 232, 193, + 230, 229, + -1, 233, // 25, 26 + 210, 209, // 27 + 195, -1, // 29 + 196, 192, // 31 + 197, -1, // 33 + 204, 228, // 35 + 202, 206, // 37 + -1, 205, // 39 -int physToGpio_800[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 - -// 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 physToGpio_4[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 -// 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 physToGpio_4_LTS[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 - -//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 physToGpio_5[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 47, -1, // 3, 4 - 46, -1, // 5, 6 - 54, 131, // 7, 8 - -1, 132, // 9, 10 - 138, 29, // 11, 12 - 139, -1, // 13, 14 - 28, 59, // 15, 16 - -1, 58, // 17, 18 - 49, -1, // 19, 20 - 48, 92, // 21, 22 - 50, 52, // 23, 24 - -1, 35, // 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 physToGpio_5B[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 47, -1, // 3, 4 - 46, -1, // 5, 6 - 54, 131, // 7, 8 - -1, 132, // 9, 10 - 138, 29, // 11, 12 - 139, -1, // 13, 14 - 28, 59, // 15, 16 - -1, 58, // 17, 18 - 49, -1, // 19, 20 - 48, -1, // 21, 22 - 50, 52, // 23, 24 - -1, 35, // 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 physToGpio_5PLUS[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 16, -1, // 3, 4 - 15, -1, // 5, 6 - 62, 33, // 7, 8 - -1, 32, // 9, 10 - 36, 97, // 11, 12 - 39, -1, // 13, 14 - 40, 109, // 15, 16 - -1, 110, // 17, 18 - 42, -1, // 19, 20 - 41, 34, // 21, 22 - 43, 44, // 23, 24 - -1, 45, // 25, 26 - 47, 46, // 27, 28 - 63, -1, // 29, 30 - 96, 35, // 31, 32 - 114, -1, // 33, 34 - 98, 101, // 35, 36 - 113,100, // 37, 38 - -1, 99, // 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 physToGpio_900[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 34, -1, // 3, 4 - 35, -1, // 5, 6 - 39, 46, // 7, 8 - -1, 47, // 9, 10 - 101, 97, // 11, 12 - 96, -1, // 13, 14 - 113, 107, // 15, 16 - -1, 62, // 17, 18 - 42, -1, // 19, 20 - 41, 63, // 21, 22 - 43, 44, // 23, 24 - -1, 45, // 25, 26 - 32, 33, // 27, 28 - 36, -1, // 29, 30 - 40, 114, // 31, 32 - 106, -1, // 33, 34 - 98, 110, // 35, 36 - 109,100, // 37, 38 - -1, 99, // 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 physToGpio_CM4[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 140, -1, // 3, 4 - 141, -1, // 5, 6 - 147, 25, // 7, 8 - -1, 24, // 9, 10 - 118,119, // 11, 12 - 128, -1, // 13, 14 - 130,131, // 15, 16 - -1, 129, // 17, 18 - 138, -1, // 19, 20 - 136,132, // 21, 22 - 139,134, // 23, 24 - -1, 135, // 25, 26 - 32, 33, // 27, 28 - 133, -1, // 29, 30 - 124,144, // 31, 32 - 127, -1, // 33, 34 - 120,125, // 35, 36 - 123,122, // 37, 38 - -1, 121, // 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 physToGpio_R1_PLUS[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 -// 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 physToGpio_3PLUS[64] = -{ - -1, // 0 - -1, -1, // 1, 2 - 490, -1, // 3, 4 - 491, -1, // 5, 6 - 487, 412, // 7, 8 - -1, 413, // 9, 10 - 419, 488, // 11, 12 - 421, -1, // 13, 14 - 420, 451, // 15, 16 - -1, 479, // 17, 18 - 447, -1, // 19, 20 - 448, 417, // 21, 22 - 450, 449, // 23, 24 - -1, 418, // 25, 26 - 415, 414, // 27, 28 - 478, -1, // 29, 30 - 475, 480, // 31, 32 - 422, -1, // 33, 34 - 489, 476, // 35, 36 - 483, 486, // 37, 38 - -1, 485, // 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 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 49 + -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, // ... 63 }; // gpioToGPFSEL: @@ -1946,7 +699,7 @@ static void usingGpioMemCheck (const char *what) void piGpioLayoutOops (const char *why) { - fprintf (stderr, "Oops: Unable to determine board revision from /etc/orangepi-release or /etc/armbian-release.\n") ; + fprintf (stderr, "Oops: Unable to determine board revision from /etc/bananapi-release or /etc/armbian-release.\n") ; fprintf (stderr, " -> %s\n", why) ; fprintf (stderr, " -> You'd best google the error to find out why.\n") ; exit (EXIT_FAILURE) ; @@ -1960,9 +713,9 @@ void piBoardId (int * model) char revision[40]; unsigned int i = 0; - if ((cpuFd = fopen ("/etc/orangepi-release", "r")) == NULL) + if ((cpuFd = fopen ("/etc/bananapi-release", "r")) == NULL) if ((cpuFd = fopen ("/etc/armbian-release", "r")) == NULL) - piGpioLayoutOops ("Unable to open /etc/orangepi-release or /etc/armbian-release."); + piGpioLayoutOops ("Unable to open /etc/bananapi-release or /etc/armbian-release."); while (fgets (line, 40, cpuFd) != NULL) if (strncmp (line, "BOARD=", 6) == 0) @@ -1998,49 +751,8 @@ void piBoardId (int * model) if (wiringPiDebug) printf ("piBoardId: Board string: %s\n", revision) ; - /**/ if (strncmp(revision, "orangepi3.", 10) == 0) { *model = PI_MODEL_3; } - else if (strncmp(revision, "orangepi3-lts.", 14) == 0) { *model = PI_MODEL_3; } - else if (strncmp(revision, "orangepioneplus.", 16) == 0) { *model = PI_MODEL_LTIE_2; } - else if (strncmp(revision, "orangepilite2.", 14) == 0) { *model = PI_MODEL_LTIE_2; } - else if (strncmp(revision, "orangepizero.", 13) == 0) { *model = PI_MODEL_ZERO; } - else if (strncmp(revision, "orangepizerolts.", 16) == 0) { *model = PI_MODEL_ZERO; } - else if (strncmp(revision, "orangepizero-lts.", 17) == 0) { *model = PI_MODEL_ZERO; } - else if (strncmp(revision, "orangepir1.", 11) == 0) { *model = PI_MODEL_ZERO; } - else if (strncmp(revision, "orangepi-r1.", 12) == 0) { *model = PI_MODEL_ZERO; } - else if (strncmp(revision, "orangepipc.", 11) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepipcplus.", 15) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepione.", 12) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepilite.", 13) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepiplus.", 13) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepiplue2e.", 15) == 0) { *model = PI_MODEL_H3; } - else if (strncmp(revision, "orangepizeroplus2h3.", 20) == 0) { *model = PI_MODEL_ZERO_PLUS_2; } - else if (strncmp(revision, "orangepizeroplus2-h3.", 21) == 0) { *model = PI_MODEL_ZERO_PLUS_2; } - else if (strncmp(revision, "orangepiwin.", 12) == 0) { *model = PI_MODEL_WIN; } - else if (strncmp(revision, "orangepiwinplus.", 16) == 0) { *model = PI_MODEL_WIN; } - else if (strncmp(revision, "orangepiprime.", 14) == 0) { *model = PI_MODEL_PRIME; } - else if (strncmp(revision, "orangepipc2.", 12) == 0) { *model = PI_MODEL_PC_2; } - else if (strncmp(revision, "orangepizeroplus.", 17) == 0) { *model = PI_MODEL_ZERO_PLUS; } - else if (strncmp(revision, "orangepizeroplus2h5.", 20) == 0) { *model = PI_MODEL_ZERO_PLUS_2; } - else if (strncmp(revision, "orangepizeroplus2-h5.", 21) == 0) { *model = PI_MODEL_ZERO_PLUS_2; } - else if (strncmp(revision, "orangepizero2.", 14) == 0) { *model = PI_MODEL_ZERO_2; } - else if (strncmp(revision, "orangepizero2w.", 14) == 0) { *model = PI_MODEL_ZERO_2_W; } - else if (strncmp(revision, "orangepizero3.", 14) == 0) { *model = PI_MODEL_ZERO_2; } - else if (strncmp(revision, "orangepirk3399.", 15) == 0) { *model = PI_MODEL_RK3399; } - else if (strncmp(revision, "orangepi-rk3399.", 16) == 0) { *model = PI_MODEL_RK3399; } - else if (strncmp(revision, "orangepi800.", 12) == 0) { *model = PI_MODEL_800; } - else if (strncmp(revision, "orangepi4.", 10) == 0) { *model = PI_MODEL_4; } - else if (strncmp(revision, "orangepi4-lts.", 14) == 0) { *model = PI_MODEL_4_LTS; } - else if (strncmp(revision, "orangepir1plus.", 15) == 0) { *model = PI_MODEL_R1_PLUS; } - else if (strncmp(revision, "orangepi-r1plus.", 16) == 0) { *model = PI_MODEL_R1_PLUS; } - else if (strncmp(revision, "orangepir1plus-lts.", 18) == 0) { *model = PI_MODEL_R1_PLUS; } - else if (strncmp(revision, "orangepi-r1plus-lts.", 20) == 0) { *model = PI_MODEL_R1_PLUS; } - else if (strncmp(revision, "orangepi5.", 10) == 0) { *model = PI_MODEL_5; } - else if (strncmp(revision, "orangepi5b.", 11) == 0) { *model = PI_MODEL_5B; } - else if (strncmp(revision, "orangepi5plus.", 14) == 0) { *model = PI_MODEL_5_PLUS; } - else if (strncmp(revision, "orangepi900.", 12) == 0) { *model = PI_MODEL_900; } - else if (strncmp(revision, "orangepicm4.", 12) == 0) { *model = PI_MODEL_CM4; } - else if (strncmp(revision, "orangepi3b.", 11) == 0) { *model = PI_MODEL_3B; } - else if (strncmp(revision, "orangepi3plus.", 14) == 0) { *model = PI_MODEL_3_PLUS; } + /**/ if (strncmp(revision, "bpi-m4berry.", 12) == 0) { *model = PI_MODEL_BERRY; } + else if (strncmp(revision, "bpi-m4zero.", 11) == 0) { *model = PI_MODEL_ZERO; } if (wiringPiDebug) printf("piBoardId: model = %d\n", *model); @@ -2118,7 +830,7 @@ int getAlt (int pin) else if (wiringPiMode != WPI_MODE_GPIO) return 0; - alt = OrangePi_get_gpio_mode(pin); + alt = BananaPi_get_gpio_mode(pin); return alt; } @@ -2130,7 +842,7 @@ void print_pwm_reg() uint32_t val2 = readR(SUNXI_PWM_PERIOD); if (wiringPiDebug) { -#ifdef OPI +#ifdef BPI printf("SUNXI_PWM_CTRL_REG: %s\n", int2bin(val)); printf("SUNXI_PWM_PERIOD: %s\n", int2bin(val2)); #else @@ -2182,10 +894,9 @@ void sunxi_pwm_set_enable(int en) { int val = 0; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_BERRY: if(SUNXI_PWM_TYPE == SUNXI_V2_PWM_TYPE) { sunxi_pwm_set_enable_v2(en); @@ -2208,21 +919,27 @@ void sunxi_pwm_set_enable(int en) print_pwm_reg(); break; + case PI_MODEL_ZERO: - case PI_MODEL_3_PLUS: + if(SUNXI_PWM_TYPE == SUNXI_V2_PWM_TYPE) { + sunxi_pwm_set_enable_v2(en); + return; + } - val = readR(S905D3_PWM_MISC); + val = readR(SUNXI_PWM_CTRL_REG); if (en) { - val |= (1 << S905D3_PWM_EN_0 | 1 << S905D3_PWM_EN_1); + val |= (SUNXI_PWM_EN | SUNXI_PWM_SCLK_GATING); } else { - val &= ~(1 << S905D3_PWM_EN_0 | 1 << S905D3_PWM_EN_1); + val &= ~(SUNXI_PWM_EN | SUNXI_PWM_SCLK_GATING); } if (wiringPiDebug) printf(">>function%s,no:%d,enable? :0x%x\n", __func__, __LINE__, val); - writeR(val, S905D3_PWM_MISC); + writeR(val, SUNXI_PWM_CTRL_REG); + delay(1); + print_pwm_reg(); break; @@ -2265,54 +982,9 @@ void sunxi_pwm_set_tone(int pin,int freq) if (wiringPiDebug) printf(">>func:%s no:%d\n", __func__, __LINE__); - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: - case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - - rk3588_set_pwm_reg(pin,&rk3588_soc_info_t); - - if (freq == 0) - sunxi_pwm_set_act (pin, 0); //Off - else { - //enable conlock - val = readR(RK3588_CH_CTRL); - val |= (1 << RK3588_CONLOCK); - writeR(val, RK3588_CH_CTRL); - delay(1); - val = readR(RK3588_CH_CTRL); - - //modifine tone - div = readR(RK3588_CH_CTRL); - div = ((div & 0x00ff0000) >> RK3588_SCALE); //The 16 ~ 23 bits determine the frequency division - div = 2 * div; //The actual frequency division value is (2 * div) - range = 24000000 / (div * freq); //The default pwm clock frequency is 24MHz - - if (range / 2 == 0) { - fprintf(stderr,"gpio: The PWM frequency you set is too high to be possible\n"); - exit(1); - } - - writeR(range,RK3588_CH_PERIOD_HPR); - delay(1); - writeR(range / 2,RK3588_CH_DUTY_LPR); - - //disable conlock - val = readR(RK3588_CH_CTRL); - val &= ~(1 << RK3588_CONLOCK); - writeR(val, RK3588_CH_CTRL); - delay(1); - val = readR(RK3588_CH_CTRL); - - if (wiringPiDebug) - printf("div:%d range:%d\n",div,range); - } - - break; - - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_BERRY: H618_set_pwm_reg(pin,&sunxi_gpio_info_t); @@ -2332,73 +1004,20 @@ void sunxi_pwm_set_tone(int pin,int freq) } break; + case PI_MODEL_ZERO: - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); + H618_set_pwm_reg(pin,&sunxi_gpio_info_t); if (freq == 0) - sunxi_pwm_set_act(pin, 0); // Off + sunxi_pwm_set_act (pin, 0); // Off else { - div = readR(S905D3_PWM_MISC); - div = ((div & 0x7f00) >> 8); //The 8~14 bits determine the frequency division + div = readR(SUNXI_PWM_CTRL_REG); + div &= 0x00ff; //The lower 8 bits determine the frequency division div += 1; //The actual frequency division value is (div + 1) range = 24000000 / (div * freq); //The default pwm clock frequency is 24MHz - if ((range / 2) == 0) { - fprintf(stderr,"gpio: The PWM frequency you set is too high to be possible\n"); - exit(1); - } - - val = readR(S905D3_PWM_DUTY_CYCLE); - val &= 0x0; - val = ((range/2) << 16) | (range/2); - - writeR(val,S905D3_PWM_DUTY_CYCLE); - val = readR(S905D3_PWM_DUTY_CYCLE); - - if (wiringPiDebug) - printf("div:%d range:%d val:%#x\n",div,range,val); - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - rk3566_set_pwm_reg(pin,&rk3566_soc_info_t); - - if (freq == 0) - sunxi_pwm_set_act (pin, 0); //Off - else { - //enable conlock - val = readR(RK3566_CH_CTRL); - val |= (1 << RK3566_CONLOCK); - writeR(val, RK3566_CH_CTRL); - delay(1); - val = readR(RK3566_CH_CTRL); - - //modifine tone - div = readR(RK3566_CH_CTRL); - div = ((div & 0x00ff0000) >> RK3566_SCALE); //The 16 ~ 23 bits determine the frequency division - div = 2 * div; //The actual frequency division value is (2 * div) - range = 24000000 / (div * freq); //The default pwm clock frequency is 24MHz - - if (range / 2 == 0) { - fprintf(stderr,"gpio: The PWM frequency you set is too high to be possible\n"); - exit(1); - } - - writeR(range,RK3566_CH_PERIOD_HPR); - delay(1); - writeR(range / 2,RK3566_CH_DUTY_LPR); - - //disable conlock - val = readR(RK3566_CH_CTRL); - val &= ~(1 << RK3566_CONLOCK); - writeR(val, RK3566_CH_CTRL); - delay(1); - val = readR(RK3566_CH_CTRL); + sunxi_pwm_set_period (pin,range); + sunxi_pwm_set_act (pin, range / 2); if (wiringPiDebug) printf("div:%d range:%d\n",div,range); @@ -2449,50 +1068,9 @@ void sunxi_pwm_set_clk(int pin,int clk) if (wiringPiDebug) printf(">>func:%s no:%d\n", __func__, __LINE__); - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: - case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - - if ((clk < 2) || (clk > 512)) { - fprintf (stderr, "gpio: clock must be between 2 and 512\n") ; - exit (1) ; - } - - rk3588_set_pwm_reg(pin,&rk3588_soc_info_t); - - if (clk == 512) - val = 0; - else - val = clk / 2; - - //enable conlock - regval = readR(RK3588_CH_CTRL); - regval |= (1 << RK3588_CONLOCK); - writeR(regval, RK3588_CH_CTRL); - delay(1); - regval = readR(RK3588_CH_CTRL); - - //modifine clk - regval = regval = readR(RK3588_CH_CTRL); - regval &= ~(0xff << RK3588_SCALE); - regval |= (val << RK3588_SCALE); - writeR(regval, RK3588_CH_CTRL); - delay(1); - regval = readR(RK3588_CH_CTRL); - - //disable conlock - regval = readR(RK3588_CH_CTRL); - regval &= ~(1 << RK3588_CONLOCK); - writeR(regval, RK3588_CH_CTRL); - delay(1); - regval = readR(RK3588_CH_CTRL); - - break; - - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_BERRY: if ((clk < 1) || (clk > 256)) { fprintf (stderr, "gpio: clock must be between 1 and 256\n") ; @@ -2531,74 +1109,42 @@ void sunxi_pwm_set_clk(int pin,int clk) break; - case PI_MODEL_3_PLUS: + case PI_MODEL_ZERO: - if ((clk < 1) || (clk > 128)) { - fprintf (stderr, "gpio: clock must be between 1 and 128\n") ; + if ((clk < 1) || (clk > 256)) { + fprintf (stderr, "gpio: clock must be between 1 and 256\n") ; exit (1) ; } - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); + H618_set_pwm_reg(pin,&sunxi_gpio_info_t); + + if(SUNXI_PWM_TYPE == SUNXI_V2_PWM_TYPE) { + sunxi_pwm_set_clk_v2(clk); + return; + } if (wiringPiDebug) printf(">>function%s,no:%d\n", __func__, __LINE__); - sunxi_pwm_set_enable(0); - val = readR(S905D3_PWM_MISC); + // 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 &= ~(0x007f7f00); + val &= 0xf801f0; - clk = (clk - 1) < 0 ? 0 : (clk - 1) ; - val = val | (clk << S905D3_PWM_CLK_DIV_0) | (clk << S905D3_PWM_CLK_DIV_1); - writeR(val, S905D3_PWM_MISC); + 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); - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if ((clk < 2) || (clk > 512)) { - fprintf (stderr, "gpio: clock must be between 2 and 512\n") ; - exit (1) ; - } - - rk3566_set_pwm_reg(pin,&rk3566_soc_info_t); - - if (clk == 512) - val = 0; - else - val = clk / 2; - - //enable conlock - regval = readR(RK3566_CH_CTRL); - regval |= (1 << RK3566_CONLOCK); - writeR(regval, RK3566_CH_CTRL); delay(1); - regval = readR(RK3566_CH_CTRL); - - //modifine clk - regval = regval = readR(RK3566_CH_CTRL); - regval &= ~(0xff << RK3566_SCALE); - regval |= (val << RK3566_SCALE); - writeR(regval, RK3566_CH_CTRL); - delay(1); - regval = readR(RK3566_CH_CTRL); - - //disable conlock - regval = readR(RK3566_CH_CTRL); - regval &= ~(1 << RK3566_CONLOCK); - writeR(regval, RK3566_CH_CTRL); - delay(1); - regval = readR(RK3566_CH_CTRL); + print_pwm_reg(); break; @@ -2651,44 +1197,42 @@ void sunxi_pwm_set_period(int pin,unsigned int period_cys) if (wiringPiDebug) printf(">>func:%s no:%d\n", __func__, __LINE__); - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: - case PI_MODEL_5B: - case PI_MODEL_5_PLUS: + case PI_MODEL_BERRY: - rk3588_set_pwm_reg(pin,&rk3588_soc_info_t); - - ccr = readR(RK3588_CH_DUTY_LPR); - - if (period_cys < ccr) { - fprintf (stderr, "gpio: ARR should be greater than or equal to CCR (%d)\n",ccr); - exit(1); + if ((period_cys < 1) || (period_cys > 65536)) { + fprintf (stderr, "gpio: range must be between 1 and 65536\n") ; + exit (1) ; } - //enable conlock - val = readR(RK3588_CH_CTRL); - val |= (1 << RK3588_CONLOCK); - writeR(val, RK3588_CH_CTRL); - delay(1); - val = readR(RK3588_CH_CTRL); + H618_set_pwm_reg(pin,&sunxi_gpio_info_t); - //modifine period - writeR(period_cys, RK3588_CH_PERIOD_HPR); - delay(1); - val = readR(RK3588_CH_PERIOD_HPR); + period_cys -= 1; + period_cys &= 0xffff; //set max period to 2^16 + period_cys = period_cys << 16; + val = readR(SUNXI_PWM_PERIOD); - //disable conlock - val = readR(RK3588_CH_CTRL); - val &= ~(1 << RK3588_CONLOCK); - writeR(val, RK3588_CH_CTRL); + 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_PERIOD); delay(1); - val = readR(RK3588_CH_CTRL); + val = readR(SUNXI_PWM_PERIOD); + + if (wiringPiDebug) + printf("readback reg val: 0x%x\n", val); + + print_pwm_reg(); break; - - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_ZERO: if ((period_cys < 1) || (period_cys > 65536)) { fprintf (stderr, "gpio: range must be between 1 and 65536\n") ; @@ -2722,64 +1266,6 @@ void sunxi_pwm_set_period(int pin,unsigned int period_cys) break; - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - ccr = readR(S905D3_PWM_DUTY_CYCLE); - - if (wiringPiDebug) - printf("read reg val: 0x%x\n", ccr); - - ccr = ccr >> 16; - - if (period_cys < ccr) { - fprintf (stderr, "gpio: ARR should be greater than or equal to CCR (%d)\n",ccr) ; - exit(1); - } - - val = (ccr << 16) | (period_cys - ccr); - writeR(val,S905D3_PWM_DUTY_CYCLE); - val = readR(S905D3_PWM_DUTY_CYCLE); - - if (wiringPiDebug) - printf("readback reg val: 0x%x\n", val); - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - rk3566_set_pwm_reg(pin,&rk3566_soc_info_t); - - ccr = readR(RK3566_CH_DUTY_LPR); - - if (period_cys < ccr) { - fprintf (stderr, "gpio: ARR should be greater than or equal to CCR (%d)\n",ccr); - exit(1); - } - - //enable conlock - val = readR(RK3566_CH_CTRL); - val |= (1 << RK3566_CONLOCK); - writeR(val, RK3566_CH_CTRL); - delay(1); - val = readR(RK3566_CH_CTRL); - - //modifine period - writeR(period_cys, RK3566_CH_PERIOD_HPR); - delay(1); - val = readR(RK3566_CH_PERIOD_HPR); - - //disable conlock - val = readR(RK3566_CH_CTRL); - val &= ~(1 << RK3566_CONLOCK); - writeR(val, RK3566_CH_CTRL); - delay(1); - val = readR(RK3566_CH_CTRL); - - break; - default: break; } @@ -2790,44 +1276,49 @@ void sunxi_pwm_set_act(int pin,int act_cys) uint32_t per0 = 0; uint32_t arr = 0; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: - case PI_MODEL_5B: - case PI_MODEL_5_PLUS: + case PI_MODEL_BERRY: - rk3588_set_pwm_reg(pin,&rk3588_soc_info_t); - - arr = readR(RK3588_CH_PERIOD_HPR); - - if ((unsigned int)act_cys > arr) { - fprintf (stderr, "gpio: CCR should be less than or equal to ARR (%d)\n",arr) ; - exit(1); + if ((act_cys < 0) || (act_cys > 65535)) { + fprintf (stderr, "gpio: range must be between 0 and 65535\n"); + exit (1) ; } - //enable conlock - per0 = readR(RK3588_CH_CTRL); - per0 |= (1 << RK3588_CONLOCK); - writeR(per0, RK3588_CH_CTRL); - delay(1); - per0 = readR(RK3588_CH_CTRL); + H618_set_pwm_reg(pin,&sunxi_gpio_info_t); - //modifine act - writeR(act_cys, RK3588_CH_DUTY_LPR); - delay(1); - per0 = readR(RK3588_CH_DUTY_LPR); + arr = sunxi_pwm_get_period(); - //disable conlock - per0 = readR(RK3588_CH_CTRL); - per0 &= ~(1 << RK3588_CONLOCK); - writeR(per0, RK3588_CH_CTRL); + if (wiringPiDebug) + printf("==> no:%d period now is :%d,act_val to be set:%d\n", __LINE__, arr, act_cys); + + if ((uint32_t)act_cys > (arr+1)) { + printf("val pwmWrite 0 <= X <= 1024\n"); + printf("Or you can set new range by yourself by pwmSetRange(range)\n"); + return; + } + + //keep period the same, clear act_cys to 0 first + if (wiringPiDebug) + printf(">>func:%s no:%d\n", __func__, __LINE__); + per0 = readR(SUNXI_PWM_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_PERIOD); delay(1); - per0 = readR(RK3588_CH_CTRL); + print_pwm_reg(); break; - - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_ZERO: if ((act_cys < 0) || (act_cys > 65535)) { fprintf (stderr, "gpio: range must be between 0 and 65535\n"); @@ -2868,65 +1359,6 @@ void sunxi_pwm_set_act(int pin,int act_cys) break; - case PI_MODEL_3_PLUS: - - if (wiringPiDebug) - printf(">>func:%s no:%d\n", __func__, __LINE__); - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - per0 = readR(S905D3_PWM_DUTY_CYCLE); - - if (wiringPiDebug) - printf("read reg val: 0x%x\n", per0); - - arr = ((per0 & 0xffff0000) >> 16) + (per0 & 0x0000ffff); - - if ((unsigned int)act_cys > arr) { - fprintf (stderr, "gpio: CCR should be less than or equal to ARR (%d)\n",arr) ; - exit(1); - } else { - per0 = arr - act_cys; - act_cys &= 0xffff; - act_cys = ((act_cys << 16) | per0); - writeR(act_cys, S905D3_PWM_DUTY_CYCLE); - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - rk3566_set_pwm_reg(pin,&rk3566_soc_info_t); - - arr = readR(RK3566_CH_PERIOD_HPR); - - if ((unsigned int)act_cys > arr) { - fprintf (stderr, "gpio: CCR should be less than or equal to ARR (%d)\n",arr) ; - exit(1); - } - - //enable conlock - per0 = readR(RK3566_CH_CTRL); - per0 |= (1 << RK3566_CONLOCK); - writeR(per0, RK3566_CH_CTRL); - delay(1); - per0 = readR(RK3566_CH_CTRL); - - //modifine act - writeR(act_cys, RK3566_CH_DUTY_LPR); - delay(1); - per0 = readR(RK3566_CH_DUTY_LPR); - - //disable conlock - per0 = readR(RK3566_CH_CTRL); - per0 &= ~(1 << RK3566_CONLOCK); - writeR(per0, RK3566_CH_CTRL); - delay(1); - per0 = readR(RK3566_CH_CTRL); - - break; - default: break; } @@ -2941,7 +1373,7 @@ void sunxi_pwm_set_act(int pin,int act_cys) void pwmSetMode(int pin,int mode) { - if (OrangePiModel == PI_MODEL_ZERO_2 || OrangePiModel == PI_MODEL_ZERO_2_W) { + if (BananaPiModel == PI_MODEL_BERRY || BananaPiModel == PI_MODEL_BERRY) { H618_set_pwm_reg(pin,&sunxi_gpio_info_t); } @@ -3146,59 +1578,6 @@ void pinModeAlt (int pin, int mode) setupCheck ("pinModeAlt") ; -/* -#ifdef CONFIG_ORANGEPI -#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) - if(version == ORANGEPI) { - if (wiringPiDebug) - printf("PinModeAlt: pin:%d,mode:%d\n", pin, mode); - if ((pin & PI_GPIO_MASK) == 0) { - if (wiringPiMode == WPI_MODE_PINS) - pin = pinToGpio[pin]; - else if (wiringPiMode == WPI_MODE_PHYS) - pin = physToGpio[pin]; - else if (wiringPiMode != WPI_MODE_GPIO) - return; - - if (-1 == pin) { - printf("[%s:L%d] the pin:%d is invaild,please check it over!\n", - __func__, __LINE__, pin); - return; - } - - if ( mode <= 1 || mode >= 8){ - printf("[%s:L%d] the mode:%d is invaild,please check it over!\n", - __func__, __LINE__, mode); - return; - } - - OrangePi_set_gpio_alt(pin, mode); - - return; - } else { - return ; - } - } -#endif -#endif -*/ - -/* - if ((pin & PI_GPIO_MASK) == 0) - { - if (wiringPiMode == WPI_MODE_PINS) - pin = pinToGpio [pin] ; - else if (wiringPiMode == WPI_MODE_PHYS) - pin = physToGpio [pin] ; - else if (wiringPiMode != WPI_MODE_GPIO) - return ; - - fSel = gpioToGPFSEL [pin] ; - shift = gpioToShift [pin] ; - - *(gpio + fSel) = (*(gpio + fSel) & ~(7 << shift)) | ((mode & 0x7) << shift) ; - } -*/ } @@ -3231,15 +1610,15 @@ void pinMode (int pin, int mode) } if (mode == INPUT) { - OrangePi_set_gpio_mode(pin, INPUT); + BananaPi_set_gpio_mode(pin, INPUT); return; } else if (mode == OUTPUT) { - OrangePi_set_gpio_mode(pin, OUTPUT); + BananaPi_set_gpio_mode(pin, OUTPUT); return ; } else if (mode == PWM_OUTPUT) { - OrangePi_set_gpio_mode(pin, PWM_OUTPUT); + BananaPi_set_gpio_mode(pin, PWM_OUTPUT); return; } else @@ -3277,13 +1656,13 @@ void pullUpDnControl (int pin, int pud) return ; if (pud == PUD_OFF) { - OrangePi_set_gpio_pullUpDnControl(pin, PUD_OFF); + BananaPi_set_gpio_pullUpDnControl(pin, PUD_OFF); } else if (pud == PUD_UP){ - OrangePi_set_gpio_pullUpDnControl(pin, PUD_UP); + BananaPi_set_gpio_pullUpDnControl(pin, PUD_UP); } else if (pud == PUD_DOWN){ - OrangePi_set_gpio_pullUpDnControl(pin, PUD_DOWN); + BananaPi_set_gpio_pullUpDnControl(pin, PUD_DOWN); } } else // Extension module @@ -3334,7 +1713,7 @@ int digitalRead (int pin) return LOW; } - return OrangePi_digitalRead(pin); + return BananaPi_digitalRead(pin); } else { @@ -3414,7 +1793,7 @@ void digitalWrite (int pin, int value) return; } - OrangePi_digitalWrite(pin, value); + BananaPi_digitalWrite(pin, value); } else { @@ -3989,59 +2368,37 @@ void wiringPiVersion (int *major, int *minor) void set_soc_info(void) { - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_3: - case PI_MODEL_LTIE_2: - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_ZERO: sunxi_gpio_info_t.gpio_base_addr = H6_GPIO_BASE_ADDR; sunxi_gpio_info_t.r_gpio_base_addr = H6_R_GPIO_BASE_ADDR; sunxi_gpio_info_t.gpio_base_offset = 0x0; sunxi_gpio_info_t.r_gpio_base_offset = 0x0; sunxi_gpio_info_t.pwm_base_addr = H6_PWM_BASE; break; - case PI_MODEL_ZERO: - case PI_MODEL_ZERO_PLUS_2: - case PI_MODEL_WIN: - case PI_MODEL_PRIME: - case PI_MODEL_PC_2: - case PI_MODEL_ZERO_PLUS: - case PI_MODEL_H3: - sunxi_gpio_info_t.gpio_base_addr = H3_GPIO_BASE_ADDR; - sunxi_gpio_info_t.r_gpio_base_addr = H3_R_GPIO_BASE_ADDR; - sunxi_gpio_info_t.gpio_base_offset = 0x800; - sunxi_gpio_info_t.r_gpio_base_offset = 0xc00; - sunxi_gpio_info_t.pwm_base_addr = H3_PWM_BASE; + case PI_MODEL_BERRY: + sunxi_gpio_info_t.gpio_base_addr = H6_GPIO_BASE_ADDR; + sunxi_gpio_info_t.r_gpio_base_addr = H6_R_GPIO_BASE_ADDR; + sunxi_gpio_info_t.gpio_base_offset = 0x0; + sunxi_gpio_info_t.r_gpio_base_offset = 0x0; + sunxi_gpio_info_t.pwm_base_addr = H6_PWM_BASE; break; default: break; } - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_3: - case PI_MODEL_LTIE_2: case PI_MODEL_ZERO: - case PI_MODEL_ZERO_PLUS_2: - case PI_MODEL_WIN: - case PI_MODEL_PRIME: - case PI_MODEL_PC_2: - case PI_MODEL_ZERO_PLUS: - case PI_MODEL_H3: - sunxi_gpio_info_t.pwm_ctrl = SUNXI_V1_PWM_CTRL_REG; - sunxi_gpio_info_t.pwm_period = SUNXI_V1_PWM_CH0_PERIOD; - sunxi_gpio_info_t.pwm_clk = SUNXI_V1_PWM_CTRL_REG; - sunxi_gpio_info_t.pwm_en = SUNXI_V1_PWM_CTRL_REG; - sunxi_gpio_info_t.pwm_type = SUNXI_V1_PWM_TYPE; - sunxi_gpio_info_t.pwm_bit_en = SUNXI_V1_PWM_CH0_EN; // SUNXI_PWM_CH0_EN - sunxi_gpio_info_t.pwm_bit_act = SUNXI_V1_PWM_CH0_ACT_STA; // SUNXI_PWM_CH0_ACT_STA - sunxi_gpio_info_t.pwm_bit_sclk = SUNXI_V1_PWM_SCLK_CH0_GATING; // SUNXI_PWM_SCLK_CH0_GATING - sunxi_gpio_info_t.pwm_bit_mode = SUNXI_V1_PWM_CH0_MS_MODE; // SUNXI_PWM_CH0_MS_MODE - sunxi_gpio_info_t.pwm_bit_pulse = SUNXI_V1_PWM_CH0_PUL_START; // SUNXI_PWM_CH0_PUL_START + sunxi_gpio_info_t.pwm_en = SUNXI_V2_PWM_EN_REG; + sunxi_gpio_info_t.pwm_type = SUNXI_V2_PWM_TYPE; // H616 + sunxi_gpio_info_t.pwm_bit_act = SUNXI_V2_PWM_ACT_STA; + sunxi_gpio_info_t.pwm_bit_sclk = SUNXI_V2_PWM_SCLK_GATING; + sunxi_gpio_info_t.pwm_bit_mode = SUNXI_V2_PWM_MS_MODE; + sunxi_gpio_info_t.pwm_bit_pulse = SUNXI_V2_PWM_PUL_START; break; - case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO_2_W: + case PI_MODEL_BERRY: sunxi_gpio_info_t.pwm_en = SUNXI_V2_PWM_EN_REG; sunxi_gpio_info_t.pwm_type = SUNXI_V2_PWM_TYPE; // H616 sunxi_gpio_info_t.pwm_bit_act = SUNXI_V2_PWM_ACT_STA; @@ -4088,125 +2445,24 @@ int wiringPiSetup (void) if (wiringPiDebug) printf ("wiringPi: wiringPiSetup called\n") ; - piBoardId (&OrangePiModel) ; + piBoardId (&BananaPiModel) ; wiringPiMode = WPI_MODE_PINS ; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_3: - pinToGpio = pinToGpio_3; - physToGpio = physToGpio_3; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_3; - break; - case PI_MODEL_LTIE_2: - pinToGpio = pinToGpio_LITE_2; - physToGpio = physToGpio_LITE_2; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_LITE_2; + case PI_MODEL_BERRY: + pinToGpio = pinToGpio_M4_BERRY; + physToGpio = physToGpio_M4_BERRY; + BANANAPI_PIN_MASK = BANANAPI_PIN_MASK_M4_BERRY; break; case PI_MODEL_ZERO: - pinToGpio = pinToGpio_ZERO; - physToGpio = physToGpio_ZERO; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_ZERO; - break; - case PI_MODEL_ZERO_PLUS_2: - pinToGpio = pinToGpio_ZERO_PLUS_2; - physToGpio = physToGpio_ZERO_PLUS_2; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_ZERO_PLUS_2; - break; - case PI_MODEL_WIN: - pinToGpio = pinToGpio_WIN; - physToGpio = physToGpio_WIN; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_WIN; - break; - case PI_MODEL_PRIME: - pinToGpio = pinToGpio_PRIME; - physToGpio = physToGpio_PRIME; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_PRIME; - break; - case PI_MODEL_PC_2: - pinToGpio = pinToGpio_PC_2; - physToGpio = physToGpio_PC_2; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_PC_2; - break; - case PI_MODEL_ZERO_PLUS: - pinToGpio = pinToGpio_ZERO_PLUS; - physToGpio = physToGpio_ZERO_PLUS; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_ZERO_PLUS; - break; - case PI_MODEL_ZERO_2: - pinToGpio = pinToGpio_ZERO_2; - physToGpio = physToGpio_ZERO_2; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_ZERO_2; - break; - case PI_MODEL_ZERO_2_W: - pinToGpio = pinToGpio_ZERO_2_W; - physToGpio = physToGpio_ZERO_2_W; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_ZERO_2_W; - break; - case PI_MODEL_800: - pinToGpio = pinToGpio_800; - physToGpio = physToGpio_800; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_800; - break; - case PI_MODEL_4: - pinToGpio = pinToGpio_4; - physToGpio = physToGpio_4; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_4; - break; - case PI_MODEL_4_LTS: - pinToGpio = pinToGpio_4_LTS; - physToGpio = physToGpio_4_LTS; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_4_LTS; - break; - case PI_MODEL_RK3399: - pinToGpio = pinToGpio_RK3399; - physToGpio = physToGpio_RK3399; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_RK3399; - break; - case PI_MODEL_R1_PLUS: - pinToGpio = pinToGpio_R1_PLUS; - physToGpio = physToGpio_R1_PLUS; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_R1_PLUS; - break; - case PI_MODEL_H3: - pinToGpio = pinToGpio_H3; - physToGpio = physToGpio_H3; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_H3; - break; - case PI_MODEL_5: - pinToGpio = pinToGpio_5; - physToGpio = physToGpio_5; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_5; - break; - case PI_MODEL_5B: - pinToGpio = pinToGpio_5B; - physToGpio = physToGpio_5B; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_5B; - break; - case PI_MODEL_5_PLUS: - pinToGpio = pinToGpio_5PLUS; - physToGpio = physToGpio_5PLUS; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_5PLUS; - break; - case PI_MODEL_900: - pinToGpio = pinToGpio_900; - physToGpio = physToGpio_900; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_900; - break; - case PI_MODEL_CM4: - case PI_MODEL_3B: - pinToGpio = pinToGpio_CM4; - physToGpio = physToGpio_CM4; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_CM4; - break; - case PI_MODEL_3_PLUS: - pinToGpio = pinToGpio_3PLUS; - physToGpio = physToGpio_3PLUS; - ORANGEPI_PIN_MASK = ORANGEPI_PIN_MASK_3PLUS; + pinToGpio = pinToGpio_M4_ZERO; + physToGpio = physToGpio_M4_ZERO; + BANANAPI_PIN_MASK = BANANAPI_PIN_MASK_M4_ZERO; break; default: - printf ("Oops - unable to determine board type... model: %d\n", OrangePiModel); + printf ("Oops - unable to determine board type... model: %d\n", BananaPiModel); break ; } @@ -4228,12 +2484,24 @@ int wiringPiSetup (void) " Try running with sudo?\n", strerror (errno)) ; } - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_3: case PI_MODEL_LTIE_2: case PI_MODEL_ZERO_2: - case PI_MODEL_ZERO: case PI_MODEL_ZERO_PLUS_2: case PI_MODEL_WIN: - case PI_MODEL_PRIME: case PI_MODEL_PC_2: case PI_MODEL_ZERO_PLUS: - case PI_MODEL_H3: case PI_MODEL_ZERO_2_W: + case PI_MODEL_ZERO: + + sunxi_gpio_info_t.pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, sunxi_gpio_info_t.pwm_base_addr); + if ((int32_t)(unsigned long)sunxi_gpio_info_t.pwm == -1) + return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (PWM) failed: %s\n", strerror(errno)); + + sunxi_gpio_info_t.gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, sunxi_gpio_info_t.gpio_base_addr); + if ((int32_t)(unsigned long)sunxi_gpio_info_t.gpio == -1) + return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror(errno)); + + sunxi_gpio_info_t.r_gpio = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, sunxi_gpio_info_t.r_gpio_base_addr); + if ((int32_t)(unsigned long)sunxi_gpio_info_t.r_gpio == -1) + return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO) failed: %s\n", strerror(errno)); + + break; + case PI_MODEL_BERRY: sunxi_gpio_info_t.pwm = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ | PROT_WRITE, MAP_SHARED, fd, sunxi_gpio_info_t.pwm_base_addr); if ((int32_t)(unsigned long)sunxi_gpio_info_t.pwm == -1) @@ -4249,205 +2517,9 @@ int wiringPiSetup (void) break; - case PI_MODEL_R1_PLUS: - - rk3328_soc_info_t.cru_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3328_CRU_BASE); - if ((int32_t)(unsigned long)rk3328_soc_info_t.cru_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (CRU_BASE) failed: %s\n", strerror(errno)); - - rk3328_soc_info_t.grf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3328_GRF_BASE); - if ((int32_t)(unsigned long)rk3328_soc_info_t.grf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GRF_BASE) failed: %s\n", strerror(errno)); - - rk3328_soc_info_t.gpio2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3328_GPIO2_BASE); - if ((int32_t)(unsigned long)rk3328_soc_info_t.gpio2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO2_BASE) failed: %s\n", strerror(errno)); - - rk3328_soc_info_t.gpio3_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3328_GPIO3_BASE); - if ((int32_t)(unsigned long)rk3328_soc_info_t.gpio3_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO3_BASE) failed: %s\n", strerror(errno)); - - break; - - case PI_MODEL_RK3399: case PI_MODEL_4: case PI_MODEL_4_LTS: case PI_MODEL_800: - - rk3399_soc_info_t.gpio2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_GPIO2_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.gpio2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO2_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.cru_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_CRU_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.cru_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (CRU_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.pmucru_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_PMUCRU_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.pmucru_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (PMUCRU_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.grf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_GRF_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.grf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GRF_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.pmugrf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_PMUGRF_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.pmugrf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (PMUGRF_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.gpio1_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_GPIO1_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.grf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO1_BASE) failed: %s\n", strerror(errno)); - - rk3399_soc_info_t.gpio4_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3399_GPIO4_BASE); - if ((int32_t)(unsigned long)rk3399_soc_info_t.gpio4_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (GPIO4_BASE) failed: %s\n", strerror(errno)); - - break; - - case PI_MODEL_5: case PI_MODEL_5B: case PI_MODEL_5_PLUS: case PI_MODEL_900: - - /* GPIO Register */ - rk3588_soc_info_t.gpio0_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO0_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.gpio0_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_GPIO0_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.gpio1_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO1_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.gpio1_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_GPIO1_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.gpio2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO2_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.gpio2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_GPIO2_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.gpio3_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO3_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.gpio3_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_GPIO3_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.gpio4_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_GPIO4_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.gpio4_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_GPIO4_BASE) failed: %s\n", strerror(errno)); - - - rk3588_soc_info_t.pmu1_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PMU1_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu1_ioc_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PMU1_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pmu2_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PMU2_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu2_ioc_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PMU2_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.bus_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_BUS_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.bus_ioc_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_BUS_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.cur_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_CRU_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.cur_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_CRU_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pmu1cur_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PMU1CRU_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu1cur_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PMU1CRU_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.vccio1_4_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_VCCIO1_4_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu1cur_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_VCCIO1_4_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.vccio3_5_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_VCCIO3_5_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu1cur_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_VCCIO3_5_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.vccio6_ioc_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_VCCIO6_IOC_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pmu1cur_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_VCCIO6_IOC_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pwm0_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PWM0_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pwm0_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PWM0_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pwm1_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PWM1_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pwm1_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PWM1_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pwm2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PWM2_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pwm2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PWM2_BASE) failed: %s\n", strerror(errno)); - - rk3588_soc_info_t.pwm3_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3588_PWM3_BASE); - if ((int32_t)(unsigned long)rk3588_soc_info_t.pwm3_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3588_PWM3_BASE) failed: %s\n", strerror(errno)); - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - /* GPIO Register */ - rk3566_soc_info_t.gpio0_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_GPIO0_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.gpio0_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_GPIO0_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.gpio1_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_GPIO1_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.gpio1_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_GPIO1_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.gpio2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_GPIO2_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.gpio2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_GPIO2_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.gpio3_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_GPIO3_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.gpio3_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_GPIO3_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.gpio4_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_GPIO4_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.gpio4_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_GPIO4_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.pmu_grf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_PMU_GRF_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.pmu_grf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_PMU_GRF_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.sys_grf_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_SYS_GRF_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.sys_grf_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_SYS_GRF_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.cru_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_CRU_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.cru_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_CRU_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.pmu_cru_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_PMU_CRU_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.pmu_cru_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_PMU_CRU_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.pwm2_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_PWM2_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.pwm2_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_PWM2_BASE) failed: %s\n", strerror(errno)); - - rk3566_soc_info_t.pwm3_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, RK3566_PWM3_BASE); - if ((int32_t)(unsigned long)rk3566_soc_info_t.pwm3_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (RK3566_PWM3_BASE) failed: %s\n", strerror(errno)); - break; - - case PI_MODEL_3_PLUS: - - /* GPIO Register */ - s905d3_gpio_info_t.gpio_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, S905D3_GPIO_BASE); - if ((int32_t)(unsigned long)s905d3_gpio_info_t.gpio_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (S905D3_GPIO_BASE) failed: %s\n", strerror(errno)); - - s905d3_gpio_info_t.gpio_ao_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, S905D3_GPIO_AO_BASE); - if ((int32_t)(unsigned long)s905d3_gpio_info_t.gpio_ao_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (S905D3_AO_GPIO_BASE) failed: %s\n", strerror(errno)); - - /* PWM Register */ - s905d3_gpio_info_t.gpio_pwm_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, S905D3_GPIO_PWM_BASE); - if ((int32_t)(unsigned long)s905d3_gpio_info_t.gpio_pwm_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (S905D3_GPIO_PWM_BASE) failed: %s\n", strerror(errno)); - - s905d3_gpio_info_t.gpio_pwm_ao_base = (uint32_t *)mmap(0, BLOCK_SIZE, PROT_READ|PROT_WRITE, MAP_SHARED, fd, S905D3_GPIO_PWM_AO_BASE); - if ((int32_t)(unsigned long)s905d3_gpio_info_t.gpio_pwm_ao_base == -1) - return wiringPiFailure(WPI_ALMOST, "wiringPiSetup: mmap (S905D3_GPIO_PWM_AO_BASE) failed: %s\n", strerror(errno)); - break; - default: - printf("model %d is error\n", OrangePiModel); + printf("model %d is error\n", BananaPiModel); break ; } @@ -4528,73 +2600,19 @@ int wiringPiSetupSys (void) if (wiringPiDebug) printf ("wiringPi: wiringPiSetupSys called\n") ; - piBoardId (&OrangePiModel) ; + piBoardId (&BananaPiModel) ; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_3: - pinToGpio = pinToGpio_3; - physToGpio = physToGpio_3; - break; - case PI_MODEL_LTIE_2: - pinToGpio = pinToGpio_LITE_2; - physToGpio = physToGpio_LITE_2; + case PI_MODEL_BERRY: + pinToGpio = pinToGpio_M4_BERRY; + physToGpio = physToGpio_M4_BERRY; break; case PI_MODEL_ZERO: - pinToGpio = pinToGpio_LITE_2; - physToGpio = physToGpio_LITE_2; - break; - case PI_MODEL_ZERO_PLUS_2: - pinToGpio = pinToGpio_ZERO_PLUS_2; - physToGpio = physToGpio_ZERO_PLUS_2; - break; - case PI_MODEL_WIN: - pinToGpio = pinToGpio_WIN; - physToGpio = physToGpio_WIN; - break; - case PI_MODEL_PRIME: - pinToGpio = pinToGpio_PRIME; - physToGpio = physToGpio_PRIME; - break; - case PI_MODEL_PC_2: - pinToGpio = pinToGpio_PC_2; - physToGpio = physToGpio_PC_2; - break; - case PI_MODEL_ZERO_PLUS: - pinToGpio = pinToGpio_ZERO_PLUS; - physToGpio = physToGpio_ZERO_PLUS; - break; - case PI_MODEL_ZERO_2: - pinToGpio = pinToGpio_ZERO_2; - physToGpio = physToGpio_ZERO_2; - break; - case PI_MODEL_ZERO_2_W: - pinToGpio = pinToGpio_ZERO_2_W; - physToGpio = physToGpio_ZERO_2_W; - break; - case PI_MODEL_800: - pinToGpio = pinToGpio_800; - physToGpio = physToGpio_800; - break; - case PI_MODEL_4: - pinToGpio = pinToGpio_4; - physToGpio = physToGpio_4; - break; - case PI_MODEL_4_LTS: - pinToGpio = pinToGpio_4_LTS; - physToGpio = physToGpio_4_LTS; - break; - case PI_MODEL_RK3399: - pinToGpio = pinToGpio_RK3399; - physToGpio = physToGpio_RK3399; - break; - case PI_MODEL_R1_PLUS: - pinToGpio = pinToGpio_R1_PLUS; - physToGpio = physToGpio_R1_PLUS; + pinToGpio = pinToGpio_M4_ZERO; + physToGpio = physToGpio_M4_ZERO; break; default: - pinToGpio = pinToGpio_H3; - physToGpio = physToGpio_H3; break ; } @@ -4624,161 +2642,8 @@ unsigned int readR(unsigned int addr) unsigned int mmap_base; unsigned int mmap_seek; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - val = 0; - - mmap_base = (addr & (0xfffff000)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3588_GPIO0_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio0_base + mmap_seek)); - else if(mmap_base == RK3588_GPIO1_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio1_base + mmap_seek)); - else if(mmap_base == RK3588_GPIO2_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio2_base + mmap_seek)); - else if(mmap_base == RK3588_GPIO3_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio3_base + mmap_seek)); - else if(mmap_base == RK3588_GPIO4_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio4_base + mmap_seek)); - else if(mmap_base == RK3588_PMU1_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu1_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_BUS_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.bus_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.cur_base + mmap_seek)); - else if(mmap_base == RK3588_PMU1CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu1cur_base + mmap_seek)); - else if(mmap_base == RK3588_PMU2_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu2_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_VCCIO1_4_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio1_4_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_VCCIO3_5_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio3_5_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_VCCIO6_IOC_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio6_ioc_base + mmap_seek)); - else if(mmap_base == RK3588_PWM0_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm0_base + mmap_seek)); - else if(mmap_base == RK3588_PWM1_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm1_base + mmap_seek)); - else if(mmap_base == RK3588_PWM2_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm2_base + mmap_seek)); - else if(mmap_base == RK3588_PWM3_BASE) - val = *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm3_base + mmap_seek)); - if (wiringPiDebug) - printf("read %#x from [%#x]\n",val,addr); - - return val; - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - val = 0; - mmap_base = (addr & (0xfffff000)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3399_CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.cru_base + mmap_seek)); - else if(mmap_base == RK3399_GRF_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.grf_base + mmap_seek)); - else if(mmap_base == RK3399_GPIO2_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio2_base + mmap_seek)); - else if(mmap_base == RK3399_GPIO1_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio1_base + mmap_seek)); - else if(mmap_base == RK3399_PMUCRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.pmucru_base + mmap_seek)); - else if(mmap_base == RK3399_PMUGRF_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.pmugrf_base + mmap_seek)); - else if(mmap_base == RK3399_GPIO4_BASE) - val = *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio4_base + mmap_seek)); - - return val; - - break; - - case PI_MODEL_R1_PLUS: - - val = 0; - mmap_base = (addr & (0xfffff000)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3328_CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3328_soc_info_t.cru_base + mmap_seek)); - else if(mmap_base == RK3328_GRF_BASE) - val = *((unsigned int *)((unsigned char *)rk3328_soc_info_t.grf_base + mmap_seek)); - else if(mmap_base == RK3328_GPIO2_BASE) - val = *((unsigned int *)((unsigned char *)rk3328_soc_info_t.gpio2_base + mmap_seek)); - else if(mmap_base == RK3328_GPIO3_BASE) - val = *((unsigned int *)((unsigned char *)rk3328_soc_info_t.gpio3_base + mmap_seek)); - - return val; - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - val = 0; - - mmap_base = (addr & (0xfffff000)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3566_GPIO0_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio0_base + mmap_seek)); - else if(mmap_base == RK3566_GPIO1_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio1_base + mmap_seek)); - else if(mmap_base == RK3566_GPIO2_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio2_base + mmap_seek)); - else if(mmap_base == RK3566_GPIO3_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio3_base + mmap_seek)); - else if(mmap_base == RK3566_GPIO4_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio4_base + mmap_seek)); - else if(mmap_base == RK3566_PMU_GRF_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pmu_grf_base + mmap_seek)); - else if(mmap_base == RK3566_SYS_GRF_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.sys_grf_base + mmap_seek)); - else if(mmap_base == RK3566_CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.cru_base + mmap_seek)); - else if(mmap_base == RK3566_PMU_CRU_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pmu_cru_base + mmap_seek)); - else if(mmap_base == RK3566_PWM2_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pwm2_base + mmap_seek)); - else if(mmap_base == RK3566_PWM3_BASE) - val = *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pwm3_base + mmap_seek)); - - if (wiringPiDebug) - printf("read %#x from [%#x]\n",val,addr); - - return val; - - break; - - case PI_MODEL_3_PLUS: - - val = 0; - - mmap_base = (addr & 0xfffff000); - mmap_seek = (addr - mmap_base); - - if (mmap_base == S905D3_GPIO_BASE) - val = *(s905d3_gpio_info_t.gpio_base + mmap_seek); - else if (mmap_base == S905D3_GPIO_AO_BASE) - val = *(s905d3_gpio_info_t.gpio_ao_base + mmap_seek); - else if (mmap_base == S905D3_GPIO_PWM_BASE) - val = *(s905d3_gpio_info_t.gpio_pwm_base + mmap_seek); - else if (mmap_base == S905D3_GPIO_PWM_AO_BASE) - val = *(s905d3_gpio_info_t.gpio_pwm_ao_base + mmap_seek); - - return val; - - break; - default: val = 0; @@ -4787,7 +2652,7 @@ unsigned int readR(unsigned int addr) if(mmap_base == SUNXI_PWM_BASE) { val = *(sunxi_gpio_info_t.pwm + mmap_seek); if (wiringPiDebug) { - printf("OPI: PWM: readR addr[%x]=[%x]\n",addr,val); + printf("BPI: PWM: readR addr[%x]=[%x]\n",addr,val); } return val; } @@ -4813,143 +2678,8 @@ void writeR(unsigned int val, unsigned int addr) unsigned int mmap_base; unsigned int mmap_seek; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - mmap_base = (addr & (~0xfff)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3588_GPIO0_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio0_base + mmap_seek)) = val; - else if(mmap_base == RK3588_GPIO1_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio1_base + mmap_seek)) = val; - else if(mmap_base == RK3588_GPIO2_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio2_base + mmap_seek)) = val; - else if(mmap_base == RK3588_GPIO3_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio3_base + mmap_seek)) = val; - else if(mmap_base == RK3588_GPIO4_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.gpio4_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PMU1_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu1_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_BUS_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.bus_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_CRU_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.cur_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PMU1CRU_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu1cur_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PMU2_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pmu2_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_VCCIO1_4_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio1_4_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_VCCIO3_5_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio3_5_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_VCCIO6_IOC_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.vccio6_ioc_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PWM0_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm0_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PWM1_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm1_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PWM2_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm2_base + mmap_seek)) = val; - else if(mmap_base == RK3588_PWM3_BASE) - *((unsigned int *)((unsigned char *)rk3588_soc_info_t.pwm3_base + mmap_seek)) = val; - - if (wiringPiDebug) - printf("write %#x to [%#x]\n",val,addr); - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - mmap_base = (addr & (~0xfff)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3399_CRU_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.cru_base + mmap_seek)) = val; - else if(mmap_base == RK3399_GRF_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.grf_base + mmap_seek)) = val; - else if(mmap_base == RK3399_GPIO2_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio2_base + mmap_seek)) = val; - else if(mmap_base == RK3399_GPIO1_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio1_base + mmap_seek)) = val; - else if(mmap_base == RK3399_PMUCRU_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.pmucru_base + mmap_seek)) = val; - else if(mmap_base == RK3399_PMUGRF_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.pmugrf_base + mmap_seek)) = val; - else if(mmap_base == RK3399_GPIO4_BASE) - *((unsigned int *)((unsigned char *)rk3399_soc_info_t.gpio4_base + mmap_seek)) = val; - - break; - - case PI_MODEL_R1_PLUS: - - mmap_base = (addr & (~0xfff)); - mmap_seek = (addr - mmap_base); - if(mmap_base == RK3328_CRU_BASE) - *((unsigned int *)((unsigned char *)rk3328_soc_info_t.cru_base + mmap_seek)) = val; - else if(mmap_base == RK3328_GRF_BASE) - *((unsigned int *)((unsigned char *)rk3328_soc_info_t.grf_base + mmap_seek)) = val; - else if(mmap_base == RK3328_GPIO2_BASE) - *((unsigned int *)((unsigned char *)rk3328_soc_info_t.gpio2_base + mmap_seek)) = val; - else if(mmap_base == RK3328_GPIO3_BASE) - *((unsigned int *)((unsigned char *)rk3328_soc_info_t.gpio3_base + mmap_seek)) = val; - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - mmap_base = (addr & (~0xfff)); - mmap_seek = (addr - mmap_base); - - if(mmap_base == RK3566_GPIO0_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio0_base + mmap_seek)) = val; - else if(mmap_base == RK3566_GPIO1_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio1_base + mmap_seek)) = val; - else if(mmap_base == RK3566_GPIO2_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio2_base + mmap_seek)) = val; - else if(mmap_base == RK3566_GPIO3_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio3_base + mmap_seek)) = val; - else if(mmap_base == RK3566_GPIO4_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.gpio4_base + mmap_seek)) = val; - else if(mmap_base == RK3566_PMU_GRF_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pmu_grf_base + mmap_seek)) = val; - else if(mmap_base == RK3566_SYS_GRF_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.sys_grf_base + mmap_seek)) = val; - else if(mmap_base == RK3566_CRU_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.cru_base + mmap_seek)) = val; - else if(mmap_base == RK3566_PMU_CRU_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pmu_cru_base + mmap_seek)) = val; - else if(mmap_base == RK3566_PWM2_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pwm2_base + mmap_seek)) = val; - else if(mmap_base == RK3566_PWM3_BASE) - *((unsigned int *)((unsigned char *)rk3566_soc_info_t.pwm3_base + mmap_seek)) = val; - - if (wiringPiDebug) - printf("write %#x to [%#x]\n",val,addr); - - break; - - case PI_MODEL_3_PLUS: - - mmap_base = (addr & 0xfffff000); - mmap_seek = (addr - mmap_base); - - if (mmap_base == S905D3_GPIO_BASE) { - *(s905d3_gpio_info_t.gpio_base + mmap_seek) = val; - } else if (mmap_base == S905D3_GPIO_AO_BASE) { - *(s905d3_gpio_info_t.gpio_ao_base + mmap_seek) = val; - } else if (mmap_base == S905D3_GPIO_PWM_BASE) { - *(s905d3_gpio_info_t.gpio_pwm_base + mmap_seek) = val; - } else if (mmap_base == S905D3_GPIO_PWM_AO_BASE) { - *(s905d3_gpio_info_t.gpio_pwm_ao_base + mmap_seek) = val; - } - - break; default: @@ -4958,7 +2688,7 @@ void writeR(unsigned int val, unsigned int addr) if (mmap_base == SUNXI_PWM_BASE) { *(sunxi_gpio_info_t.pwm + mmap_seek) = val; if (wiringPiDebug ){ - printf("OPI: PWM: writeR addr[%x]=[%x]\n",addr,val); + printf("BPI: PWM: writeR addr[%x]=[%x]\n",addr,val); } return; } @@ -4972,7 +2702,7 @@ void writeR(unsigned int val, unsigned int addr) } } -int OrangePi_get_gpio_mode(int pin) +int BananaPi_get_gpio_mode(int pin) { unsigned int regval = 0; unsigned int bank = pin >> 5; @@ -4980,183 +2710,10 @@ int OrangePi_get_gpio_mode(int pin) unsigned int phyaddr = 0; unsigned char mode = -1; unsigned int grf_phyaddr = 0, ddr_phyaddr = 0; - unsigned int rk3588_pmu1_ioc_phyaddr; - unsigned int rk3588_bus_ioc_phyaddr; int offset; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - offset = ((index - ((index >> 3) << 3))); - if(bank == 1){ - grf_phyaddr = RK3399_PMUGRF_BASE + ((index >> 3) << 2) + 0x10; - ddr_phyaddr = RK3399_GPIO1_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - else if(bank == 2){ - grf_phyaddr = RK3399_GRF_BASE + ((index >> 3) << 2); - ddr_phyaddr = RK3399_GPIO2_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - else if(bank == 4){ - grf_phyaddr = RK3399_GRF_BASE + ((index >> 3) << 2) +0x20; - ddr_phyaddr = RK3399_GPIO4_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - - if (ORANGEPI_PIN_MASK[bank][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 - } - break; - - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - rk3588_bus_ioc_phyaddr = RK3588_BUS_IOC_BASE + (0x20 * bank) + ((index >> 2) << 2); - if(bank == 0){ - if (index < 12){ - ;/* Todo */ - }else{ - ddr_phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - } - else if(bank == 1){ - ddr_phyaddr = RK3588_GPIO1_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - else if(bank == 2){ - ddr_phyaddr = RK3588_GPIO2_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - else if(bank == 3){ - ddr_phyaddr = RK3588_GPIO3_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - else if(bank == 4){ - ddr_phyaddr = RK3588_GPIO4_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - - if (ORANGEPI_PIN_MASK[bank][index] != -1) { - - if ( bank == 0 && index < 12 ) - ;/*Todo*/ - else - regval = readR(rk3588_bus_ioc_phyaddr); - - mode = (regval >> ((index % 4) << 2)) & 0xf;//获取控制模式的那四位的值 - if(mode == 0){ //如果是gpio模式 - regval = readR(ddr_phyaddr); //获取gpio方向寄存器的值 - return (regval >> (index % 16)) & 0x1; //index对应的gpio的方向值,0为in,1为out - } - - return mode + 1; //如果不是gpio模式,返回的alt,从2开始,0和1是in和out - } - break; - - case PI_MODEL_R1_PLUS: - - offset = ((index - ((index >> 3) << 3))); - if(bank == 2) - { - //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 = RK3328_GRF_BASE + 0x20; - } - else if(3 == (index >> 3))//gpio2_dx - { - grf_phyaddr = RK3328_GRF_BASE + 0x34; - } - } - else if(bank == 3) - { - //grf_phyaddr = GRF_BASE + ((index >> 3) << 2) +0x20; - ddr_phyaddr = RK3328_GPIO3_BASE + RK3328_GPIO_SWPORTA_DDR_OFFSET; - if (0 == (index >> 3)) - { - if(4 == offset)//gpio3_a4 - { - grf_phyaddr = RK3328_GRF_BASE + 0x38; - } - else//gpio3_a567 - { - grf_phyaddr = RK3328_GRF_BASE + 0x3c; - } - } - else if(2 == (index >> 3)) //gpio3_c - { - grf_phyaddr = RK3328_GRF_BASE + 0x48; - } - } - - if (ORANGEPI_PIN_MASK[bank][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; - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if(bank == 0){ - grf_phyaddr = RK3566_PMU_GRF_BASE + RK3566_PMU_GRF_GPIO0A_IOMUX_L_OFFSET + ((pin >> 2) << 2); - ddr_phyaddr = RK3566_GPIO0_BASE + RK3566_GPIO_SWPORT_DDR_L_OFFSET + ((index >> 4) << 2); - } - else{ - grf_phyaddr = RK3566_SYS_GRF_BASE + RK3566_GRF_GPIO1A_IOMUX_L_OFFSET + (((pin - 32) >> 2) << 2); - ddr_phyaddr = RK3566_GPIO1_BASE + ((bank - 1) << 16) + RK3566_GPIO_SWPORT_DDR_L_OFFSET + ((index >> 4) << 2); - } - - offset = (index % 4) << 2; - - if (ORANGEPI_PIN_MASK[bank][index] != -1) { - regval = readR(grf_phyaddr); - mode = (regval >> offset) & 0x7; - - if(mode == 0){ //如果是gpio模式 - regval = readR(ddr_phyaddr);//获取gpio方向寄存器的值 - return (regval >> (index % 16)) & 0x1;//index对应的gpio的方向值,0为in,1为out - } - return mode + 1;//如果不是gpio模式,返回的alt,从2开始,0和1是in和out - } - break; - - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - if (ORANGEPI_PIN_MASK[bank][index] != -1) { - regval = readR(S905D3_GPIO_MUX); - mode = (regval >> S905D3_GPIO_MUX_OFFSET) & 0x7; - - if(mode == 0){ //如果是gpio模式 - regval = readR(S905D3_GPIO_OUT_EN);//获取gpio方向寄存器的值 - return ((regval >> S905D3_GPIO_OUT_EN_OFFSET) + 1) & 0x1;//0为out,1为in - } - return mode + 1;//如果不是gpio模式,返回的alt,从2开始,0和1是out和in - } - break; default: @@ -5168,7 +2725,7 @@ int OrangePi_get_gpio_mode(int pin) phyaddr = sunxi_gpio_info_t.gpio_base_addr + sunxi_gpio_info_t.gpio_base_offset + (bank * 36) + ((index >> 3) << 2); /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { regval = readR(phyaddr); mode = (regval >> offset) & 7; @@ -5218,252 +2775,11 @@ void H618_set_pwm_reg(int pin,sunxi_gpio_info *sunxi_gpio_info_ptr) } } -void s905d3_set_gpio_reg(int pin,s905d3_gpio_info *s905d3_gpio_info_ptr) -{ - if (pin >= 476 && pin <= 491) { //GPIOA——16pin - - s905d3_gpio_info_ptr->gpio_out_en = S905D3_GPIOA_OUT_EN_REG; - s905d3_gpio_info_ptr->gpio_out = S905D3_GPIOA_OUT_REG; - s905d3_gpio_info_ptr->gpio_in = S905D3_GPIOA_IN_REG; - s905d3_gpio_info_ptr->gpio_pupd = S905D3_GPIOA_PUPD_REG; - s905d3_gpio_info_ptr->gpio_puen = S905D3_GPIOA_PUEN_REG; - s905d3_gpio_info_ptr->gpio_out_offset = pin - 476; - s905d3_gpio_info_ptr->gpio_out_en_offset = pin - 476; - s905d3_gpio_info_ptr->gpio_in_offset = pin - 476; - s905d3_gpio_info_ptr->gpio_pupd_offset = pin - 476; - s905d3_gpio_info_ptr->gpio_puen_offset = pin - 476; - - if (pin <= 483) { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOA_MUX_REG1; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 476) * 4; - } else { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOA_MUX_REG2; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 484) * 4; - s905d3_gpio_info_ptr->pwm_duty_cycle = S905D3_PWM_DUTY_CYCLE_F_REG; - s905d3_gpio_info_ptr->pwm_misc = S905D3_PWM_MISC_EF_REG; - } - - } else if (pin >= 468 && pin <= 475) { //GPIOC——8pin - - s905d3_gpio_info_ptr->gpio_out_en = S905D3_GPIOC_OUT_EN_REG; - s905d3_gpio_info_ptr->gpio_out = S905D3_GPIOC_OUT_REG; - s905d3_gpio_info_ptr->gpio_in = S905D3_GPIOC_IN_REG; - s905d3_gpio_info_ptr->gpio_pupd = S905D3_GPIOC_PUPD_REG; - s905d3_gpio_info_ptr->gpio_puen = S905D3_GPIOC_PUEN_REG; - s905d3_gpio_info_ptr->gpio_out_en_offset = pin - 468; - s905d3_gpio_info_ptr->gpio_out_offset = pin - 468; - s905d3_gpio_info_ptr->gpio_in_offset = pin - 468; - s905d3_gpio_info_ptr->gpio_pupd_offset = pin - 468; - s905d3_gpio_info_ptr->gpio_puen_offset = pin - 468; - - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOC_MUX_REG; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 468) * 4; - - } else if (pin >= 443 && pin <= 451) { //GPIOH——9pin - - s905d3_gpio_info_ptr->gpio_out_en = S905D3_GPIOH_OUT_EN_REG; - s905d3_gpio_info_ptr->gpio_out = S905D3_GPIOH_OUT_REG; - s905d3_gpio_info_ptr->gpio_in = S905D3_GPIOH_IN_REG; - s905d3_gpio_info_ptr->gpio_pupd = S905D3_GPIOH_PUPD_REG; - s905d3_gpio_info_ptr->gpio_puen = S905D3_GPIOH_PUEN_REG; - s905d3_gpio_info_ptr->gpio_out_offset = pin - 443; - s905d3_gpio_info_ptr->gpio_out_en_offset = pin - 443; - s905d3_gpio_info_ptr->gpio_in_offset = pin - 443; - s905d3_gpio_info_ptr->gpio_pupd_offset = pin - 443; - s905d3_gpio_info_ptr->gpio_puen_offset = pin - 443; - - if (pin <= 450) { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOH_MUX_REG1; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 443) * 4; - } else { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOH_MUX_REG2; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 451) * 4; - } - - } else if (pin >= 412 && pin <= 423) { //GPIOAO——12pin - - s905d3_gpio_info_ptr->gpio_out_en = S905D3_GPIOAO_OUT_EN_REG; - s905d3_gpio_info_ptr->gpio_out = S905D3_GPIOAO_OUT_REG; - s905d3_gpio_info_ptr->gpio_in = S905D3_GPIOAO_IN_REG; - s905d3_gpio_info_ptr->gpio_pupd = S905D3_GPIOAO_PUPD_REG; - s905d3_gpio_info_ptr->gpio_puen = S905D3_GPIOAO_PUEN_REG; - s905d3_gpio_info_ptr->gpio_out_offset = pin - 412; - s905d3_gpio_info_ptr->gpio_out_en_offset = pin - 412; - s905d3_gpio_info_ptr->gpio_in_offset = pin - 412; - s905d3_gpio_info_ptr->gpio_pupd_offset = pin - 412; - s905d3_gpio_info_ptr->gpio_puen_offset = pin - 412; - - if (pin <= 419) { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOAO_MUX_REG1; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 412) * 4; - s905d3_gpio_info_ptr->pwm_duty_cycle = S905D3_PWM_DUTY_CYCLE_AO_C_REG; - s905d3_gpio_info_ptr->pwm_misc = S905D3_PWM_MISC_AO_CD_REG; - } else { - s905d3_gpio_info_ptr->gpio_mux = S905D3_GPIOAO_MUX_REG2; - s905d3_gpio_info_ptr->gpio_mux_offset = (pin - 420) * 4; - } - - } else { - fprintf(stderr,"gpio: the pin you selected is not available\n"); - } -} - -void rk3588_set_pwm_reg(int pin,rk3588_soc_info *rk3588_soc_info_ptr) -{ - rk3588_soc_info_ptr->pwm_mux = RK3588_BUS_IOC_BASE + ((pin >> 2) << 2); - rk3588_soc_info_ptr->pwm_mux_val = 0xb; - rk3588_soc_info_ptr->pwm_mux_offset = (pin % 4) << 2; - - switch (OrangePiModel) - { - case PI_MODEL_5_PLUS: - - if (pin == 15 || pin == 16) { - rk3588_soc_info_ptr->pwm_mux = RK3588_PMU2_IOC_BASE + (((pin >> 2) - 3) << 2); - rk3588_soc_info_ptr->pwm_mux_val = 0x3; - } - - switch (pin) - { - case 15: - case 34: //PWM0CH0 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM0_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH0_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH0_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH0_CTRL; - break; - - case 16: - case 35: //PWM0CH1 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM0_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH1_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH1_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH1_CTRL; - break; - - case 97: //PWM2CH3 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM2_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH3_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH3_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH3_CTRL; - break; - - case 109: //PWM3CH0 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH0_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH0_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH0_CTRL; - break; - - case 110: //PWM3CH1 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH1_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH1_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH1_CTRL; - break; - - case 62: - case 114: //PWM3CH2 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH2_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH2_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH2_CTRL; - break; - } - break; - - case PI_MODEL_5: - case PI_MODEL_5B: - - if (pin == 28) { - rk3588_soc_info_ptr->pwm_mux = RK3588_PMU2_IOC_BASE + (((pin >> 2) - 3) << 2); - rk3588_soc_info_ptr->pwm_mux_val = 0x3; - } - - switch (pin) - { - case 58: //PWM0CH0 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM0_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH0_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH0_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH0_CTRL; - break; - - case 35: - case 59: //PWM0CH1 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM0_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH1_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH1_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH1_CTRL; - break; - - case 28: - case 50: //PWM0CH3 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM0_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH3_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH3_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH3_CTRL; - break; - - case 47: //PWM3CH1 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH1_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH1_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH1_CTRL; - break; - - case 138: //PWM3CH2 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH2_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH2_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH2_CTRL; - break; - - case 54: //PWM3CH3 - rk3588_soc_info_ptr->pwm_base = RK3588_PWM3_BASE; - rk3588_soc_info_ptr->ch_period_hpr = RK3588_CH3_PERIOD_HPR; - rk3588_soc_info_ptr->ch_duty_lpr = RK3588_CH3_DUTY_LPR; - rk3588_soc_info_ptr->ch_crtl = RK3588_CH3_CTRL; - break; - } - break; - } -} - -void rk3566_set_pwm_reg(int pin,rk3566_soc_info *rk3566_soc_info_ptr) -{ - rk3566_soc_info_ptr->pwm_mux = RK3566_PWM_MUX_REG; - - switch (pin) - { - case 144: //PWM2CH3 - rk3566_soc_info_ptr->cru_gate_con = RK3566_CRU_GATE_CON31; - rk3566_soc_info_ptr->cru_gate_con_offset = 13; - rk3566_soc_info_ptr->pwm_mux_val = 0x3; - rk3566_soc_info_ptr->pwm_mux_offset = 0; - rk3566_soc_info_ptr->pwm_base = RK3566_PWM2_BASE; - rk3566_soc_info_ptr->ch_period_hpr = RK3566_CH3_PERIOD_HPR; - rk3566_soc_info_ptr->ch_duty_lpr = RK3566_CH3_DUTY_LPR; - rk3566_soc_info_ptr->ch_crtl = RK3566_CH3_CTRL; - break; - - case 147: //PWM3CH3 - rk3566_soc_info_ptr->cru_gate_con = RK3566_CRU_GATE_CON32; - rk3566_soc_info_ptr->cru_gate_con_offset = 0; - rk3566_soc_info_ptr->pwm_mux_val = 0x1; - rk3566_soc_info_ptr->pwm_mux_offset = 12; - rk3566_soc_info_ptr->pwm_base = RK3566_PWM3_BASE; - rk3566_soc_info_ptr->ch_period_hpr = RK3566_CH3_PERIOD_HPR; - rk3566_soc_info_ptr->ch_duty_lpr = RK3566_CH3_DUTY_LPR; - rk3566_soc_info_ptr->ch_crtl = RK3566_CH3_CTRL; - break; - } -} /* * Set GPIO Mode */ -int OrangePi_set_gpio_mode(int pin, int mode) +int BananaPi_set_gpio_mode(int pin, int mode) { unsigned int regval = 0; unsigned int bank = pin >> 5; @@ -5472,701 +2788,12 @@ int OrangePi_set_gpio_mode(int pin, int mode) int offset; unsigned int cru_phyaddr =0, grf_phyaddr = 0, gpio_phyaddr = 0, ddr_phyaddr = 0; unsigned int cru_val = 0; - unsigned int rk3588_pmu1_ioc_phyaddr; - unsigned int rk3588_bus_ioc_phyaddr; unsigned int temp = 0; unsigned int bit_enable; unsigned int grf_val = 0; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - rk3588_bus_ioc_phyaddr = RK3588_BUS_IOC_BASE + (0x20 * bank) + ((index >> 2) << 2); - if(bank == 0){ - if (index < 12){ - ;/* Todo */ - }else{ - ddr_phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - } - cru_phyaddr = RK3588_PMU1CRU_BASE + RK3588_PMU1CRU_GATE_CON5_OFFSET; - cru_val = 0xffff9fff; - } - else if(bank == 1){ - ddr_phyaddr = RK3588_GPIO1_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON16_OFFSET; - cru_val = 0xffff3fff; - } - else if(bank == 2){ - ddr_phyaddr = RK3588_GPIO2_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - else if(bank == 3){ - ddr_phyaddr = RK3588_GPIO3_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - else if(bank == 4){ - ddr_phyaddr = RK3588_GPIO4_BASE + RK3588_GPIO_SWPORT_DDR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - if(INPUT == mode) - { - regval = readR(cru_phyaddr); - regval |= 0xffff0000; - regval &= cru_val; - writeR(regval, cru_phyaddr); - regval = readR(cru_phyaddr); - - regval = readR(rk3588_bus_ioc_phyaddr); - regval |= 0xffff0000; - regval &= ~(0xf << ((index % 4) << 2)); - writeR(regval, rk3588_bus_ioc_phyaddr); - regval = readR(rk3588_bus_ioc_phyaddr); - - regval = readR(ddr_phyaddr); - regval |= 0xffff0000; - regval &= ~(1 << (index % 16)); - writeR(regval, ddr_phyaddr); - - if (wiringPiDebug) { - regval = readR(ddr_phyaddr); - printf("Input mode set over reg val: %#x\n",regval); - } - } - else if(OUTPUT == mode) - { - regval = readR(cru_phyaddr); - regval |= 0xffff0000; - regval &= cru_val; - writeR(regval, cru_phyaddr); - regval = readR(cru_phyaddr); - - regval = readR(rk3588_bus_ioc_phyaddr); - regval |= 0xffff0000; - regval &= ~(0xf << ((index % 4) << 2)); - writeR(regval, rk3588_bus_ioc_phyaddr); - regval = readR(rk3588_bus_ioc_phyaddr); - - regval = readR(ddr_phyaddr); - regval |= 0xffff0000; - regval |= (1 << (index % 16)); - writeR(regval, ddr_phyaddr); - - if (wiringPiDebug){ - regval = readR(ddr_phyaddr); - printf("OUTPUT mode set over reg val: %#x\n",regval); - } - } - else if(PWM_OUTPUT == mode) - { - - //set clk——busioc - if (wiringPiDebug) - printf(">>Set cru_busioc_clk_en\n"); - - regval = readR(RK3588_CRU_GATE_CON19); - regval &= 0xfffffffe; - writeR(regval,RK3588_CRU_GATE_CON19); - regval = readR(RK3588_CRU_GATE_CON19); - - //Set clk——pwm123 - if (wiringPiDebug) - printf(">>Set cru_pwm123_clk_en\n"); - - regval = readR(RK3588_CRU_GATE_CON15); - regval &= ~(0x00000ff8); - regval |= 0xffff0920; - writeR(regval,RK3588_CRU_GATE_CON15); - regval = readR(RK3588_CRU_GATE_CON15); - - //Set clk——pwu1pwm - if (wiringPiDebug) - printf(">>Set cru_pmu1pwm_clk_en\n"); - - regval = readR(RK3588_PMU1CRU_GATE_CON1); - regval &= ~(0x00007000); - regval |= 0xffff4000; - writeR(regval,RK3588_PMU1CRU_GATE_CON1); - regval = readR(RK3588_PMU1CRU_GATE_CON1); - - rk3588_set_pwm_reg(pin,&rk3588_soc_info_t); - - //Set mux - if (wiringPiDebug) - printf(">>Set mux\n"); - - regval = readR(RK3588_PWM_MUX); - regval |= 0xffff0000; - regval &= ~(0xf << RK3588_PWM_MUX_OFFSET); - regval |= (RK3588_PWM_MUX_VAL << RK3588_PWM_MUX_OFFSET); - writeR(regval, RK3588_PWM_MUX); - regval = readR(RK3588_PWM_MUX); - - //clear all reg - if (wiringPiDebug) - printf(">>Clear all reg\n"); - - writeR(0, RK3588_CH_PERIOD_HPR); - regval = readR(RK3588_CH_PERIOD_HPR); - - writeR(0, RK3588_CH_DUTY_LPR); - regval = readR(RK3588_CH_DUTY_LPR); - - writeR(0, RK3588_CH_CTRL); - regval = readR(RK3588_CH_CTRL); - - //Set period - if (wiringPiDebug) - printf(">>Set period\n"); - - regval = readR(RK3588_CH_PERIOD_HPR); - regval = 1000; - writeR(regval, RK3588_CH_PERIOD_HPR); - regval = readR(RK3588_CH_PERIOD_HPR); - - //Set duty - if (wiringPiDebug) - printf(">>Set duty\n"); - - regval = readR(RK3588_CH_DUTY_LPR); - regval = 500; - writeR(regval, RK3588_CH_DUTY_LPR); - regval = readR(RK3588_CH_DUTY_LPR); - - //Set ctrl - if (wiringPiDebug) - printf(">>Set ctrl\n"); - - /** - * frequency of clock: 24 MHz / 120 = 200 kHz - * frequency of PWM: 200 kHz / 1000 = 200 Hz - * period of PWM: 1 / 200 Hz = 0.005 s - * duty: 500/1000 = 50% - */ - regval = readR(RK3588_CH_CTRL); - regval = (0 << RK3588_RPT) \ - | (60 << RK3588_SCALE) \ - | (0 << RK3588_PRESCALE) \ - | (0 << RK3588_CLK_SRC_SEL) \ - | (1 << RK3588_CLK_SEL) \ - | (1 << RK3588_FORCE_CLK_EN) \ - | (1 << RK3588_CH_CNT_EN) \ - | (0 << RK3588_CONLOCK) \ - | (0 << RK3588_OUTPUT_MODE) \ - | (0 << RK3588_INACTIVE_POL) \ - | (1 << RK3588_DUTY_POL) \ - | (1 << RK3588_PWM_MODE) \ - | (1 << RK3588_PWM_EN); - - writeR(regval, RK3588_CH_CTRL); - regval = readR(RK3588_CH_CTRL); - } - else - { - printf("Unknow mode\n"); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - offset = ((index - ((index >> 3) << 3))); - - if(bank == 1){ - cru_phyaddr = RK3399_PMUCRU_BASE + RK3399_PMUCRU_CLKGATE_CON1_OFFSET; - grf_phyaddr = RK3399_PMUGRF_BASE + ((index >> 3) << 2) + 0x10; - gpio_phyaddr = RK3399_GPIO1_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - - else if(bank == 2){ - cru_phyaddr = RK3399_CRU_BASE + RK3399_CRU_CLKGATE_CON31_OFFSET; - grf_phyaddr = RK3399_GRF_BASE + ((index >> 3) << 2); - gpio_phyaddr = RK3399_GPIO2_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - else if(bank == 4){ - cru_phyaddr = RK3399_CRU_BASE + RK3399_CRU_CLKGATE_CON31_OFFSET; - grf_phyaddr = RK3399_GRF_BASE + ((index >> 3) << 2) +0x20; - gpio_phyaddr = RK3399_GPIO4_BASE + RK3399_GPIO_SWPORTA_DDR_OFFSET; - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - if (wiringPiDebug) - printf("Register[%#x]: %#x index:%d\n", phyaddr, regval, index); - - /* Set Input */ - if(INPUT == mode) - { - 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); - } - } - /* Set Output */ - else if(OUTPUT == mode) - { - 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); - } - } - else - { - printf("Unknow mode\n"); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_R1_PLUS: - - offset = ((index - ((index >> 3) << 3))); - - if(bank == 2) - { - cru_phyaddr = RK3328_CRU_BASE + RK3328_CRU_CLKGATE_CON16_OFFSET; - //grf_phyaddr = GRF_BASE + ((index >> 3) << 2) + 0x10; - gpio_phyaddr = RK3328_GPIO2_BASE + RK3328_GPIO_SWPORTA_DDR_OFFSET; - if(0 == (index >> 3))//gpio2_ax - { - grf_phyaddr = RK3328_GRF_BASE + 0x20; - } - else if(3 == (index >> 3))//gpio2_dx - { - grf_phyaddr = RK3328_GRF_BASE + 0x34; - } - } - else if(bank == 3) - { - cru_phyaddr = RK3328_CRU_BASE + RK3328_CRU_CLKGATE_CON16_OFFSET; - //grf_phyaddr = GRF_BASE + ((index >> 3) << 2) +0x20; - gpio_phyaddr = RK3328_GPIO3_BASE + RK3328_GPIO_SWPORTA_DDR_OFFSET; - if (0 == (index >> 3)) - { - if(4 == offset)//gpio3_a4 - { - grf_phyaddr = RK3328_GRF_BASE + 0x38; - } - else//gpio3_a567 - { - grf_phyaddr = RK3328_GRF_BASE + 0x3c; - } - } - else if(2 == (index >> 3)) //gpio3_c - { - grf_phyaddr = RK3328_GRF_BASE + 0x48; - } - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - if (wiringPiDebug) - printf("Register[%#x]: %#x index:%d\n", phyaddr, regval, index); - - /* Set Input */ - if(INPUT == mode) - { - 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); - } - } - else if(OUTPUT == mode) - { - /* Set Output */ - 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); - } - } - else - { - printf("Unknow mode\n"); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if(bank == 0){ - cru_phyaddr = RK3566_PMU_CRU_BASE + RK3566_PMUCRU_PMUGATE_CON01_OFFSET; - cru_val = ~((0x3 << 9) | (0x3 << (16 + 9))); - grf_phyaddr = RK3566_PMU_GRF_BASE + RK3566_PMU_GRF_GPIO0A_IOMUX_L_OFFSET + ((pin >> 2) << 2); - ddr_phyaddr = RK3566_GPIO0_BASE + RK3566_GPIO_SWPORT_DDR_L_OFFSET + ((index >> 4) << 2); - } - else{ - cru_phyaddr = RK3566_CRU_BASE + RK3566_CRU_GATE_CON31_OFFSET; - cru_val = ~((0xff << 2) | (0xff << (16 + 2))); - grf_phyaddr = RK3566_SYS_GRF_BASE + RK3566_GRF_GPIO1A_IOMUX_L_OFFSET + (((pin - 32) >> 2) << 2); - ddr_phyaddr = RK3566_GPIO1_BASE + ((bank - 1) << 16) + RK3566_GPIO_SWPORT_DDR_L_OFFSET + ((index >> 4) << 2); - } - - offset = (index % 4) << 2; - bit_enable = 0x7 << (16 + offset); - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - if (INPUT == mode) - { - regval = readR(cru_phyaddr); - regval &= cru_val; - writeR(regval, cru_phyaddr); - regval = readR(cru_phyaddr); - - regval = readR(grf_phyaddr); - regval |= bit_enable; - regval &= ~(0x7 << offset); - writeR(regval, grf_phyaddr); - regval = readR(grf_phyaddr); - - regval = readR(ddr_phyaddr); - regval |= 0x1 << (16 + (index % 16)); - regval &= ~(1 << (index % 16)); - writeR(regval, ddr_phyaddr); - regval = readR(ddr_phyaddr); - } - else if (OUTPUT == mode) - { - regval = readR(cru_phyaddr); - regval &= cru_val; - writeR(regval, cru_phyaddr); - regval = readR(cru_phyaddr); - - regval = readR(grf_phyaddr); - regval |= bit_enable; - regval &= ~(0x7 << offset); - writeR(regval, grf_phyaddr); - regval = readR(grf_phyaddr); - - regval = readR(ddr_phyaddr); - regval |= 0x1 << (16 + (index % 16)); - regval |= (1 << (index % 16)); - writeR(regval, ddr_phyaddr); - regval = readR(ddr_phyaddr); - } - else if (PWM_OUTPUT == mode) - { - /*//set clk——busioc - if (wiringPiDebug) - printf(">>Set cru_busioc_clk_en\n"); - - regval = readR(RK3588_CRU_GATE_CON19); - regval &= 0xfffffffe; - writeR(regval,RK3588_CRU_GATE_CON19); - regval = readR(RK3588_CRU_GATE_CON19);*/ - - rk3566_set_pwm_reg(pin,&rk3566_soc_info_t); - - //Set clk——pwm - if (wiringPiDebug) - printf(">>Set cru_pwm_clk_en\n"); - - regval = readR(RK3566_CRU_GATE_CON); - regval &= ~(0x7 << RK3566_CRU_GATE_CON_OFFSET); - regval |= (0xffff0000 + (0x4 << RK3566_CRU_GATE_CON_OFFSET)); - writeR(regval,RK3566_CRU_GATE_CON); - regval = readR(RK3566_CRU_GATE_CON); - - //Set mux - if (wiringPiDebug) - printf(">>Set mux\n"); - - regval = readR(RK3566_PWM_MUX); - regval |= 0xffff0000; - regval &= ~(0xf << RK3566_PWM_MUX_OFFSET); - regval |= (RK3566_PWM_MUX_VAL << RK3566_PWM_MUX_OFFSET); - writeR(regval, RK3566_PWM_MUX); - regval = readR(RK3566_PWM_MUX); - - //clear all reg - if (wiringPiDebug) - printf(">>Clear all reg\n"); - - writeR(0, RK3566_CH_PERIOD_HPR); - regval = readR(RK3566_CH_PERIOD_HPR); - - writeR(0, RK3566_CH_DUTY_LPR); - regval = readR(RK3566_CH_DUTY_LPR); - - writeR(0, RK3566_CH_CTRL); - regval = readR(RK3566_CH_CTRL); - - //Set period - if (wiringPiDebug) - printf(">>Set period\n"); - - regval = readR(RK3566_CH_PERIOD_HPR); - regval = 1000; - writeR(regval, RK3566_CH_PERIOD_HPR); - regval = readR(RK3566_CH_PERIOD_HPR); - - //Set duty - if (wiringPiDebug) - printf(">>Set duty\n"); - - regval = readR(RK3566_CH_DUTY_LPR); - regval = 500; - writeR(regval, RK3566_CH_DUTY_LPR); - regval = readR(RK3566_CH_DUTY_LPR); - - //Set ctrl - if (wiringPiDebug) - printf(">>Set ctrl\n"); - - /** - * frequency of clock: 24 MHz / 120 = 200 kHz - * frequency of PWM: 200 kHz / 1000 = 200 Hz - * period of PWM: 1 / 200 Hz = 0.005 s - * duty: 500/1000 = 50% - */ - regval = readR(RK3566_CH_CTRL); - regval = (0 << RK3566_RPT) \ - | (60 << RK3566_SCALE) \ - | (0 << RK3566_PRESCALE) \ - | (0 << RK3566_CLK_SRC_SEL) \ - | (1 << RK3566_CLK_SEL) \ - | (1 << RK3566_FORCE_CLK_EN) \ - | (1 << RK3566_CH_CNT_EN) \ - | (0 << RK3566_CONLOCK) \ - | (0 << RK3566_OUTPUT_MODE) \ - | (0 << RK3566_INACTIVE_POL) \ - | (1 << RK3566_DUTY_POL) \ - | (1 << RK3566_PWM_MODE) \ - | (1 << RK3566_PWM_EN); - - writeR(regval, RK3566_CH_CTRL); - regval = readR(RK3566_CH_CTRL); - } - else - { - printf("Unknow mode\n"); - } - - } - else - { - printf("Pin mode failed!\n"); - } - break; - - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - if(INPUT == mode) { - /* Set Input */ - //Set mux - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_MUX, regval); - - regval &= ~(0xF << S905D3_GPIO_MUX_OFFSET); - - writeR(regval, S905D3_GPIO_MUX); - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_MUX, regval); - - //set fsel - regval = readR(S905D3_GPIO_OUT_EN); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_OUT_EN, regval); - - regval |= 1 << S905D3_GPIO_OUT_EN_OFFSET; - - writeR(regval, S905D3_GPIO_OUT_EN); - regval = readR(S905D3_GPIO_OUT_EN); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_OUT_EN, regval); - - } else if (OUTPUT == mode) { - /* Set Output */ - //Set mux - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_MUX, regval); - - regval &= ~(0xF << S905D3_GPIO_MUX_OFFSET); - - writeR(regval, S905D3_GPIO_MUX); - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_MUX, regval); - - //set fsel - regval = readR(S905D3_GPIO_OUT_EN); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_OUT_EN, regval); - - regval &= ~(1 << S905D3_GPIO_OUT_EN_OFFSET); - - writeR(regval, S905D3_GPIO_OUT_EN); - regval = readR(S905D3_GPIO_OUT_EN); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_OUT_EN, regval); - - } else if (PWM_OUTPUT == mode) { - if (wiringPiDebug) - printf("OPI: try wiringPi pin %d for PWM pin\n", pin); - - if (pin != 418 && pin != 487) { - printf("the pin you choose doesn't support hardware PWM\n"); - printf("OPI:you can select wiringPi pin 418,487 for PWM pin\n"); - printf("or you can use it in softPwm mode\n"); - exit(1); - } - - /* Set PWM_Output */ - //Set mux - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("Register[%#x]: %#x\n", S905D3_GPIO_MUX, regval); - - regval &= ~(0xF << S905D3_GPIO_MUX_OFFSET); - regval |= 0x3 << S905D3_GPIO_MUX_OFFSET; - - if (wiringPiDebug) - printf(">>>>>line:%d PWM mode ready to set val: 0x%x\n", __LINE__, regval); - - writeR(regval, S905D3_GPIO_MUX); - regval = readR(S905D3_GPIO_MUX); - - if (wiringPiDebug) - printf("<<<<> 3) << 3)) << 2); @@ -6177,7 +2804,7 @@ int OrangePi_set_gpio_mode(int pin, int mode) phyaddr = sunxi_gpio_info_t.gpio_base_addr + sunxi_gpio_info_t.gpio_base_offset + (bank * 36) + ((index >> 3) << 2); /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { regval = readR(phyaddr); if (wiringPiDebug) @@ -6214,16 +2841,16 @@ int OrangePi_set_gpio_mode(int pin, int mode) else if(PWM_OUTPUT == mode) { if (wiringPiDebug) - printf("OPI: try wiringPi pin %d for PWM pin\n", pin); + printf("BPI: try wiringPi pin %d for PWM pin\n", pin); - if (OrangePiModel == PI_MODEL_ZERO_2 && pin != 224 && pin != 225 && pin != 226 && pin != 227) { + if (BananaPiModel == PI_MODEL_BERRY && pin != 179 && pin != 224 && pin != 225 && pin != 226 && pin != 227) { printf("the pin you choose doesn't support hardware PWM\n"); - printf("OPI:you can select wiringPi pin 224,225,226,227 for PWM pin\n"); + printf("BPI:you can select wiringPi pin 179,224,225,226,227 for PWM pin\n"); printf("or you can use it in softPwm mode\n"); exit(1); - } else if (OrangePiModel == PI_MODEL_ZERO_2_W && pin != 267 && pin != 268 && pin != 269 && pin != 270) { + } else if (BananaPiModel == PI_MODEL_ZERO && pin != 179 && pin != 224 && pin != 225 && pin != 226 && pin != 227) { printf("the pin you choose doesn't support hardware PWM\n"); - printf("OPI:you can select wiringPi pin 267,268,269,270 for PWM pin\n"); + printf("BPI:you can select wiringPi pin 179,224,225,226,227 for PWM pin\n"); printf("or you can use it in softPwm mode\n"); exit(1); } @@ -6232,9 +2859,9 @@ int OrangePi_set_gpio_mode(int pin, int mode) // set pin PWMx to pwm mode regval &= ~(7 << offset); - if (OrangePiModel == PI_MODEL_ZERO_2) - regval |= (0x4 << offset); // ALT4 PWM - else if (OrangePiModel == PI_MODEL_ZERO_2_W) + if (BananaPiModel == PI_MODEL_ZERO) + regval |= (0x5 << offset); // ALT5 PWM + else if (BananaPiModel == PI_MODEL_BERRY) regval |= (0x5 << offset); else regval |= (0x3 << offset); // ALT3 PWM @@ -6257,7 +2884,7 @@ int OrangePi_set_gpio_mode(int pin, int mode) sunxi_pwm_set_act(pin,512); sunxi_pwm_set_mode(PWM_MODE_MS); - if (OrangePiModel == PI_MODEL_ZERO_2 || OrangePiModel == PI_MODEL_ZERO_2_W) + if (BananaPiModel == PI_MODEL_BERRY || BananaPiModel == PI_MODEL_ZERO) sunxi_pwm_set_clk(pin,1); //default clk:24M else sunxi_pwm_set_clk(pin,PWM_CLK_DIV_120); //default clk:24M/120 @@ -6279,7 +2906,7 @@ int OrangePi_set_gpio_mode(int pin, int mode) return 0; } -int OrangePi_set_gpio_alt(int pin, int mode) +int BananaPi_set_gpio_alt(int pin, int mode) { unsigned int regval = 0; unsigned int bank = pin >> 5; @@ -6293,7 +2920,7 @@ int OrangePi_set_gpio_alt(int pin, int mode) phyaddr = sunxi_gpio_info_t.gpio_base_addr + (bank * 36) + ((index >> 3) << 2); /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { if (wiringPiDebug) printf("Register[%#x]: %#x index:%d\n", phyaddr, regval, index); @@ -6312,9 +2939,9 @@ int OrangePi_set_gpio_alt(int pin, int mode) } /* - * OrangePi Digital write + * BananaPi Digital write */ -int OrangePi_digitalWrite(int pin, int value) +int BananaPi_digitalWrite(int pin, int value) { unsigned int bank = pin >> 5; unsigned int index = pin - (bank << 5); @@ -6326,255 +2953,8 @@ int OrangePi_digitalWrite(int pin, int value) unsigned int bit_enable = 0; unsigned int offset; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - if(bank == 0){ - dr_phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_PMU1CRU_BASE + RK3588_PMU1CRU_GATE_CON5_OFFSET; - cru_val = 0xffff9fff; - } - else if(bank == 1){ - dr_phyaddr = RK3588_GPIO1_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON16_OFFSET; - cru_val = 0xffff3fff; - } - else if(bank == 2){ - dr_phyaddr = RK3588_GPIO2_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - else if(bank == 3){ - dr_phyaddr = RK3588_GPIO3_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - else if(bank == 4){ - dr_phyaddr = RK3588_GPIO4_BASE + RK3588_GPIO_SWPORT_DR_L_OFFSET + ((index / 16) << 2); - cru_phyaddr = RK3588_CRU_BASE + RK3588_CRU_GATE_CON17_OFFSET; - cru_val = 0xffffffc0; - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - regval = readR(cru_phyaddr); - regval &= cru_val; - writeR(regval, cru_phyaddr); - - if(0 == value) - { - regval = readR(dr_phyaddr); - regval |= 0xffff0000; - regval &= ~(1 << (index % 16)); - writeR(regval, dr_phyaddr); - regval = readR(dr_phyaddr); - if (wiringPiDebug) - printf("LOW val set over reg val: 0x%x\n", regval); - } - else - { - regval = readR(dr_phyaddr); - regval |= 0xffff0000; - regval |= (1 << (index % 16)); - writeR(regval, dr_phyaddr); - regval = readR(dr_phyaddr); - if (wiringPiDebug) - printf("HIGH val set over reg val: 0x%x\n", regval); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - if(bank == 1) - { - phyaddr = RK3399_GPIO1_BASE + RK3399_GPIO_SWPORTA_DR_OFFSET; - cru_phyaddr = RK3399_PMUCRU_BASE + RK3399_PMUCRU_CLKGATE_CON1_OFFSET; - } - else if(bank == 2) - { - phyaddr = RK3399_GPIO2_BASE + RK3399_GPIO_SWPORTA_DR_OFFSET; - cru_phyaddr = RK3399_CRU_BASE + RK3399_CRU_CLKGATE_CON31_OFFSET; - } - else if(bank == 4) - { - phyaddr = RK3399_GPIO4_BASE + RK3399_GPIO_SWPORTA_DR_OFFSET; - cru_phyaddr = RK3399_CRU_BASE + RK3399_CRU_CLKGATE_CON31_OFFSET; - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - - writeR(0xffff0180, cru_phyaddr); - - 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); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - case PI_MODEL_R1_PLUS: - - if(bank == 2) - { - phyaddr = RK3328_GPIO2_BASE + RK3328_GPIO_SWPORTA_DR_OFFSET; - cru_phyaddr = RK3328_CRU_BASE + RK3328_CRU_CLKGATE_CON16_OFFSET; - } - else if(bank == 3) - { - phyaddr = RK3328_GPIO3_BASE + RK3328_GPIO_SWPORTA_DR_OFFSET; - cru_phyaddr = RK3328_CRU_BASE + RK3328_CRU_CLKGATE_CON16_OFFSET; - } - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - writeR(0xffff9877, cru_phyaddr); - 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); - } - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if(bank == 0){ - dr_phyaddr = RK3566_GPIO0_BASE + RK3566_GPIO_SWPORT_DR_L_OFFSET + ((index >> 4) << 2); - cru_phyaddr = RK3566_PMU_CRU_BASE + RK3566_PMUCRU_PMUGATE_CON01_OFFSET; - cru_val = ~((0x3 << 9) | (0x3 << (16 + 9))); - } - else{ - dr_phyaddr = RK3566_GPIO1_BASE + ((bank - 1) << 16) + RK3566_GPIO_SWPORT_DR_L_OFFSET + ((index >> 4) << 2); - cru_phyaddr = RK3566_CRU_BASE + RK3566_CRU_GATE_CON31_OFFSET; - cru_val = ~((0xff << 2) | (0xff << (16 + 2))); - } - - offset = index % 16; - bit_enable = 0x1 << (16 + offset); - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - regval = readR(cru_phyaddr); - regval &= cru_val; - writeR(regval, cru_phyaddr); - - regval = readR(dr_phyaddr); - - if(wiringPiDebug) - printf("read val(%#x) from register[%#x]\n", regval, dr_phyaddr); - - regval |= bit_enable; - - if(0 == value) - regval &= ~(1 << offset); - else - regval |= (1 << offset); - - writeR(regval, dr_phyaddr); - if (wiringPiDebug) - printf("write val(%#x) to register[%#x]\n", regval, dr_phyaddr); - - regval = readR(dr_phyaddr); - if (wiringPiDebug) - printf("set over reg val: 0x%x\n", regval); - } - else - { - printf("Pin mode failed!\n"); - } - - break; - - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - regval = readR(S905D3_GPIO_OUT); - - if(wiringPiDebug) - printf("read val(%#x) from register[%#x]\n", regval, S905D3_GPIO_OUT); - - if(0 == value) - regval &= ~(1 << S905D3_GPIO_OUT_OFFSET); - else - regval |= (1 << S905D3_GPIO_OUT_OFFSET); - - writeR(regval, S905D3_GPIO_OUT); - - if (wiringPiDebug) - printf("write val(%#x) to register[%#x]\n", regval, S905D3_GPIO_OUT); - - regval = readR(S905D3_GPIO_OUT); - - if (wiringPiDebug) - printf("set over reg val: 0x%x\n", regval); - } - else - { - printf("Pin mode failed!\n"); - } - - break; - default: if (bank == 11) @@ -6587,7 +2967,7 @@ int OrangePi_digitalWrite(int pin, int value) } /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { regval = readR(phyaddr); if (wiringPiDebug) @@ -6622,72 +3002,17 @@ int OrangePi_digitalWrite(int pin, int value) } /* - * OrangePi Digital Read + * BananaPi Digital Read */ -int OrangePi_digitalRead(int pin) +int BananaPi_digitalRead(int pin) { int bank = pin >> 5; int index = pin - (bank << 5); int val; unsigned int phyaddr = 0; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - if(bank == 0) - phyaddr = RK3588_GPIO0_BASE + RK3588_GPIO_EXT_PORT_OFFSET; - else if(bank == 1) - phyaddr = RK3588_GPIO1_BASE + RK3588_GPIO_EXT_PORT_OFFSET; - else if(bank == 2) - phyaddr = RK3588_GPIO2_BASE + RK3588_GPIO_EXT_PORT_OFFSET; - else if(bank == 3) - phyaddr = RK3588_GPIO3_BASE + RK3588_GPIO_EXT_PORT_OFFSET; - else if(bank == 4) - phyaddr = RK3588_GPIO4_BASE + RK3588_GPIO_EXT_PORT_OFFSET; - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - if(bank == 1) - phyaddr = RK3399_GPIO1_BASE + RK3399_GPIO_EXT_PORTA_OFFSET; - else if(bank == 2) - phyaddr = RK3399_GPIO2_BASE + RK3399_GPIO_EXT_PORTA_OFFSET; - else if(bank == 4) - phyaddr = RK3399_GPIO4_BASE + RK3399_GPIO_EXT_PORTA_OFFSET; - - break; - - case PI_MODEL_R1_PLUS: - - if(bank == 2) - phyaddr = RK3328_GPIO2_BASE + RK3328_GPIO_EXT_PORTA_OFFSET; - else if(bank == 3) - phyaddr = RK3328_GPIO3_BASE + RK3328_GPIO_EXT_PORTA_OFFSET; - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if(bank == 0) - phyaddr = RK3566_GPIO0_BASE + RK3566_GPIO_EXT_PORT_OFFSET; - else - phyaddr = RK3566_GPIO1_BASE + ((bank - 1) << 16) + RK3566_GPIO_EXT_PORT_OFFSET; - - break; - - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - phyaddr = S905D3_GPIO_IN; - - break; - default: if (bank == 11) @@ -6703,14 +3028,17 @@ int OrangePi_digitalRead(int pin) } - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { val = readR(phyaddr); - if (OrangePiModel == PI_MODEL_3_PLUS) { - val = val >> S905D3_GPIO_IN_OFFSET; - } else { + if (BananaPiModel == PI_MODEL_BERRY) { val = val >> index; + } + else if (BananaPiModel == PI_MODEL_ZERO) { + val = val >> index; + } + else{ } val &= 1; @@ -6724,7 +3052,7 @@ int OrangePi_digitalRead(int pin) return 0; } -void OrangePi_set_gpio_pullUpDnControl (int pin, int pud) +void BananaPi_set_gpio_pullUpDnControl (int pin, int pud) { unsigned int bank = pin >> 5; unsigned int index = pin - (bank << 5); @@ -6734,126 +3062,8 @@ void OrangePi_set_gpio_pullUpDnControl (int pin, int pud) unsigned int bit_enable; unsigned int bit_value = 0; - switch (OrangePiModel) + switch (BananaPiModel) { - case PI_MODEL_5: case PI_MODEL_5B: - case PI_MODEL_5_PLUS: - case PI_MODEL_900: - - if(bank == 0 && index < 12) - phyaddr = RK3588_PMU1_IOC_BASE + RK3588_PMU1_IOC_GPIO0A_P + ((index >> 3) << 2); - else if(bank == 0 && index > 11 && index < 31) - phyaddr = RK3588_PMU2_IOC_BASE + RK3588_PMU2_IOC_GPIO0B_P + (((index - 8) >> 3) << 2); - else if(bank == 1) - phyaddr = RK3588_VCCIO1_4_IOC_BASE + RK3588_VCCIO1_4_IOC_GPIO1A_P + ((index >> 3) << 2); - else if(bank < 4 || (bank == 4 && index > 17)) - phyaddr = RK3588_VCCIO3_5_IOC_BASE + RK3588_VCCIO3_5_IOC_GPIO2A_P + (((pin - 64) >> 3) << 2); - else if(bank == 4 && index < 18) - phyaddr = RK3588_VCCIO6_IOC_BASE + RK3588_VCCIO6_IOC_GPIO4A_P + ((index >> 3) << 2); - - offset = (index % 8) << 1; - bit_enable = 3 << ( 16 + offset); - - /* */if (PUD_UP == pud) - bit_value = 3; - else if (PUD_DOWN == pud) - bit_value = 1; - else if (PUD_OFF == pud) - bit_value = 0; - - break; - - case PI_MODEL_800: case PI_MODEL_4_LTS: - case PI_MODEL_4: case PI_MODEL_RK3399: - - /* */if ( bank > 1) - phyaddr = RK3399_GRF_BASE + RK3399_GRF_GPIO2_3_4_P_OFFSET + (((pin - 64) >> 3) << 2); - else if ( bank == 1 || pin < 16) - phyaddr = RK3399_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; - } - - break; - - case PI_MODEL_CM4: - case PI_MODEL_3B: - - if (bank == 0) - phyaddr = RK3566_PMU_GRF_BASE + RK3566_PMU_GRF_GPIO0A_P_OFFSET + (((pin - 0) >> 3) << 2); - else - phyaddr = RK3566_SYS_GRF_BASE + RK3566_GRF_GPIO1A_P_OFFSET + (((pin - 32) >> 3) << 2); - - offset = (index % 8) << 1; - bit_enable = 3 << ( 16 + offset); - - /* */if (PUD_UP == pud) - bit_value = 1; - else if (PUD_DOWN == pud) - bit_value = 2; - else if (PUD_OFF == pud) - bit_value = 0; - break; - - case PI_MODEL_3_PLUS: - - s905d3_set_gpio_reg(pin,&s905d3_gpio_info_t); - - /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) - { - if (PUD_UP == pud) { - //Set puen - regval = readR(S905D3_GPIO_PUEN); - regval |= 1 << S905D3_GPIO_PUEN_OFFSET; - writeR(regval, S905D3_GPIO_PUEN); - - //Set pupd - regval = readR(S905D3_GPIO_PUPD); - regval |= 1 << S905D3_GPIO_PUPD_OFFSET; - writeR(regval, S905D3_GPIO_PUPD); - - } else if (PUD_DOWN == pud) { - //Set puen - regval = readR(S905D3_GPIO_PUEN); - regval |= 1 << S905D3_GPIO_PUEN_OFFSET; - writeR(regval, S905D3_GPIO_PUEN); - - //Set pupd - regval = readR(S905D3_GPIO_PUPD); - regval &= ~(1 << S905D3_GPIO_PUPD_OFFSET); - writeR(regval, S905D3_GPIO_PUPD); - - } else if (PUD_OFF == pud) { - //Disable puen - regval = readR(S905D3_GPIO_PUEN); - regval &= ~(1 << S905D3_GPIO_PUEN_OFFSET); - writeR(regval, S905D3_GPIO_PUEN); - } - } - - return; default: //int offset = ((index - ((index >> 4) << 4)) << 1); @@ -6877,7 +3087,7 @@ void OrangePi_set_gpio_pullUpDnControl (int pin, int pud) } /* Ignore unused gpio */ - if (ORANGEPI_PIN_MASK[bank][index] != -1) + if (BANANAPI_PIN_MASK[bank][index] != -1) { if (wiringPiDebug) printf("bank: %d, index: %d\n", bank, index); diff --git a/wiringPi/wiringPi.h b/wiringPi/wiringPi.h index 190bcae..5391db0 100644 --- a/wiringPi/wiringPi.h +++ b/wiringPi/wiringPi.h @@ -93,7 +93,7 @@ typedef struct { #define GPIO_PWM GPIO_PWM_OP //sunxi_pwm -#ifdef OPI +#ifdef BPI #define SUNXI_PWM_BASE (0x01c21400) #define SUNXI_PWM_CTRL_REG (SUNXI_PWM_BASE) #define SUNXI_PWM_CH0_PERIOD (SUNXI_PWM_BASE + 0x4) @@ -182,409 +182,6 @@ typedef struct { #define SUNXI_PUD_DOWN 2 -/*********** Rockchip RK3588 *************/ - -//gpio0~gpio4 register base addr -#define RK3588_GPIO0_BASE 0xfd8a0000U -#define RK3588_GPIO1_BASE 0xfec20000U -#define RK3588_GPIO2_BASE 0xfec30000U -#define RK3588_GPIO3_BASE 0xfec40000U -#define RK3588_GPIO4_BASE 0xfec50000U - -//gpio offset -#define RK3588_GPIO_SWPORT_DR_L_OFFSET 0x00U -#define RK3588_GPIO_SWPORT_DR_H_OFFSET 0x04U -#define RK3588_GPIO_SWPORT_DDR_L_OFFSET 0x08U -#define RK3588_GPIO_SWPORT_DDR_H_OFFSET 0x0cU -#define RK3588_GPIO_EXT_PORT_OFFSET 0x70U - -//CRU clock-controller base addr -#define RK3588_CRU_BASE 0xfd7c0000U -#define RK3588_CRU_GATE_CON16_OFFSET 0x0840U //for gpio1 bit 14 15 30 31 -#define RK3588_CRU_GATE_CON17_OFFSET 0x0844U //for gpio2/3/4 - bit 0 1 2 3 4 5 16 17 18 19 20 21 - -#define RK3588_PMU1CRU_BASE 0xfd7f0000U -#define RK3588_PMU1CRU_GATE_CON5_OFFSET 0x0814U //for gpio0 - bit 5 6 21 22 - -#define RK3588_GPIO_NUM (0x40) -#define RK3588_GPIO_BIT(x) (1UL << (x)) - -//gpio iomux -#define RK3588_PMU1_IOC_BASE 0xfd5f0000U -#define RK3588_PMU1_IOC_GPIO0A_IOMUX_SEL_L 0x00U //gpio0a0~gpio0b3 -#define RK3588_PMU1_IOC_GPIO0A_IOMUX_SEL_H 0x04U //gpio0a4~gpio0b7 -#define RK3588_PMU1_IOC_GPIO0B_IOMUX_SEL_L 0x08U //gpio0b0~gpio0b3 - -#define RK3588_PMU2_IOC_BASE 0xfd5f4000U -#define RK3588_PMU2_IOC_GPIO0B_IOMUX_SEL_H 0x00U //gpio0a5~gpio0b7 -#define RK3588_PMU2_IOC_GPIO0C_IOMUX_SEL_L 0x04U //gpio0a0~gpio0b3 -#define RK3588_PMU2_IOC_GPIO0C_IOMUX_SEL_H 0x08U //gpio0a4~gpio0b7 -#define RK3588_PMU2_IOC_GPIO0D_IOMUX_SEL_L 0x0cU //gpio0a0~gpio0b3 -#define RK3588_PMU2_IOC_GPIO0D_IOMUX_SEL_H 0x10U //gpio0a4~gpio0b6 - -#define RK3588_BUS_IOC_BASE 0xfd5f8000U - -//gpio pull up/down -#define RK3588_VCCIO1_4_IOC_BASE 0xfd5f9000U -#define RK3588_VCCIO3_5_IOC_BASE 0xfd5fa000U -#define RK3588_VCCIO6_IOC_BASE 0xfd5fc000U - -#define RK3588_PMU1_IOC_GPIO0A_P 0x0020U -#define RK3588_PMU1_IOC_GPIO0B_P 0x0024U -#define RK3588_PMU2_IOC_GPIO0B_P 0x0028U -#define RK3588_PMU2_IOC_GPIO0C_P 0x002cU -#define RK3588_PMU2_IOC_GPIO0D_P 0x0030U -#define RK3588_VCCIO1_4_IOC_GPIO1A_P 0x0110U -#define RK3588_VCCIO3_5_IOC_GPIO2A_P 0x0120U -#define RK3588_VCCIO6_IOC_GPIO4A_P 0x0140U - -//pwm register base addr -//#define RK3588_CRU_BASE 0xfd7c0000U -//#define RK3588_PMU1CRU_BASE 0xfd7f0000U -#define RK3588_PWM0_BASE 0xfd8b0000U -#define RK3588_PWM1_BASE 0xfe8d0000U -#define RK3588_PWM2_BASE 0xfebe0000U -#define RK3588_PWM3_BASE 0xfebf0000U - -//cru -#define RK3588_CRU_GATE_CON19 (RK3588_CRU_BASE + 0x084CU) //for busioc_clk_en -#define RK3588_CRU_GATE_CON15 (RK3588_CRU_BASE + 0x083CU) //for pwm123_clk_en -#define RK3588_PMU1CRU_GATE_CON1 (RK3588_PMU1CRU_BASE +0x0804U) //for pmu1pwm_clk_en - -//CH0 -#define RK3588_CH0_PERIOD_HPR (RK3588_PWM_BASE + 0x04) -#define RK3588_CH0_DUTY_LPR (RK3588_PWM_BASE + 0x08) -#define RK3588_CH0_CTRL (RK3588_PWM_BASE + 0x0C) - -//CH1 -#define RK3588_CH1_PERIOD_HPR (RK3588_PWM_BASE + 0x14) -#define RK3588_CH1_DUTY_LPR (RK3588_PWM_BASE + 0x18) -#define RK3588_CH1_CTRL (RK3588_PWM_BASE + 0x1C) - -//CH2 -#define RK3588_CH2_PERIOD_HPR (RK3588_PWM_BASE + 0x24) -#define RK3588_CH2_DUTY_LPR (RK3588_PWM_BASE + 0x28) -#define RK3588_CH2_CTRL (RK3588_PWM_BASE + 0x2C) - -//CH3 -#define RK3588_CH3_PERIOD_HPR (RK3588_PWM_BASE + 0x34) -#define RK3588_CH3_DUTY_LPR (RK3588_PWM_BASE + 0x38) -#define RK3588_CH3_CTRL (RK3588_PWM_BASE + 0x3C) - -//for short——pwm -#define RK3588_PWM_BASE (rk3588_soc_info_t.pwm_base) -#define RK3588_PWM_MUX (rk3588_soc_info_t.pwm_mux) -#define RK3588_PWM_MUX_VAL (rk3588_soc_info_t.pwm_mux_val) -#define RK3588_PWM_MUX_OFFSET (rk3588_soc_info_t.pwm_mux_offset) -#define RK3588_CH_PERIOD_HPR (rk3588_soc_info_t.ch_period_hpr) -#define RK3588_CH_DUTY_LPR (rk3588_soc_info_t.ch_duty_lpr) -#define RK3588_CH_CTRL (rk3588_soc_info_t.ch_crtl) - -//pwm_ctrl_offset -#define RK3588_RPT (24) // 24 ~ 31 -#define RK3588_SCALE (16) // 16 ~ 23 -#define RK3588_PRESCALE (12) // 12 ~ 14 -#define RK3588_CLK_SRC_SEL (10) -#define RK3588_CLK_SEL (9) -#define RK3588_FORCE_CLK_EN (8) -#define RK3588_CH_CNT_EN (7) -#define RK3588_CONLOCK (6) -#define RK3588_OUTPUT_MODE (5) -#define RK3588_INACTIVE_POL (4) -#define RK3588_DUTY_POL (3) -#define RK3588_PWM_MODE (1) // 1 ~ 2 -#define RK3588_PWM_EN (0) - -typedef struct { - unsigned int * gpio0_base; - unsigned int * gpio1_base; - unsigned int * gpio2_base; - unsigned int * gpio3_base; - unsigned int * gpio4_base; - - unsigned int * pmu1_ioc_base; - unsigned int * pmu2_ioc_base; - unsigned int * bus_ioc_base; - - unsigned int * cur_base; - unsigned int * pmu1cur_base; - - unsigned int * vccio1_4_ioc_base; - unsigned int * vccio3_5_ioc_base; - unsigned int * vccio6_ioc_base; - - unsigned int * pwm0_base; - unsigned int * pwm1_base; - unsigned int * pwm2_base; - unsigned int * pwm3_base; - unsigned int pwm_base; - unsigned int pwm_mux; - unsigned int pwm_mux_val; - unsigned int pwm_mux_offset; - unsigned int ch_period_hpr; - unsigned int ch_duty_lpr; - unsigned int ch_crtl; -} rk3588_soc_info; - -/*********** Rockchip RK3588 *************/ - -/*********** Rockchip RK3566 *************/ - -//gpio0~gpio4 register base addr -#define RK3566_GPIO0_BASE 0xfdd60000U -#define RK3566_GPIO1_BASE 0xfe740000U -#define RK3566_GPIO2_BASE 0xfe750000U -#define RK3566_GPIO3_BASE 0xfe760000U -#define RK3566_GPIO4_BASE 0xfe770000U - -//gpio offset -#define RK3566_GPIO_SWPORT_DR_L_OFFSET 0x00U -#define RK3566_GPIO_SWPORT_DR_H_OFFSET 0x04U -#define RK3566_GPIO_SWPORT_DDR_L_OFFSET 0x08U -#define RK3566_GPIO_SWPORT_DDR_H_OFFSET 0x0cU -#define RK3566_GPIO_EXT_PORT_OFFSET 0x70U - -#define RK3566_PMU_GRF_BASE 0xfdc20000U -#define RK3566_SYS_GRF_BASE 0xfdc60000U -#define RK3566_PMU_CRU_BASE 0xfdd00000U -#define RK3566_CRU_BASE 0xFdd20000U - -//clock -#define RK3566_CRU_GATE_CON31_OFFSET 0x37CU -#define RK3566_CRU_GATE_CON31 (RK3566_CRU_BASE + 0x37CU) -#define RK3566_CRU_GATE_CON32_OFFSET 0x380U -#define RK3566_CRU_GATE_CON32 (RK3566_CRU_BASE + 0x380U) -#define RK3566_PMUCRU_PMUGATE_CON01_OFFSET 0x184U //bit 9 bit10 0 enable - -//iomux + pull up/down -#define RK3566_GRF_GPIO1A_IOMUX_L_OFFSET 0x00U -#define RK3566_GRF_GPIO1A_P_OFFSET 0x80U -#define RK3566_PMU_GRF_GPIO0A_IOMUX_L_OFFSET 0x00U -#define RK3566_PMU_GRF_GPIO0A_P_OFFSET 0x20U - -//pwm mux register -#define RK3566_PWM_MUX_REG (RK3566_SYS_GRF_BASE + 0x70) - -//pwm register base addr -#define RK3566_PWM2_BASE 0xfe6f0000U -#define RK3566_PWM3_BASE 0xfe700000U - -//CH3 -#define RK3566_CH3_PERIOD_HPR (RK3566_PWM_BASE + 0x34) -#define RK3566_CH3_DUTY_LPR (RK3566_PWM_BASE + 0x38) -#define RK3566_CH3_CTRL (RK3566_PWM_BASE + 0x3C) - -//for short——pwm -#define RK3566_CRU_GATE_CON (rk3566_soc_info_t.cru_gate_con) -#define RK3566_CRU_GATE_CON_OFFSET (rk3566_soc_info_t.cru_gate_con_offset) -#define RK3566_PWM_BASE (rk3566_soc_info_t.pwm_base) -#define RK3566_PWM_MUX (rk3566_soc_info_t.pwm_mux) -#define RK3566_PWM_MUX_VAL (rk3566_soc_info_t.pwm_mux_val) -#define RK3566_PWM_MUX_OFFSET (rk3566_soc_info_t.pwm_mux_offset) -#define RK3566_CH_PERIOD_HPR (rk3566_soc_info_t.ch_period_hpr) -#define RK3566_CH_DUTY_LPR (rk3566_soc_info_t.ch_duty_lpr) -#define RK3566_CH_CTRL (rk3566_soc_info_t.ch_crtl) - -//pwm_ctrl_offset -#define RK3566_RPT (24) // 24 ~ 31 -#define RK3566_SCALE (16) // 16 ~ 23 -#define RK3566_PRESCALE (12) // 12 ~ 14 -#define RK3566_CLK_SRC_SEL (10) -#define RK3566_CLK_SEL (9) -#define RK3566_FORCE_CLK_EN (8) -#define RK3566_CH_CNT_EN (7) -#define RK3566_CONLOCK (6) -#define RK3566_OUTPUT_MODE (5) -#define RK3566_INACTIVE_POL (4) -#define RK3566_DUTY_POL (3) -#define RK3566_PWM_MODE (1) // 1 ~ 2 -#define RK3566_PWM_EN (0) - -typedef struct { - unsigned int * gpio0_base; - unsigned int * gpio1_base; - unsigned int * gpio2_base; - unsigned int * gpio3_base; - unsigned int * gpio4_base; - - unsigned int * pmu_grf_base; - unsigned int * sys_grf_base; - - unsigned int * cru_base; - unsigned int * pmu_cru_base; - - unsigned int * pwm2_base; - unsigned int * pwm3_base; - unsigned int cru_gate_con; - unsigned int cru_gate_con_offset; - unsigned int pwm_base; - unsigned int pwm_mux; - unsigned int pwm_mux_val; - unsigned int pwm_mux_offset; - unsigned int ch_period_hpr; - unsigned int ch_duty_lpr; - unsigned int ch_crtl; -} rk3566_soc_info; - -/*********** Rockchip RK3566 *************/ - - -/*********** Rockchip RK3399 *************/ - -#define RK3399_GPIO1_BASE 0xff730000U -#define RK3399_GPIO2_BASE 0xff780000U -#define RK3399_GPIO4_BASE 0xff790000U -#define RK3399_GPIO_NUM (0x40) -#define RK3399_GPIO_BIT(x) (1UL << (x)) -#define RK3399_GPIO_SWPORTA_DR_OFFSET 0x00U -#define RK3399_GPIO_SWPORTA_DDR_OFFSET 0x04U -#define RK3399_GPIO_EXT_PORTA_OFFSET 0x50U - -#define RK3399_GRF_GPIO2_3_4_P_OFFSET 0x00040U -#define RK3399_PMUGRF_GPIO0_1_P_OFFSET 0x00040U - -#define RK3399_PMUGRF_BASE 0xff320000U -#define RK3399_GRF_BASE 0xff77e000U -#define RK3399_CRU_BASE 0xff760000U -#define RK3399_PMUCRU_BASE 0xff750000U -#define RK3399_CRU_CLKGATE_CON31_OFFSET 0x037cU //bit 3 4 5 -#define RK3399_PMUCRU_CLKGATE_CON1_OFFSET 0x0104U - -typedef struct { - unsigned int * gpio2_base; - - unsigned int * grf_base; - unsigned int * cru_base; - unsigned int * pmucru_base; - unsigned int * pmugrf_base; - unsigned int * gpio1_base; - unsigned int * gpio4_base; -} rk3399_soc_info; - -/*********** Rockchip RK3399 *************/ - - -/*********** Rockchip RK3328 *************/ - -#define RK3328_GPIO2_BASE 0xff230000 -#define RK3328_GPIO3_BASE 0xff240000 -#define RK3328_GPIO_NUM (0x40) -#define RK3328_GPIO_SWPORTA_DR_OFFSET 0x00 -#define RK3328_GPIO_SWPORTA_DDR_OFFSET 0x04 -#define RK3328_GPIO_EXT_PORTA_OFFSET 0x50 -#define RK3328_GRF_BASE 0xff100000 -#define RK3328_CRU_BASE 0xff440000 -#define RK3328_CRU_CLKGATE_CON16_OFFSET 0x0240 //bit 7 8 9 10 9877 - -typedef struct { - unsigned int * gpio2_base; - unsigned int * gpio3_base; - unsigned int * cru_base; - unsigned int * grf_base; -} rk3328_soc_info; - -/*********** Rockchip RK3328 *************/ - - -/*************** S905D3 ******************/ - -#define S905D3_GPIO_BASE 0xFF634000 -#define S905D3_GPIO_AO_BASE 0xFF800000 -#define S905D3_GPIO_PWM_BASE 0xFFD19000 -#define S905D3_GPIO_PWM_AO_BASE 0xFF802000 - -//GPIOA -#define S905D3_GPIOA_OUT_EN_REG (S905D3_GPIO_BASE + 0x120) -#define S905D3_GPIOA_OUT_REG (S905D3_GPIO_BASE + 0x121) -#define S905D3_GPIOA_IN_REG (S905D3_GPIO_BASE + 0x122) -#define S905D3_GPIOA_PUPD_REG (S905D3_GPIO_BASE + 0x13F) -#define S905D3_GPIOA_PUEN_REG (S905D3_GPIO_BASE + 0x14D) -#define S905D3_GPIOA_MUX_REG1 (S905D3_GPIO_BASE + 0x1BD) -#define S905D3_GPIOA_MUX_REG2 (S905D3_GPIO_BASE + 0x1BE) - -//GPIOC -#define S905D3_GPIOC_OUT_EN_REG (S905D3_GPIO_BASE + 0x113) -#define S905D3_GPIOC_OUT_REG (S905D3_GPIO_BASE + 0x114) -#define S905D3_GPIOC_IN_REG (S905D3_GPIO_BASE + 0x115) -#define S905D3_GPIOC_PUPD_REG (S905D3_GPIO_BASE + 0x13B) -#define S905D3_GPIOC_PUEN_REG (S905D3_GPIO_BASE + 0x149) -#define S905D3_GPIOC_MUX_REG (S905D3_GPIO_BASE + 0x1B9) - -//GPIOH -#define S905D3_GPIOH_OUT_EN_REG (S905D3_GPIO_BASE + 0x119) -#define S905D3_GPIOH_OUT_REG (S905D3_GPIO_BASE + 0x11A) -#define S905D3_GPIOH_IN_REG (S905D3_GPIO_BASE + 0x11B) -#define S905D3_GPIOH_PUPD_REG (S905D3_GPIO_BASE + 0x13D) -#define S905D3_GPIOH_PUEN_REG (S905D3_GPIO_BASE + 0x14B) -#define S905D3_GPIOH_MUX_REG1 (S905D3_GPIO_BASE + 0x1BB) -#define S905D3_GPIOH_MUX_REG2 (S905D3_GPIO_BASE + 0x1BC) - -//GPIOAO -#define S905D3_GPIOAO_OUT_EN_REG (S905D3_GPIO_AO_BASE + 0x109) -#define S905D3_GPIOAO_OUT_REG (S905D3_GPIO_AO_BASE + 0x10D) -#define S905D3_GPIOAO_IN_REG (S905D3_GPIO_AO_BASE + 0x10A) -#define S905D3_GPIOAO_PUPD_REG (S905D3_GPIO_AO_BASE + 0x10B) -#define S905D3_GPIOAO_PUEN_REG (S905D3_GPIO_AO_BASE + 0x10C) -#define S905D3_GPIOAO_MUX_REG1 (S905D3_GPIO_AO_BASE + 0x105) -#define S905D3_GPIOAO_MUX_REG2 (S905D3_GPIO_AO_BASE + 0x106) - -//for short——gpio -#define S905D3_GPIO_OUT_EN (s905d3_gpio_info_t.gpio_out_en) -#define S905D3_GPIO_OUT (s905d3_gpio_info_t.gpio_out) -#define S905D3_GPIO_IN (s905d3_gpio_info_t.gpio_in) -#define S905D3_GPIO_PUPD (s905d3_gpio_info_t.gpio_pupd) -#define S905D3_GPIO_PUEN (s905d3_gpio_info_t.gpio_puen) -#define S905D3_GPIO_MUX (s905d3_gpio_info_t.gpio_mux) -#define S905D3_GPIO_OUT_EN_OFFSET (s905d3_gpio_info_t.gpio_out_en_offset) -#define S905D3_GPIO_OUT_OFFSET (s905d3_gpio_info_t.gpio_out_offset) -#define S905D3_GPIO_IN_OFFSET (s905d3_gpio_info_t.gpio_in_offset) -#define S905D3_GPIO_PUPD_OFFSET (s905d3_gpio_info_t.gpio_pupd_offset) -#define S905D3_GPIO_PUEN_OFFSET (s905d3_gpio_info_t.gpio_puen_offset) -#define S905D3_GPIO_MUX_OFFSET (s905d3_gpio_info_t.gpio_mux_offset) - -//PWM -#define S905D3_PWM_DUTY_CYCLE_F_REG (S905D3_GPIO_PWM_BASE + 0x01) -#define S905D3_PWM_MISC_EF_REG (S905D3_GPIO_PWM_BASE + 0x02) -#define S905D3_PWM_DUTY_CYCLE_AO_C_REG (S905D3_GPIO_PWM_AO_BASE) -#define S905D3_PWM_MISC_AO_CD_REG (S905D3_GPIO_PWM_AO_BASE + 0x02) - -//for short——pwm -#define S905D3_PWM_DUTY_CYCLE (s905d3_gpio_info_t.pwm_duty_cycle) -#define S905D3_PWM_MISC (s905d3_gpio_info_t.pwm_misc) - -//PWM_MISC_OFFSET -#define S905D3_PWM_CLK_EN_1 (23) -#define S905D3_PWM_CLK_DIV_1 (16) // 22 ~ 16 -#define S905D3_PWM_CLK_EN_0 (15) -#define S905D3_PWM_CLK_DIV_0 (8) // 8 ~ 14 -#define S905D3_PWM_CLK_SEL_1 (6) // 7 ~ 6 -#define S905D3_PWM_CLK_SEL_0 (4) // 5 ~ 4 -#define S905D3_PWM_EN_1 (1) -#define S905D3_PWM_EN_0 (0) - -typedef struct { - unsigned int * gpio_base; - unsigned int * gpio_ao_base; - unsigned int * gpio_pwm_base; - unsigned int * gpio_pwm_ao_base; - unsigned int gpio_out_en; - unsigned int gpio_out; - unsigned int gpio_in; - unsigned int gpio_pupd; - unsigned int gpio_puen; - unsigned int gpio_mux; - unsigned int gpio_out_en_offset; - unsigned int gpio_out_offset; - unsigned int gpio_in_offset; - unsigned int gpio_pupd_offset; - unsigned int gpio_puen_offset; - unsigned int gpio_mux_offset; - unsigned int pwm_duty_cycle; - unsigned int pwm_misc; -} s905d3_gpio_info; - -/*************** S905D3 ******************/ - // Mask for the bottom 64 pins which belong to the Raspberry Pi // The others are available for the other devices @@ -639,51 +236,10 @@ extern int wiringPiDebug; // Pi model types and version numbers // Intended for the GPIO program Use at your own risk. -/* Allwinner H6 */ -#define PI_MODEL_3 0 -#define PI_MODEL_LTIE_2 1 +/* Allwinner H618 */ +#define PI_MODEL_ZERO 0 +#define PI_MODEL_BERRY 1 -/* Allwinner H2+ */ -#define PI_MODEL_ZERO 2 - -/* Allwinner H3 */ -#define PI_MODEL_H3 3 -#define PI_MODEL_ZERO_PLUS_2 4 - -/* Allwinner A64 */ -#define PI_MODEL_WIN 5 - -/* Allwinner H5 */ -#define PI_MODEL_PRIME 6 -#define PI_MODEL_PC_2 7 -#define PI_MODEL_ZERO_PLUS 8 - -/* Allwinner H616 */ -#define PI_MODEL_ZERO_2 9 -#define PI_MODEL_ZERO_2_W 10 - - -/* Rockchip RK3399 */ -#define PI_MODEL_800 15 -#define PI_MODEL_4 16 -#define PI_MODEL_4_LTS 17 -#define PI_MODEL_RK3399 18 - -/* Rockchip RK3328 */ -#define PI_MODEL_R1_PLUS 22 - -/* Rockchip RK3588(s) */ -#define PI_MODEL_900 23 -#define PI_MODEL_5 24 -#define PI_MODEL_5B 25 -#define PI_MODEL_5_PLUS 26 - -/* Rockchip RK3566 */ -#define PI_MODEL_CM4 27 -#define PI_MODEL_3B 28 - -/* S905D3 */ -#define PI_MODEL_3_PLUS 29 extern const char *piModelNames [16] ; @@ -760,7 +316,7 @@ extern "C" { // Internal -#ifdef CONFIG_ORANGEPI +#ifdef CONFIG_BANANAPI extern void piGpioLayoutOops (const char *why); #endif @@ -802,9 +358,6 @@ extern int physPinToGpio(int physPin) ; extern void setPadDrive(int group, int value) ; extern int getAlt(int pin) ; extern void H618_set_pwm_reg(int pin,sunxi_gpio_info *sunxi_gpio_info_ptr) ; -extern void s905d3_set_gpio_reg(int pin,s905d3_gpio_info *s905d3_gpio_info_ptr) ; -extern void rk3588_set_pwm_reg(int pin,rk3588_soc_info *rk3588_soc_info_ptr) ; -extern void rk3566_set_pwm_reg(int pin,rk3566_soc_info *rk3566_soc_info_ptr) ; extern void sunxi_pwm_set_enable(int en) ; extern void pwmToneWrite(int pin, int freq) ; extern void pwmSetMode(int pin,int mode) ; @@ -841,12 +394,12 @@ extern unsigned int micros (void) ; extern unsigned int readR(unsigned int addr); extern void writeR(unsigned int val, unsigned int addr); -extern int OrangePi_get_gpio_mode(int pin); -extern int OrangePi_set_gpio_mode(int pin, int mode); -extern int OrangePi_digitalRead(int pin); -extern int OrangePi_digitalWrite(int pin, int value); -extern int OrangePi_set_gpio_alt(int pin, int mode); -extern void OrangePi_set_gpio_pullUpDnControl (int pin, int pud); +extern int BananaPi_get_gpio_mode(int pin); +extern int BananaPi_set_gpio_mode(int pin, int mode); +extern int BananaPi_digitalRead(int pin); +extern int BananaPi_digitalWrite(int pin, int value); +extern int BananaPi_set_gpio_alt(int pin, int mode); +extern void BananaPi_set_gpio_pullUpDnControl (int pin, int pud); extern void sunxi_pwm_set_act(int pin,int act_cys); extern void sunxi_pwm_set_period(int pin,unsigned int period_cys); extern void sunxi_pwm_set_clk(int pin,int clk);