You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by xi...@apache.org on 2022/07/23 10:25:43 UTC
[incubator-nuttx] branch master updated: Added Adafruit QT Py RP2040 board. Added ability to configure indivdual UART, SPI and I2C pin location.
This is an automated email from the ASF dual-hosted git repository.
xiaoxiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/incubator-nuttx.git
The following commit(s) were added to refs/heads/master by this push:
new c21c7ac8dc Added Adafruit QT Py RP2040 board. Added ability to configure indivdual UART, SPI and I2C pin location.
c21c7ac8dc is described below
commit c21c7ac8dc1ec3bb6e14924635e2e30b26f72432
Author: curuvar <58...@users.noreply.github.com>
AuthorDate: Thu Jul 21 21:04:05 2022 -0400
Added Adafruit QT Py RP2040 board.
Added ability to configure indivdual UART, SPI and I2C pin location.
---
.../boards/adafruit-feather-rp2040/index.rst | 3 +-
.../arm/rp2040/boards/adafruit-kb2040/index.rst | 3 +-
.../rp2040/boards/adafruit-qt-py-rp2040/QT-Py.png | Bin 0 -> 127939 bytes
.../rp2040/boards/adafruit-qt-py-rp2040/index.rst | 119 ++++
.../arm/rp2040/boards/pimoroni-tiny2040/index.rst | 3 +-
.../arm/rp2040/boards/raspberrypi-pico/index.rst | 3 +-
arch/arm/Kconfig | 1 +
arch/arm/src/rp2040/Kconfig | 780 ++++++++++++++-------
arch/arm/src/rp2040/rp2040_i2c_slave.c | 16 +-
arch/arm/src/rp2040/rp2040_ws2812.c | 66 +-
arch/arm/src/rp2040/rp2040_ws2812.h | 2 +
boards/Kconfig | 11 +
boards/arm/rp2040/adafruit-feather-rp2040/Kconfig | 292 +-------
.../configs/audiopack/defconfig | 6 +-
.../configs/composite/defconfig | 6 +-
.../configs/displaypack/defconfig | 6 +-
.../configs/enc28j60/defconfig | 11 +-
.../configs/lcd1602/defconfig | 4 +-
.../adafruit-feather-rp2040/configs/nsh/defconfig | 1 -
.../configs/nshsram/defconfig | 1 -
.../adafruit-feather-rp2040/configs/smp/defconfig | 1 -
.../configs/spisd/defconfig | 2 -
.../configs/ssd1306/defconfig | 4 +-
.../configs/st7735/defconfig | 2 -
.../configs/usbmsc/defconfig | 6 +-
.../configs/usbnsh/defconfig | 1 -
.../configs/waveshare-lcd-1.14/defconfig | 2 -
.../configs/waveshare-lcd-1.3/defconfig | 2 -
.../scripts/adafruit-feather-rp2040-flash.ld | 2 +-
.../src/rp2040_boardinitialize.c | 68 +-
.../adafruit-feather-rp2040/src/rp2040_bringup.c | 1 +
.../adafruit-feather-rp2040/src/rp2040_spi.c | 8 +-
boards/arm/rp2040/adafruit-kb2040/Kconfig | 309 +-------
.../adafruit-kb2040/configs/audiopack/defconfig | 6 +-
.../adafruit-kb2040/configs/composite/defconfig | 6 +-
.../adafruit-kb2040/configs/displaypack/defconfig | 6 +-
.../adafruit-kb2040/configs/enc28j60/defconfig | 12 +-
.../adafruit-kb2040/configs/lcd1602/defconfig | 2 -
.../rp2040/adafruit-kb2040/configs/nsh/defconfig | 1 -
.../adafruit-kb2040/configs/nshsram/defconfig | 1 -
.../rp2040/adafruit-kb2040/configs/smp/defconfig | 1 -
.../rp2040/adafruit-kb2040/configs/spisd/defconfig | 6 +-
.../adafruit-kb2040/configs/ssd1306/defconfig | 2 -
.../adafruit-kb2040/configs/st7735/defconfig | 3 +-
.../adafruit-kb2040/configs/usbmsc/defconfig | 6 +-
.../adafruit-kb2040/configs/usbnsh/defconfig | 1 -
.../configs/waveshare-lcd-1.14/defconfig | 2 -
.../configs/waveshare-lcd-1.3/defconfig | 2 -
boards/arm/rp2040/adafruit-kb2040/include/board.h | 9 +-
.../scripts/adafruit-kb2040-flash.ld | 2 +-
.../adafruit-kb2040/src/rp2040_boardinitialize.c | 68 +-
.../rp2040/adafruit-kb2040/src/rp2040_bringup.c | 1 +
boards/arm/rp2040/adafruit-kb2040/src/rp2040_spi.c | 8 +-
boards/arm/rp2040/adafruit-qt-py-rp2040/Kconfig | 30 +
boards/arm/rp2040/adafruit-qt-py-rp2040/README.txt | 98 +++
.../configs/gpio/defconfig | 16 +-
.../configs/nsh/defconfig | 14 +-
.../configs/nshsram}/defconfig | 15 +-
.../configs/smp/defconfig | 14 +-
.../configs/usbnsh/defconfig | 9 +-
.../include/board.h | 17 +-
.../adafruit-qt-py-rp2040/include/rp2040_i2cdev.h | 61 +-
.../adafruit-qt-py-rp2040/include/rp2040_i2sdev.h | 61 +-
.../adafruit-qt-py-rp2040/include/rp2040_spidev.h | 60 +-
.../adafruit-qt-py-rp2040/include/rp2040_spisd.h | 58 +-
.../rp2040/adafruit-qt-py-rp2040/scripts/Make.defs | 45 ++
.../scripts/adafruit-qt-py-rp2040-flash.ld} | 4 +-
.../scripts/adafruit-qt-py-rp2040-sram.ld} | 31 +-
.../arm/rp2040/adafruit-qt-py-rp2040/src/Make.defs | 41 ++
.../adafruit-qt-py-rp2040/src/rp2040_appinit.c | 79 +--
.../src/rp2040_boardinitialize.c | 70 +-
.../src/rp2040_bringup.c | 3 +-
.../rp2040/adafruit-qt-py-rp2040/src/rp2040_gpio.c | 392 +++++++++++
.../rp2040/adafruit-qt-py-rp2040/src/rp2040_pico.h | 36 +
.../adafruit-qt-py-rp2040/src/rp2040_reset.c | 61 ++
.../src/rp2040_spi.c | 10 +-
boards/arm/rp2040/common/Kconfig | 525 +++++++++++++-
boards/arm/rp2040/common/src/rp2040_spisd.c | 4 +-
boards/arm/rp2040/common/src/rp2040_st7735.c | 4 +-
boards/arm/rp2040/common/src/rp2040_st7789.c | 4 +-
boards/arm/rp2040/pimoroni-tiny2040/Kconfig | 309 +-------
.../pimoroni-tiny2040/configs/composite/defconfig | 6 +-
.../pimoroni-tiny2040/configs/gpio/defconfig | 1 -
.../rp2040/pimoroni-tiny2040/configs/nsh/defconfig | 1 -
.../pimoroni-tiny2040/configs/nshsram/defconfig | 1 -
.../rp2040/pimoroni-tiny2040/configs/smp/defconfig | 1 -
.../pimoroni-tiny2040/configs/spisd/defconfig | 6 +-
.../pimoroni-tiny2040/configs/usbmsc/defconfig | 6 +-
.../pimoroni-tiny2040/configs/usbnsh/defconfig | 1 -
.../pimoroni-tiny2040/src/rp2040_boardinitialize.c | 68 +-
.../rp2040/pimoroni-tiny2040/src/rp2040_bringup.c | 1 +
.../arm/rp2040/pimoroni-tiny2040/src/rp2040_spi.c | 4 +-
boards/arm/rp2040/raspberrypi-pico/Kconfig | 347 +--------
.../raspberrypi-pico/configs/audiopack/defconfig | 2 -
.../raspberrypi-pico/configs/composite/defconfig | 2 -
.../raspberrypi-pico/configs/displaypack/defconfig | 2 -
.../raspberrypi-pico/configs/enc28j60/defconfig | 7 +-
.../raspberrypi-pico/configs/lcd1602/defconfig | 2 -
.../rp2040/raspberrypi-pico/configs/nsh/defconfig | 1 -
.../raspberrypi-pico/configs/nshsram/defconfig | 1 -
.../rp2040/raspberrypi-pico/configs/smp/defconfig | 1 -
.../raspberrypi-pico/configs/spisd/defconfig | 2 -
.../raspberrypi-pico/configs/ssd1306/defconfig | 2 -
.../raspberrypi-pico/configs/st7735/defconfig | 6 +-
.../raspberrypi-pico/configs/usbmsc/defconfig | 2 -
.../raspberrypi-pico/configs/usbnsh/defconfig | 1 -
.../configs/waveshare-lcd-1.14/defconfig | 2 -
.../configs/waveshare-lcd-1.3/defconfig | 2 -
.../raspberrypi-pico/src/rp2040_boardinitialize.c | 68 +-
.../rp2040/raspberrypi-pico/src/rp2040_bringup.c | 1 +
.../arm/rp2040/raspberrypi-pico/src/rp2040_spi.c | 8 +-
drivers/leds/ws2812.c | 2 +-
include/nuttx/leds/ws2812.h | 7 +-
113 files changed, 2392 insertions(+), 2130 deletions(-)
diff --git a/Documentation/platforms/arm/rp2040/boards/adafruit-feather-rp2040/index.rst b/Documentation/platforms/arm/rp2040/boards/adafruit-feather-rp2040/index.rst
index 7b128bb653..2804c50eab 100644
--- a/Documentation/platforms/arm/rp2040/boards/adafruit-feather-rp2040/index.rst
+++ b/Documentation/platforms/arm/rp2040/boards/adafruit-feather-rp2040/index.rst
@@ -55,9 +55,10 @@ the power.
Pin Mapping
===========
+Pads numbered anticlockwise from USB connector.
===== ========== ==========
-Pin Signal Notes
+Pad Signal Notes
===== ========== ==========
1 Reset Pull to ground to reset the RP2040 processor.
2 3.3V Power out to peripherals.
diff --git a/Documentation/platforms/arm/rp2040/boards/adafruit-kb2040/index.rst b/Documentation/platforms/arm/rp2040/boards/adafruit-kb2040/index.rst
index 546aa1bc48..d3074d5b26 100644
--- a/Documentation/platforms/arm/rp2040/boards/adafruit-kb2040/index.rst
+++ b/Documentation/platforms/arm/rp2040/boards/adafruit-kb2040/index.rst
@@ -50,9 +50,10 @@ A ws2812 (NeoPixel) smart RGB LED controlled by GPIO17.
Pin Mapping
===========
+Pads numbered anticlockwise from USB connector.
===== ========== ==========
-Pin Signal Notes
+Pad Signal Notes
===== ========== ==========
1 D+ Alternate USB data connection.
2 GPIO0 Default TX for UART0 serial console
diff --git a/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/QT-Py.png b/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/QT-Py.png
new file mode 100644
index 0000000000..6441fec3c6
Binary files /dev/null and b/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/QT-Py.png differ
diff --git a/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/index.rst b/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/index.rst
new file mode 100644
index 0000000000..3052d078e6
--- /dev/null
+++ b/Documentation/platforms/arm/rp2040/boards/adafruit-qt-py-rp2040/index.rst
@@ -0,0 +1,119 @@
+=======================
+Adafruit QT Py RP2040
+=======================
+
+The QT Py RP2040 is a tiny general purpose RP2040 board supplied by
+Adafruit.
+
+.. figure:: QT-Py.png
+ :align: center
+
+Features
+========
+
+* RP2040 microcontroller chip
+* Dual-core ARM Cortex M0+ processor, flexible clock running up to 133 MHz
+* 264kB of SRAM, and 8MB of on-board Flash memory
+* Castellated module allows soldering direct to carrier boards
+* USB Host and Device support via type C connector.
+* Low-power sleep and dormant modes
+* Drag & drop programming using mass storage over USB
+* 13 multi-function GPIO pins (11 breakout pads and two QT pads)
+* 2× SPI, 2× I2C, 2× UART, 4× 12-bit ADC, 16× controllable PWM channels
+* Accurate clock and timer on-chip
+* Temperature sensor
+* Accelerated floating point libraries on-chip
+* 8 × Programmable IO (PIO) state machines for custom peripheral support
+
+Serial Console
+==============
+
+By default a serial console appears on GPIO pins 20 (RX GPIO1) and pin 5
+(TX GPIO1). This console runs a 115200-8N1.
+
+The board can be configured to use the USB connection as the serial console.
+
+Buttons and LEDs
+================
+
+A ws2812 (NeoPixel) smart RGB LED controlled by GPIO12 (data) and
+GPIO11 (power).
+
+There is a BOOT button which if held down when power is first
+applied or the RESET button is pressed will cause the RP2040 to
+boot into program mode and appear as a storage device to
+a USB connecter. Saving a .UF2 file to this device will
+replace the Flash ROM contents on the RP2040.
+
+A RESET button that allows rebooting the board without disconnecting
+the power.
+
+Pin Mapping
+===========
+Pads numbered anticlockwise from USB connector.
+
+===== ========== ==========
+Pad Signal Notes
+===== ========== ==========
+1 GPIO26 ADC0
+2 GPIO27 ADC1
+3 GPIO28 ADC2
+4 GPIO29 ADC3
+5 GPIO24
+6 GPIO25
+7 GPIO20 Default TX for UART1 serial console
+8 GPIO5 Default RX for UART1 serial console
+9 GPIO6
+10 GPIO4
+11 GPIO3
+12 3.3V Power out to peripherals.
+13 Ground
+14 5V
+===== ========== ==========
+
+The board has a STEMMA QT connector that is also connected to
+pins GPIO22 (I2C1 SDA) and GPIO23 (I2C1 SCL).
+
+Power Supply
+============
+
+The Raspberry Pi Pico can be powered via the USB connector,
+or by supplying +5V to pin 14. The board had a diode that prevents
+power from pin 14 from flowing back to the USB socket, although
+this can be disabled by connecting on-board solder pads if there
+is need to run as a usb host.
+
+The Raspberry Pi Pico chip run on 3.3 volts which is supplied by
+an on board regulator.
+
+
+Configurations
+==============
+
+gpio
+--------
+
+NuttShell configuration (console enabled in UART1, at 115200 bps) with GPIO examples.
+
+nsh
+---
+
+Basic NuttShell configuration (console enabled in UART1, at 115200 bps).
+
+nshsram
+-------
+
+NuttShell configuration (console enabled in UART1, at 115200 bps) with interrupt
+vectors in RAM.
+
+smp
+---
+
+Basic NuttShell configuration (console enabled in UART1, at 115200 bps) with
+both ARM cores enabled.
+
+usbnsh
+------
+
+Basic NuttShell configuration (console enabled in USB Port, at 115200 bps).
+
diff --git a/Documentation/platforms/arm/rp2040/boards/pimoroni-tiny2040/index.rst b/Documentation/platforms/arm/rp2040/boards/pimoroni-tiny2040/index.rst
index 7bb7f3fe96..e4b61efd11 100644
--- a/Documentation/platforms/arm/rp2040/boards/pimoroni-tiny2040/index.rst
+++ b/Documentation/platforms/arm/rp2040/boards/pimoroni-tiny2040/index.rst
@@ -46,9 +46,10 @@ on the RP2040.
Pin Mapping
===========
+Pads numbered anticlockwise from USB connector.
===== ========== ==========
-Pin Signal Notes
+Pad Signal Notes
===== ========== ==========
1 VBUS Connected to USB +5V
2 Ground
diff --git a/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst b/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
index a5d24637fc..69aed30a0d 100644
--- a/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
+++ b/Documentation/platforms/arm/rp2040/boards/raspberrypi-pico/index.rst
@@ -46,9 +46,10 @@ on the RP2040.
Pin Mapping
===========
+Pads numbered anticlockwise from USB connector.
===== ========== ==========
-Pin Signal Notes
+Pad Signal Notes
===== ========== ==========
1 GPIO0 Default TX for UART0 serial console
2 GPIO1 Default RX for UART1 serial console
diff --git a/arch/arm/Kconfig b/arch/arm/Kconfig
index 353dc7440e..c26c70c490 100644
--- a/arch/arm/Kconfig
+++ b/arch/arm/Kconfig
@@ -236,6 +236,7 @@ config ARCH_CHIP_RP2040
select ARM_HAVE_WFE_SEV
select LIBC_ARCH_ATOMIC
select ARCH_HAVE_PWM_MULTICHAN
+ select ARCH_BOARD_COMMON
---help---
Raspberry Pi RP2040 architectures (ARM dual Cortex-M0+).
diff --git a/arch/arm/src/rp2040/Kconfig b/arch/arm/src/rp2040/Kconfig
index a2453d86af..00380ea430 100644
--- a/arch/arm/src/rp2040/Kconfig
+++ b/arch/arm/src/rp2040/Kconfig
@@ -3,229 +3,261 @@
# see the file kconfig-language.txt in the NuttX tools repository.
#
-comment "RP2040 Configuration Options"
+ comment "RP2040 Configuration Options"
+
+config RP2040_DMAC
+ bool "DMAC support"
+ default y
+ select ARCH_DMA
+
+#####################################################################
+# UART Configuration
+#####################################################################
config RP2040_UART0
bool "UART0"
default y
select UART0_SERIALDRIVER
select ARCH_HAVE_SERIAL_TERMIOS
+ ---help---
+ Most UART parameters are configured here. See also the
+ Board Selection menu to configure the pins used by UART0
if RP2040_UART0
-config RP2040_UART0_BAUD
- int "RP2040 UART0 BAUD"
- default 115200
+ config RP2040_UART0_BAUD
+ int "RP2040 UART0 BAUD"
+ default 115200
+ ---help---
+ RP2040 UART0 communication bit rate. The range of available
+ baud rates depend on the clock supplied to the UART. Given
+ the normally configured 125 MHz clock, the baud
+ rates between 120 and 7 812 500 baud are available.
+
+ config RP2040_UART0_PARITY
+ int "RP2040 UART0 parity"
+ default 0
+ range 0 2
+ ---help---
+ RP2040 UART0 parity. 0=None, 1=Odd, 2=Even. Default: None
-config RP2040_UART0_PARITY
- int "RP2040 UART0 parity"
- default 0
- range 0 2
- ---help---
- RP2040 UART0 parity. 0=None, 1=Odd, 2=Even. Default: None
+ config RP2040_UART0_BITS
+ int "RP2040 UART0 number of bits"
+ default 8
+ range 5 8
+ ---help---
+ RP2040 UART0 number of bits. Default: 8
-config RP2040_UART0_BITS
- int "RP2040 UART0 number of bits"
- default 8
- range 5 8
- ---help---
- RP2040 UART0 number of bits. Default: 8
+ config RP2040_UART0_2STOP
+ int "RP2040 UART0 two stop bits"
+ default 0
+ ---help---
+ 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
-config RP2040_UART0_2STOP
- int "RP2040 UART0 two stop bits"
- default 0
- ---help---
- 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
+endif # RP2040_UART0
-endif
+#####################################################################
config RP2040_UART1
bool "UART1"
default n
select UART1_SERIALDRIVER
select ARCH_HAVE_SERIAL_TERMIOS
+ ---help---
+ Most UART parameters are configured here. See also the
+ Board Selection menu to configure the pins used by UART1
if RP2040_UART1
-config RP2040_UART1_BAUD
- int "RP2040 UART1 BAUD"
- default 115200
-
-config RP2040_UART1_PARITY
- int "RP2040 UART1 parity"
- default 0
- range 0 2
- ---help---
- RP2040 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
+ config RP2040_UART1_BAUD
+ int "RP2040 UART1 BAUD"
+ default 115200
+ ---help---
+ RP2040 UART0 communication bit rate. The range of available
+ baud rates depend on the clock supplied to the UART. Given
+ the normally configured 125 MHz clock, the baud
+ rates between 120 and 7 812 500 baud are available.
+
+ config RP2040_UART1_PARITY
+ int "RP2040 UART1 parity"
+ default 0
+ range 0 2
+ ---help---
+ RP2040 UART1 parity. 0=None, 1=Odd, 2=Even. Default: None
-config RP2040_UART1_BITS
- int "RP2040 UART1 number of bits"
- default 8
- range 5 8
- ---help---
- RP2040 UART1 number of bits. Default: 8
+ config RP2040_UART1_BITS
+ int "RP2040 UART1 number of bits"
+ default 8
+ range 5 8
+ ---help---
+ RP2040 UART1 number of bits. Default: 8
-config RP2040_UART1_2STOP
- int "RP2040 UART1 two stop bits"
- default 0
- ---help---
- 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
+ config RP2040_UART1_2STOP
+ int "RP2040 UART1 two stop bits"
+ default 0
+ ---help---
+ 0=1 stop bit, 1=Two stop bits. Default: 1 stop bit
endif
-config RP2040_DMAC
- bool "DMAC support"
- default y
- select ARCH_DMA
+#####################################################################
+# SPI Configuration
+#####################################################################
config RP2040_SPI
- bool "SPI"
+ bool "SPI Master Mode Support"
select SPI
if RP2040_SPI
-config RP2040_SPI0
- bool "SPI0"
+ config RP2040_SPI0
+ bool "SPI0"
+ default n
+ ---help---
+ Most SPI parameters are configured here. See also the
+ Board Selection menu to configure the pins used by SPI0
-config RP2040_SPI1
- bool "SPI1"
+ config RP2040_SPI1
+ bool "SPI1"
+ default n
+ ---help---
+ Most SPI parameters are configured here. See also the
+ Board Selection menu to configure the pins used by SPI1
-config RP2040_SPI_DMA
- bool "SPI DMA"
- default y
- depends on RP2040_DMAC
- ---help---
- Use DMA to improve SPI transfer performance.
+ config RP2040_SPI_DMA
+ bool "SPI DMA"
+ default y
+ depends on RP2040_DMAC
+ ---help---
+ Use DMA to improve SPI transfer performance.
-config RP2040_SPI_DMATHRESHOLD
- int "SPI DMA threshold"
- default 4
- depends on RP2040_SPI_DMA
- ---help---
- When SPI DMA is enabled, small DMA transfers will still be performed
- by polling logic. But we need a threshold value to determine what
- is small. That value is provided by RP2040_SPI_DMATHRESHOLD.
+ config RP2040_SPI_DMATHRESHOLD
+ int "SPI DMA threshold"
+ default 4
+ depends on RP2040_SPI_DMA
+ ---help---
+ When SPI DMA is enabled, small DMA transfers will still be performed
+ by polling logic. But we need a threshold value to determine what
+ is small. That value is provided by RP2040_SPI_DMATHRESHOLD.
+
+ config RP2040_SPI_DRIVER
+ bool "SPI character driver"
+ default y
+ select SPI_DRIVER
+ ---help---
+ Build in support for a character driver at /dev/spi[N] that may be
+ used to perform SPI bus transfers from applications. The intent of
+ this driver is to support SPI testing.
-config RP2040_SPI_DRIVER
- bool "SPI character driver"
- default y
- select SPI_DRIVER
- ---help---
- Build in support for a character driver at /dev/spi[N] that may be
- used to perform SPI bus transfers from applications. The intent of
- this driver is to support SPI testing.
+endif # RP2040_SPI
-endif
+#####################################################################
+# I2C Configuration (Master)
+#####################################################################
config RP2040_I2C
bool "I2C Master"
select I2C
---help---
Build in support for I2C master mode.
-
Note: Do not configure the same port as both master and slave.
if RP2040_I2C
-config RP2040_I2C0
- bool "I2C0"
+ config RP2040_I2C0
+ bool "I2C0"
+ default n
+ ---help---
+ See the Board Selection menu to configure the pins used by I2C0.
-config RP2040_I2C1
- bool "I2C1"
+ config RP2040_I2C1
+ bool "I2C1"
+ default n
+ ---help---
+ See the Board Selection menu to configure the pins used by I2C1.
-config RP2040_I2C_DRIVER
- bool "I2C character driver"
- default n
- select I2C_DRIVER
- ---help---
- Build in support for a character driver at /dev/i2c[N] that may be
- used to perform I2C bus transfers from applications. The intent of
- this driver is to support I2C testing. It is not suitable for use
- in any real driver application.
+ config RP2040_I2C_DRIVER
+ bool "I2C character driver"
+ default n
+ select I2C_DRIVER
+ ---help---
+ Build in support for a character driver at /dev/i2c[N] that may be
+ used to perform I2C bus transfers from applications. The intent of
+ this driver is to support I2C testing. It is not suitable for use
+ in any real driver application.
-endif
+endif # RP2040_I2C
+
+#####################################################################
+# I2C Configuration (Slave)
+#####################################################################
config RP2040_I2C_SLAVE
bool "I2C Slave"
select I2C_SLAVE
---help---
Build in support for I2C slave mode.
-
Note: Do not configure the same port as both master and slave.
if RP2040_I2C_SLAVE
-config RP2040_I2C0_SLAVE
- bool "I2C0"
-
-if RP2040_I2C0_SLAVE
-
-config RP2040_I2C0_SLAVE_SDA
- int "GPIO pin number for SDA (data) line"
- default 4
- ---help---
- This pin must be one of: 0, 4, 8, 12, 16, 20, 24, or 28
-
-config RP2040_I2C0_SLAVE_SCL
- int "GPIO pin number for SCL (clock) line"
- default 5
- ---help---
- This pin must be one of: 1, 5, 9, 13, 17, 21, 25, or 29
-
-config RP2040_I2C0_SLAVE_ADDRESS
- int "Slave Address (in decimal)"
- default 42
- ---help---
- This is the default address of this device on the I2C bus.
- It should be the canonical address (not the shifted address)
- in the range 8-119 for 7-bit mode and in the range 0-1023
- for 10-bit mode.
-
-config RP2040_I2C0_SLAVE_10BIT
- bool "Enable 10-bit slave address"
- default n
- ---help---
- Set to enable 10-bit mode addressing.
-
-endif
+ config RP2040_I2C0_SLAVE
+ bool "I2C0"
+ default n
+ ---help---
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_I2C0_SLAVE
+
+ config RP2040_I2C0_SLAVE_ADDRESS
+ int "Slave Address (in decimal)"
+ default 42
+ ---help---
+ This is the default address of this device on the I2C bus.
+ It should be the canonical address (not the shifted address)
+ in the range 8-119 for 7-bit mode and in the range 0-1023
+ for 10-bit mode.
+
+ config RP2040_I2C0_SLAVE_10BIT
+ bool "Enable 10-bit slave address"
+ default n
+ ---help---
+ Set to enable 10-bit mode addressing.
+
+ endif # RP2040_I2C0_SLAVE
+
+ config RP2040_I2C1_SLAVE
+ bool "I2C1"
+ default n
+ ---help---
+ See the Board Selection menu to configure the pins used by I2C0.
-config RP2040_I2C1_SLAVE
- bool "I2C1"
+ if RP2040_I2C1_SLAVE
-if RP2040_I2C1_SLAVE
+ config RP2040_I2C1_SLAVE_ADDRESS
+ int "Slave Address (in decimal)"
+ default 42
+ ---help---
+ This is the default address of this device on the I2C bus.
+ It should be the canonical address (not the shifted address)
+ in the range 8-119 for 7-bit mode and in the range 0-1023
+ for 10-bit mode.
-config RP2040_I2C1_SLAVE_SDA
- int "GPIO pin number for SDA (data) line"
- default 6
- ---help---
- This pin must be one of: 2, 6, 10, 14, 18, 22, or 26
-
-config RP2040_I2C1_SLAVE_SCL
- int "GPIO pin number for SCL (clock) line"
- default 7
- ---help---
- This pin must be one of: 3, 7, 11, 15, 19, 23, or 27
+ config RP2040_I2C1_SLAVE_10BIT
+ bool "Enable 10-bit slave address"
+ default n
+ ---help---
+ Set to enable 10-bit mode addressing.
-config RP2040_I2C1_SLAVE_ADDRESS
- int "Slave Address (in decimal)"
- default 42
- ---help---
- This is the default address of this device on the I2C bus.
- It should be the canonical address (not the shifted address)
- in the range 8-119 for 7-bit mode and in the range 0-1023
- for 10-bit mode.
+ endif # RP2040_I2C1_SLAVE
-config RP2040_I2C1_SLAVE_10BIT
- bool "Enable 10-bit slave address"
- default n
- ---help---
- Set to enable 10-bit mode addressing.
+endif # RP2040_I2C_SLAVE
-endif
+#####################################################################
+# PWM Configuration
+#####################################################################
-endif
-
-menuconfig RP2040_PWM
+config RP2040_PWM
bool "PWM"
select PWM
---help---
@@ -234,145 +266,425 @@ menuconfig RP2040_PWM
if RP2040_PWM
-config PWM_MULTICHAN
- bool "Support Multi-Channel PWM"
- default y
- ---help---
- If support for multi-channel PWM is disabled, the generated code
- will only support the A channel of the PWM slices.
+ config PWM_MULTICHAN
+ bool "Support Multi-Channel PWM"
+ default y
+ ---help---
+ If support for multi-channel PWM is disabled, the generated code
+ will only support the A channel of the PWM slices.
if PWM_MULTICHAN
+
config PWM_NCHANNELS
- int "Number of channels"
- default 2
- ---help---
- If the number of channels is set to 1, the generated code will
- only support the A channel of the PWM slices. This is functionally
- identical to disabling multi-channel PWM support.
- endif
+ int "Number of channels"
+ default 2
+ ---help---
+ If the number of channels is set to 1, the generated code will
+ only support the A channel of the PWM slices. This is functionally
+ identical to disabling multi-channel PWM support.
+
+ endif # PWM_MULTICHAN
config RP2040_PWM0
bool "PWM0"
---help---
- Drives GPIO pin 0 or 16 with the A channel, and
- drives GPIO pin 1 or 17 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM0
+
+ config RP2040_PWM0A_INVERT
+ bool "PWM0 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM0B_INVERT
+ bool "PWM0 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM0_PHASE_CORRECT
+ bool "PWM0 phase correct"
+ default n
+
+ endif # RP2040_PWM0
+
+ ###################################################################
config RP2040_PWM1
bool "PWM1"
---help---
- Drives GPIO pin 2 or 18 with the A channel, and
- drives GPIO pin 3 or 19 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM1
+
+ config RP2040_PWM1A_INVERT
+ bool "PWM1 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM1B_INVERT
+ bool "PWM1 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM1_PHASE_CORRECT
+ bool "PWM1 phase correct"
+ default n
+
+ endif # RP2040_PWM1
+
+ ###################################################################
config RP2040_PWM2
bool "PWM2"
---help---
- Drives GPIO pin 4 or 20 with the A channel, and
- drives GPIO pin 5 or 21 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM2
+
+ config RP2040_PWM2A_INVERT
+ bool "PWM2 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM2B_INVERT
+ bool "PWM2 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM2_PHASE_CORRECT
+ bool "PWM2 phase correct"
+ default n
+
+ endif # RP2040_PWM2
+
+ ###################################################################
config RP2040_PWM3
bool "PWM3"
---help---
- Drives GPIO pin 6 or 22 with the A channel, and
- drives GPIO pin 7 or 23 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM3
+
+ config RP2040_PWM3A_GPIO
+
+ config RP2040_PWM3A_INVERT
+ bool "PWM3 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM3B_INVERT
+ bool "PWM3 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM3_PHASE_CORRECT
+ bool "PWM3 phase correct"
+ default n
+
+ endif # RP2040_PWM3
+
+#####################################################################
config RP2040_PWM4
bool "PWM4"
---help---
- Drives GPIO pin 8 or 24 with the A channel, and
- drives GPIO pin 9 or 25 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM4
+
+ config RP2040_PWM4A_INVERT
+ bool "PWM4 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM4B_INVERT
+ bool "PWM4 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM4_PHASE_CORRECT
+ bool "PWM4 phase correct"
+ default n
+
+ endif # RP2040_PWM4
+
+#####################################################################
config RP2040_PWM5
bool "PWM5"
---help---
- Drives GPIO pin 10 or 26 with the A channel, and
- drives GPIO pin 11 or 27 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM5
+
+ config RP2040_PWM5A_INVERT
+ bool "PWM5 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM5B_INVERT
+ bool "PWM5 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM5_PHASE_CORRECT
+ bool "PWM5 phase correct"
+ default n
+
+ endif # RP2040_PWM5
+
+#####################################################################
config RP2040_PWM6
bool "PWM6"
---help---
- Drives GPIO pin 12 or 28 with the A channel, and
- drives GPIO pin 13 or 29 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
+
+ if RP2040_PWM6
+
+ config RP2040_PWM6A_INVERT
+ bool "PWM6 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM6B_INVERT
+ bool "PWM6 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM6_PHASE_CORRECT
+ bool "PWM6 phase correct"
+ default n
+
+ endif # RP2040_PWM6
+
+#####################################################################
config RP2040_PWM7
bool "PWM7"
---help---
- Drives GPIO pin 14 with the A channel, and
- drives GPIO pin 15 with the B channel.
+ See the Board Selection menu to configure the pins used by I2C0.
-endif
+ if RP2040_PWM7
+
+ config RP2040_PWM7A_INVERT
+ bool "PWM7 channel 1 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the A pin will idle high
+ with the pulse going low.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM7B_GPIO
+
+ config RP2040_PWM7B_INVERT
+ bool "PWM7 channel 2 invert"
+ default n
+ ---help---
+ If invert is enabled, the PWM on the B pin will idle high
+ with the pulse going low.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM7_PHASE_CORRECT
+ bool "PWM7 phase correct"
+ default n
+
+ endif # RP2040_PWM7
+
+endif # RP2040_PWM
+
+#####################################################################
+# I2S Configuration
+#####################################################################
config RP2040_I2S
bool "I2S"
select I2S
-
-if RP2040_I2S
-
-config RP2040_I2S_MAXINFLIGHT
- int "I2S queue size"
- default 16
---help---
- This is the total number of transfers that can be enqueue before
- the caller is required to wait. This setting determines the number
- certain queue data structures that will be pre-allocated.
+ See the Board Selection menu to configure the pins used by I2S.
-config RP2040_I2S_DATALEN
- int "Data width (bits)"
- default 16
- ---help---
- Data width in bits. This is a default value and may be change
- via the I2S interface
+if RP2040_I2S
-config RP2040_I2S_DATA
- int "I2S DATA GPIO pin assign (0-29)"
- default 9
- range 0 29
+ config RP2040_I2S_MAXINFLIGHT
+ int "I2S queue size"
+ default 16
+ ---help---
+ This is the total number of transfers that can be enqueue before
+ the caller is required to wait. This setting determines the number
+ certain queue data structures that will be pre-allocated.
-config RP2040_I2S_CLOCK
- int "I2S CLOCk GPIO pin assign (0-29)"
- default 10
- range 0 29
+ config RP2040_I2S_DATALEN
+ int "Data width (bits)"
+ default 16
+ ---help---
+ Data width in bits. This is a default value and may be change
+ via the I2S interface
-config RP2040_I2S_PIO
- int "RP2040 PIO number used for I2S (0-1)"
- default 0
- range 0 1
+ config RP2040_I2S_PIO
+ int "RP2040 PIO number used for I2S (0-1)"
+ default 0
+ range 0 1
-config RP2040_I2S_PIO_SM
- int "RP2040 PIO state machine number used for I2S (0-3)"
- default 0
- range 0 3
+ config RP2040_I2S_PIO_SM
+ int "RP2040 PIO state machine number used for I2S (0-3)"
+ default 0
+ range 0 3
endif
+
+#####################################################################
+# I2S Configuration
+#####################################################################
-menuconfig RP2040_SPISD
+config RP2040_SPISD
bool "SPI SD Card"
default n
select MMCSD_SPI
if RP2040_SPISD
-config RP2040_SPISD_SLOT_NO
- int "SPI SD Card Slot Number"
- default 0
- ---help---
- Select spi sd card slot number.
+ config RP2040_SPISD_SLOT_NO
+ int "SPI SD Card Slot Number"
+ default 0
+ ---help---
+ Select spi sd card slot number.
-config RP2040_SPISD_SPI_CH
- int "SPI channel number"
- default 0
- range 0 1
- ---help---
- Select spi channel number to use spi sd card.
+ config RP2040_SPISD_SPI_CH
+ int "SPI channel number"
+ default 0
+ range 0 1
+ ---help---
+ Select spi channel number to use spi sd card.
endif # SPISD Configuration
+#####################################################################
+# ADC Configuration
+#####################################################################
+
+config RP2040_ADC
+ bool "Enable ADC Support"
+ default n
+ ---help---
+ If y, the RP2040 ADC code will be built.
+ If the ADC device driver is not built, basic functions
+ to programmatically access the ADC ports will be added.
+
+if RP2040_ADC
+
+ config ADC
+ bool "Include ADC device driver"
+ default n
+ ---help---
+ Additional ADC device drivers can be set under the
+ "Analog-to-Digital Conversion" item in the
+ "Device Driver/Analog Device Support" menu.
+
+ if ADC
+
+ config RPC2040_ADC_CHANNEL0
+ bool "Read ADC channel 0"
+ default n
+ ---help---
+ If y, then ADC0 will be read.
+
+ config RPC2040_ADC_CHANNEL1
+ bool "Read ADC channel 1"
+ default n
+ ---help---
+ If y, then ADC1 will be read.
+
+ config RPC2040_ADC_CHANNEL2
+ bool "Read ADC channel 2"
+ default n
+ ---help---
+ If y, then ADC2 will be read.
+
+ config RPC2040_ADC_CHANNEL3
+ bool "Read ADC channel 3"
+ default n
+ ---help---
+ If y, then ADC3 will be read.
+
+ config RPC2040_ADC_TEMPERATURE
+ bool "Read ADC chip temperature channel"
+ default n
+ ---help---
+ If y, then the ADC chip temperature
+ will be read.
+
+ endif # ADC
+
+endif # RP2040_ADC
+
+#####################################################################
+# WS2812 Configuration
+#####################################################################
+
config RP2040_BOARD_HAS_WS2812
bool "Has ws2812 pixels"
default n
depends on WS2812
-
-menuconfig RP2040_WS2812_GPIO_PIN
- int "GPIO pin for ws2812 pixels"
- default 0
- range 0 29
- depends on RP2040_BOARD_HAS_WS2812
+ ---help---
+ See the Board Selection menu to configure the pins used
+ by ws2812.
diff --git a/arch/arm/src/rp2040/rp2040_i2c_slave.c b/arch/arm/src/rp2040/rp2040_i2c_slave.c
index 5ca199f127..b64fee3b6f 100644
--- a/arch/arm/src/rp2040/rp2040_i2c_slave.c
+++ b/arch/arm/src/rp2040/rp2040_i2c_slave.c
@@ -487,15 +487,15 @@ struct i2c_slave_s * rp2040_i2c0_slave_initialize
{
rp2040_i2c_slave_t *priv = &i2c0_slave_dev;
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SLAVE_SDA,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C);
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SLAVE_SDA, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false);
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SLAVE_SCL,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C);
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SLAVE_SCL, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
priv->rx_buffer = rx_buffer;
priv->rx_buf_ptr = rx_buffer;
@@ -552,15 +552,15 @@ struct i2c_slave_s * rp2040_i2c1_slave_initialize
{
rp2040_i2c_slave_t *priv = &i2c1_slave_dev;
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SLAVE_SDA,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C);
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SLAVE_SDA, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false);
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SLAVE_SCL,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C);
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SLAVE_SCL, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
priv->rx_buffer = rx_buffer;
priv->rx_buf_ptr = rx_buffer;
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.c b/arch/arm/src/rp2040/rp2040_ws2812.c
index b2ab9aed4e..7e0837354a 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.c
+++ b/arch/arm/src/rp2040/rp2040_ws2812.c
@@ -48,6 +48,7 @@ struct instance
FAR uint8_t *pixels; /* Buffer to hold pixels */
size_t open_count; /* Number of opens on this instance. */
clock_t last_dma; /* when last DMA completed. */
+ int power_pin; /* pin for ws2812 power */
};
/****************************************************************************
@@ -168,57 +169,40 @@ static int my_open(FAR struct file *filep)
{
FAR struct inode *inode = filep->f_inode;
FAR struct ws2812_dev_s *dev_data = inode->i_private;
- FAR struct instance *priv;
+ FAR struct instance *priv = (FAR struct instance *)
+ dev_data->private;
rp2040_pio_sm_config config;
int divisor;
int ret;
nxsem_wait(&dev_data->exclsem);
- if (dev_data->private != NULL)
+ priv->open_count += 1;
+
+ if (priv->pixels != NULL)
{
/* We've already been initialized. Keep on truckin' */
ledinfo("rp2040_ws2812 re-open dev: 0x%08lX\n", (uint32_t) dev_data);
- priv = (FAR struct instance *) dev_data->private;
- priv->open_count += 1;
-
ret = OK;
goto post_and_return;
}
ledinfo("rp2040_ws2812 open dev: 0x%08lX\n", (uint32_t) dev_data);
- /* Allocate struct holding out persistent data */
-
- priv = kmm_zalloc(sizeof(struct instance));
-
- if (priv == NULL)
- {
- lederr("rp2040_ws2812 open: out of memory\n");
-
- ret = -ENOMEM;
- goto post_and_return;
- }
-
- priv->open_count = 1;
-
/* Allocate the pixel buffer */
- priv->pixels = kmm_zalloc(4 * dev_data->nleds);
+ priv->pixels = kmm_zalloc(4 * dev_data->nleds);
if (priv->pixels == NULL)
{
- kmm_free(priv);
lederr("rp2040_ws2812 open: out of memory\n");
ret = -ENOMEM;
goto post_and_return;
}
- dev_data->private = priv;
-
/* ==== Load the pio program ==== */
/* get pio instance and load program */
@@ -254,9 +238,6 @@ static int my_open(FAR struct file *filep)
{
kmm_free(priv->pixels);
- dev_data->private = NULL;
- kmm_free(priv);
-
ret = -ENOMEM;
goto post_and_return;
}
@@ -329,6 +310,15 @@ static int my_open(FAR struct file *filep)
rp2040_pio_sm_set_enabled(priv->pio, priv->pio_sm, true);
+ /* Turn on the power pin if any */
+
+ if (priv->power_pin >= 0)
+ {
+ rp2040_gpio_init(priv->power_pin);
+ rp2040_gpio_setdir(priv->power_pin, true);
+ rp2040_gpio_put(priv->power_pin, true);
+ }
+
ret = OK;
post_and_return:
@@ -363,6 +353,11 @@ static int my_close(FAR struct file *filep)
priv->open_count -= 1;
+ if (priv->open_count == 0 && priv->power_pin >= 0)
+ {
+ rp2040_gpio_put(priv->power_pin, false);
+ }
+
nxsem_post(&dev_data->exclsem);
return OK;
@@ -538,6 +533,7 @@ static ssize_t my_read(FAR struct file *filep,
* Input Parameters:
* Path to the ws2812 device (e.g. "/dev/leds0")
* Port number for the ws2812 chain
+ * Pin for ws2812 power
* The number of pixels in the chain
* Whether ws2812s have white LEDs
*
@@ -548,10 +544,12 @@ static ssize_t my_read(FAR struct file *filep,
FAR void * rp2040_ws2812_setup(FAR const char *path,
int port,
+ int power_pin,
uint16_t pixel_count,
bool has_white)
{
FAR struct ws2812_dev_s * dev_data;
+ FAR struct instance * priv;
int err;
dev_data = kmm_zalloc(sizeof(struct ws2812_dev_s));
@@ -562,6 +560,19 @@ FAR void * rp2040_ws2812_setup(FAR const char *path,
return NULL;
}
+ /* Allocate struct holding out persistent data */
+
+ priv = kmm_zalloc(sizeof(struct instance));
+
+ if (priv == NULL)
+ {
+ lederr("rp2040_ws2812 open: out of memory\n");
+
+ kmm_free(dev_data);
+ set_errno(ENOMEM);
+ return NULL;
+ }
+
dev_data->open = my_open;
dev_data->close = my_close;
dev_data->write = my_write;
@@ -569,9 +580,12 @@ FAR void * rp2040_ws2812_setup(FAR const char *path,
dev_data->port = port;
dev_data->nleds = pixel_count;
dev_data->clock = CONFIG_WS2812_FREQUENCY;
+ dev_data->private = priv;
nxsem_init(&dev_data->exclsem, 0, 1);
+ priv->power_pin = power_pin;
+
ledinfo("register dev_data: 0x%08lX\n", (uint32_t) dev_data);
err = ws2812_register(path, dev_data);
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/arch/arm/src/rp2040/rp2040_ws2812.h
index 3f91cfc9fe..8513637b10 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/arch/arm/src/rp2040/rp2040_ws2812.h
@@ -53,6 +53,7 @@ extern "C"
* Input Parameters:
* Path to the ws2812 device (e.g. "/dev/leds0")
* Port number for the ws2812 chain
+ * Pin for ws2812 power
* The number of pixels in the chain
* Whether ws2812s have white LEDs
*
@@ -63,6 +64,7 @@ extern "C"
FAR void * rp2040_ws2812_setup(FAR const char *path,
int port,
+ int power_pin,
uint16_t pixel_count,
bool has_white);
diff --git a/boards/Kconfig b/boards/Kconfig
index 6a63aa24ff..877e1a272f 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -1494,6 +1494,13 @@ config ARCH_BOARD_ADAFRUIT_KB2040
This is a port to the Adafruit KB2040 board.
Support is derived from Raspberry Pi Pico support.
+config ARCH_BOARD_ADAFRUIT_QT_PY_RP2040
+ bool "Adafruit QT Py RP2040 board"
+ depends on ARCH_CHIP_RP2040
+ ---help---
+ This is a port to the Adafruit QT Py RP2040 board.
+ Support is derived from Raspberry Pi Pico support.
+
config ARCH_BOARD_RX65N
bool "RX65N renesas board"
depends on ARCH_CHIP_R5F565NEDDFC
@@ -2645,6 +2652,7 @@ config ARCH_BOARD
default "pimoroni-tiny2040" if ARCH_BOARD_PIMORONI_TINY2040
default "adafruit-feather-rp2040" if ARCH_BOARD_ADAFRUIT_FEATHER_RP2040
default "adafruit-kb2040" if ARCH_BOARD_ADAFRUIT_KB2040
+ default "adafruit-qt-py-rp2040" if ARCH_BOARD_ADAFRUIT_QT_PY_RP2040
default "rx65n" if ARCH_BOARD_RX65N
default "rx65n-rsk1mb" if ARCH_BOARD_RX65N_RSK1MB
default "rx65n-rsk2mb" if ARCH_BOARD_RX65N_RSK2MB
@@ -2989,6 +2997,9 @@ endif
if ARCH_BOARD_ADAFRUIT_KB2040
source "boards/arm/rp2040/adafruit-kb2040/Kconfig"
endif
+if ARCH_BOARD_ADAFRUIT_QT_PY_RP2040
+source "boards/arm/rp2040/adafruit-qt-py-rp2040/Kconfig"
+endif
if ARCH_BOARD_ARDUINO_DUE
source "boards/arm/sam34/arduino-due/Kconfig"
endif
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig b/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
index 87b4d88e4a..c73c7671a4 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
@@ -13,11 +13,12 @@ config RP2040_FLASH_BOOT
If not, the binary is for SRAM boot.
config RP2040_FLASH_CHIP
- string "flash chip name"
+ string "Second stage boot loader"
default "w25q080"
---help---
- Name of NOR flash device connected to RP2040 SoC.
- (Used to choose the secondary boot loader.)
+ This is the name of the Pico-SDK second stage boot loader
+ to use for this board. This board using a Q64 flash chip
+ which is compatible with the w25q080 boot loader.
Basically this option should not be changed.
config RP2040_UF2_BINARY
@@ -26,291 +27,6 @@ config RP2040_UF2_BINARY
---help---
Create nuttx.uf2 binary format used on RP2040 based arch.
-config RP2040_UART0_GPIO
- int "UART0 GPIO pin assign (0,12,28 or -1:no assign)"
- default 0
- range -1 29
- depends on RP2040_UART0
-
-config RP2040_UART1_GPIO
- int "UART1 GPIO pin assign (8,20,24 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_UART1
-
-config RP2040_I2C0_GPIO
- int "I2C0 GPIO pin assign (0,8,12,20,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C0
-
-config RP2040_I2C1_GPIO
- int "I2C1 GPIO pin assign (2,6,10,18,26 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C1
-
-if RP2040_PWM0
- config RP2040_PWM0A_GPIO
- int "PWM0 channel 1 GPIO pin assign (0 or -1:no assign)"
- default 0
- range -1 16
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 0 or 16, any other value disables the output.
-
- config RP2040_PWM0A_INVERT
- bool "PWM0 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM0B_GPIO
- int "PWM0 channel 2 GPIO pin assign (1 or -1:no assign)"
- default 1
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 1 or 17, any other value disables the output.
-
- config RP2040_PWM0B_INVERT
- bool "PWM0 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM0_PHASE_CORRECT
- bool "PWM0 phase correct"
- default n
-endif
-
-if RP2040_PWM1
- config RP2040_PWM1A_GPIO
- int "PWM1 channel 1 GPIO pin assign (2, 18 or -1:no assign)"
- default 2
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 2 or 18, any other value disables the output.
-
- config RP2040_PWM1A_INVERT
- bool "PWM1 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM1B_GPIO
- int "PWM1 channel 2 GPIO pin assign (3, 19 or -1:no assign)"
- default 3
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 3 or 19, any other value disables the output.
-
- config RP2040_PWM1B_INVERT
- bool "PWM1 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM1_PHASE_CORRECT
- bool "PWM1 phase correct"
- default n
-endif
-
-if RP2040_PWM2
- config RP2040_PWM2A_GPIO
- int "PWM2 channel 1 GPIO pin assign (20 or -1:no assign)"
- default 4
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 4 or 20, any other value disables the output.
-
- config RP2040_PWM2A_INVERT
- bool "PWM2 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- config RP2040_PWM2_PHASE_CORRECT
- bool "PWM2 phase correct"
- default n
-endif
-
-if RP2040_PWM3
- config RP2040_PWM3A_GPIO
- int "PWM3 channel 1 GPIO pin assign (6 or -1:no assign)"
- default 6
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 6 or 22, any other value disables the output.
-
- config RP2040_PWM3A_INVERT
- bool "PWM3 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM3B_GPIO
- int "PWM3 channel 2 GPIO pin assign (7 or -1:no assign)"
- default 7
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 7 or 23, any other value disables the output.
-
- config RP2040_PWM3B_INVERT
- bool "PWM3 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM3_PHASE_CORRECT
- bool "PWM3 phase correct"
- default n
-endif
-
-if RP2040_PWM4
- config RP2040_PWM4A_GPIO
- int "PWM4 channel 1 GPIO pin assign (8, 24 or -1:no assign)"
- default 8
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 8 or 24, any other value disables the output.
-
- config RP2040_PWM4A_INVERT
- bool "PWM4 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM4B_GPIO
- int "PWM4 channel 2 GPIO pin assign (9, 25 or -1:no assign)"
- default 9
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 9 or 25, any other value disables the output.
-
- config RP2040_PWM4B_INVERT
- bool "PWM4 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM4_PHASE_CORRECT
- bool "PWM4 phase correct"
- default n
-endif
-
-if RP2040_PWM5
- config RP2040_PWM5A_GPIO
- int "PWM5 channel 1 GPIO pin assign (10, 26 or -1:no assign)"
- default 10
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 10 or 26, any other value disables the output.
-
- config RP2040_PWM5A_INVERT
- bool "PWM5 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM5B_GPIO
- int "PWM5 channel 2 GPIO pin assign (11, 27 or -1:no assign)"
- default 11
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 11 or 27, any other value disables the output.
-
- config RP2040_PWM5B_INVERT
- bool "PWM5 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM5_PHASE_CORRECT
- bool "PWM5 phase correct"
- default n
-endif
-
-if RP2040_PWM6
- config RP2040_PWM6A_GPIO
- int "PWM6 channel 1 GPIO pin assign (12, 28 or -1:no assign)"
- default 12
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 12 or 28, any other value disables the output.
-
- config RP2040_PWM6A_INVERT
- bool "PWM6 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM6B_GPIO
- int "PWM6 channel 2 GPIO pin assign (13, 29 or -1:no assign)"
- default 13
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 13 or 29, any other value disables the output.
-
- config RP2040_PWM6B_INVERT
- bool "PWM6 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM6_PHASE_CORRECT
- bool "PWM6 phase correct"
- default n
-endif
-
-config RP2040_SPI0_GPIO
- int "SPI0 GPIO pin assign (0,16 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI0
-
-config RP2040_SPI1_GPIO
- int "SPI1 GPIO pin assign (8,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI1
-
config RP2040_LCD_SPI_CH
int "RP2040 LCD SPI channel number"
default 0
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/audiopack/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/audiopack/defconfig
index a9238b9ead..da306fb9a6 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/audiopack/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/audiopack/defconfig
@@ -22,7 +22,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -55,7 +54,10 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2S=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/composite/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/composite/defconfig
index 2872983bfc..f7147bcb39 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/composite/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/composite/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -54,7 +53,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/displaypack/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/displaypack/defconfig
index d727b5327f..92d150608c 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/displaypack/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/displaypack/defconfig
@@ -21,7 +21,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -82,7 +81,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/enc28j60/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/enc28j60/defconfig
index 72e13ca259..2a8f1a72af 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/enc28j60/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/enc28j60/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -57,12 +56,14 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_ENC28J60_INTR_GPIO=11
-CONFIG_RP2040_ENC28J60_RESET_GPIO=10
+CONFIG_RP2040_ENC28J60_INTR_GPIO=19
+CONFIG_RP2040_ENC28J60_RESET_GPIO=18
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/lcd1602/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/lcd1602/defconfig
index f3ce6b844b..247debdc39 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/lcd1602/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/lcd1602/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -42,7 +41,8 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
+CONFIG_RP2040_I2C0_SCL_GPIO=9
+CONFIG_RP2040_I2C0_SDA_GPIO=8
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/nsh/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/nsh/defconfig
index 6ba24969c2..ad2f809572 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/nsh/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/nsh/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/nshsram/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/nshsram/defconfig
index 89ed83f457..a623a02793 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/nshsram/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/nshsram/defconfig
@@ -16,7 +16,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_STACKDUMP=y
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig
index 2f08ff6743..b67fa9c1af 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_INTERRUPTSTACK=2048
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/spisd/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/spisd/defconfig
index b8493f32fb..1b0e4fe46d 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/spisd/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/spisd/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -46,7 +45,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/ssd1306/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/ssd1306/defconfig
index df472a28e7..0ba16157d8 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/ssd1306/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/ssd1306/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -61,7 +60,8 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
+CONFIG_RP2040_I2C0_SCL_GPIO=9
+CONFIG_RP2040_I2C0_SDA_GPIO=8
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/st7735/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/st7735/defconfig
index 7e3b081237..157b1429e8 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/st7735/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/st7735/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -45,7 +44,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbmsc/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbmsc/defconfig
index 2da9edb2e1..3c4d5a8364 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbmsc/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbmsc/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -48,7 +47,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbnsh/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbnsh/defconfig
index 0739d67096..267862e657 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbnsh/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/usbnsh/defconfig
@@ -16,7 +16,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.14/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.14/defconfig
index 9728913ab7..f67c250c9a 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.14/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.14/defconfig
@@ -20,7 +20,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -79,7 +78,6 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.3/defconfig b/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.3/defconfig
index 03d0591c5e..9e028c47e6 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.3/defconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/configs/waveshare-lcd-1.3/defconfig
@@ -20,7 +20,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -76,7 +75,6 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=16
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/scripts/adafruit-feather-rp2040-flash.ld b/boards/arm/rp2040/adafruit-feather-rp2040/scripts/adafruit-feather-rp2040-flash.ld
index 997c14e84d..28c31bacc2 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/scripts/adafruit-feather-rp2040-flash.ld
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/scripts/adafruit-feather-rp2040-flash.ld
@@ -20,7 +20,7 @@
MEMORY
{
- flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
+ flash (rx) : ORIGIN = 0x10000000, LENGTH = 8192K
sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
}
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_boardinitialize.c b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_boardinitialize.c
index d408fadf0e..febd680071 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_boardinitialize.c
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_boardinitialize.c
@@ -70,32 +70,32 @@ void rp2040_boardearlyinitialize(void)
/* Set default UART pin */
-#if defined(CONFIG_RP2040_UART0) && CONFIG_RP2040_UART0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO,
+#ifdef CONFIG_RP2040_UART0
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
-#if defined(CONFIG_RP2040_UART1) && CONFIG_RP2040_UART1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO,
+#ifdef CONFIG_RP2040_UART1
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
@@ -112,55 +112,55 @@ void rp2040_boardinitialize(void)
{
/* Set default I2C pin */
-#if defined(CONFIG_RP2040_I2C0) && CONFIG_RP2040_I2C0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO,
+#ifdef CONFIG_RP2040_I2C0
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
#endif
-#if defined(CONFIG_RP2040_I2C1) && CONFIG_RP2040_I2C1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO,
+#ifdef CONFIG_RP2040_I2C1
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
#endif
/* Set default SPI pin */
-#if defined(CONFIG_RP2040_SPI0) && CONFIG_RP2040_SPI0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO,
+#ifdef CONFIG_RP2040_SPI0
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI0_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI0_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI0_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI0_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, true);
#endif
-#if defined(CONFIG_RP2040_SPI1) && CONFIG_RP2040_SPI1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO,
+#ifdef CONFIG_RP2040_SPI1
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI1_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI1_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI1_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI1_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, true);
#endif
}
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
index c0637c8131..6c678ac86a 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
@@ -462,6 +462,7 @@ int rp2040_bringup(void)
#if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
rp2040_ws2812_setup("/dev/leds0",
CONFIG_RP2040_WS2812_GPIO_PIN,
+ CONFIG_RP2040_WS2812_PWR_GPIO,
CONFIG_WS2812_LED_COUNT,
HAS_WHITE);
#endif
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
index f6b23acbcd..7fd0ffc754 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
@@ -74,7 +74,7 @@ void rp2040_spi0select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, !selected);
}
uint8_t rp2040_spi0status(struct spi_dev_s *dev, uint32_t devid)
@@ -97,7 +97,7 @@ int rp2040_spi0cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_RX_GPIO, !cmd);
return OK;
}
@@ -115,7 +115,7 @@ void rp2040_spi1select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, !selected);
}
uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
@@ -138,7 +138,7 @@ int rp2040_spi1cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_RX_GPIO, !cmd);
return OK;
}
diff --git a/boards/arm/rp2040/adafruit-kb2040/Kconfig b/boards/arm/rp2040/adafruit-kb2040/Kconfig
index 38fd50ff06..6866bf4fa4 100644
--- a/boards/arm/rp2040/adafruit-kb2040/Kconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/Kconfig
@@ -13,11 +13,12 @@ config RP2040_FLASH_BOOT
If not, the binary is for SRAM boot.
config RP2040_FLASH_CHIP
- string "flash chip name"
+ string "Second stage boot loader"
default "w25q080"
---help---
- Name of NOR flash device connected to RP2040 SoC.
- (Used to choose the secondary boot loader.)
+ This is the name of the Pico-SDK second stage boot loader
+ to use for this board. This board using a Q64 flash chip
+ which is compatible with the w25q080 boot loader.
Basically this option should not be changed.
config RP2040_UF2_BINARY
@@ -26,308 +27,6 @@ config RP2040_UF2_BINARY
---help---
Create nuttx.uf2 binary format used on RP2040 based arch.
-config RP2040_UART0_GPIO
- int "UART0 GPIO pin assign (0,12,16,28 or -1:no assign)"
- default 0
- range -1 29
- depends on RP2040_UART0
-
-config RP2040_UART1_GPIO
- int "UART1 GPIO pin assign (4,8,20,24 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_UART1
-
-config RP2040_I2C0_GPIO
- int "I2C0 GPIO pin assign (0,4,8,12,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C0
-
-config RP2040_I2C1_GPIO
- int "I2C1 GPIO pin assign (2,6,10,18,26 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C1
-
-if RP2040_PWM0
- config RP2040_PWM0A_GPIO
- int "PWM0 channel 1 GPIO pin assign (0, 16 or -1:no assign)"
- default 0
- range -1 16
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 0 or 16, any other value disables the output.
-
- config RP2040_PWM0A_INVERT
- bool "PWM0 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM0B_GPIO
- int "PWM0 channel 2 GPIO pin assign (1 or -1:no assign)"
- default 1
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 1 or 17, any other value disables the output.
-
- config RP2040_PWM0B_INVERT
- bool "PWM0 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM0_PHASE_CORRECT
- bool "PWM0 phase correct"
- default n
-endif
-
-if RP2040_PWM1
- config RP2040_PWM1A_GPIO
- int "PWM1 channel 1 GPIO pin assign (2, 18 or -1:no assign)"
- default 2
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 2 or 18, any other value disables the output.
-
- config RP2040_PWM1A_INVERT
- bool "PWM1 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM1B_GPIO
- int "PWM1 channel 2 GPIO pin assign (3, 19 or -1:no assign)"
- default 3
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 3 or 19, any other value disables the output.
-
- config RP2040_PWM1B_INVERT
- bool "PWM1 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM1_PHASE_CORRECT
- bool "PWM1 phase correct"
- default n
-endif
-
-if RP2040_PWM2
- config RP2040_PWM2A_GPIO
- int "PWM2 channel 1 GPIO pin assign (4, 20 or -1:no assign)"
- default 4
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 4 or 20, any other value disables the output.
-
- config RP2040_PWM2A_INVERT
- bool "PWM2 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM2B_GPIO
- int "PWM2 channel 2 GPIO pin assign (5 or -1:no assign)"
- default 5
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 5 or 21, any other value disables the output.
-
- config RP2040_PWM2B_INVERT
- bool "PWM2 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM2_PHASE_CORRECT
- bool "PWM2 phase correct"
- default n
-endif
-
-if RP2040_PWM3
- config RP2040_PWM3A_GPIO
- int "PWM3 channel 1 GPIO pin assign (6 or -1:no assign)"
- default 6
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 6 or 22, any other value disables the output.
-
- config RP2040_PWM3A_INVERT
- bool "PWM3 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM3B_GPIO
- int "PWM3 channel 2 GPIO pin assign (7 or -1:no assign)"
- default 7
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 7 or 23, any other value disables the output.
-
- config RP2040_PWM3B_INVERT
- bool "PWM3 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM3_PHASE_CORRECT
- bool "PWM3 phase correct"
- default n
-endif
-
-if RP2040_PWM4
- config RP2040_PWM4A_GPIO
- int "PWM4 channel 1 GPIO pin assign (8 or -1:no assign)"
- default 8
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 8 or 24, any other value disables the output.
-
- config RP2040_PWM4A_INVERT
- bool "PWM4 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM4B_GPIO
- int "PWM4 channel 2 GPIO pin assign (9 or -1:no assign)"
- default 9
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 9 or 25, any other value disables the output.
-
- config RP2040_PWM4B_INVERT
- bool "PWM4 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM4_PHASE_CORRECT
- bool "PWM4 phase correct"
- default n
-endif
-
-if RP2040_PWM5
- config RP2040_PWM5A_GPIO
- int "PWM5 channel 1 GPIO pin assign (10, 26 or -1:no assign)"
- default 10
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 10 or 26, any other value disables the output.
-
- config RP2040_PWM5A_INVERT
- bool "PWM5 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM5B_GPIO
- int "PWM5 channel 2 GPIO pin assign (27 or -1:no assign)"
- default 11
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 11 or 27, any other value disables the output.
-
- config RP2040_PWM5B_INVERT
- bool "PWM5 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM5_PHASE_CORRECT
- bool "PWM5 phase correct"
- default n
-endif
-
-if RP2040_PWM6
- config RP2040_PWM6A_GPIO
- int "PWM6 channel 1 GPIO pin assign (12, 28 or -1:no assign)"
- default 12
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 12 or 28, any other value disables the output.
-
- config RP2040_PWM6A_INVERT
- bool "PWM6 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM6B_GPIO
- int "PWM6 channel 2 GPIO pin assign (13, 29 or -1:no assign)"
- default 13
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 13 or 29, any other value disables the output.
-
- config RP2040_PWM6B_INVERT
- bool "PWM6 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM6_PHASE_CORRECT
- bool "PWM6 phase correct"
- default n
-endif
-
-config RP2040_SPI0_GPIO
- int "SPI0 GPIO pin assign (0,4,16,20 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI0
-
-config RP2040_SPI1_GPIO
- int "SPI1 GPIO pin assign (8,12,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI1
-
config RP2040_LCD_SPI_CH
int "RP2040 LCD SPI channel number"
default 0
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/audiopack/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/audiopack/defconfig
index f7da58bc23..bcc9163ce5 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/audiopack/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/audiopack/defconfig
@@ -22,7 +22,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -55,7 +54,10 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2S=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/composite/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/composite/defconfig
index 75bf88f4a5..c33f3151cb 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/composite/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/composite/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -54,7 +53,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/displaypack/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/displaypack/defconfig
index f00c1c10d6..bfc1e73539 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/displaypack/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/displaypack/defconfig
@@ -21,7 +21,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -82,7 +81,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/enc28j60/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/enc28j60/defconfig
index 76f2f7c5e1..94ecec1693 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/enc28j60/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/enc28j60/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -57,12 +56,15 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_ENC28J60_INTR_GPIO=11
-CONFIG_RP2040_ENC28J60_RESET_GPIO=10
+CONFIG_RP2040_ENC28J60_INTR_GPIO=3
+CONFIG_RP2040_ENC28J60_RESET_GPIO=2
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
+CONFIG_RP2040_SPI1_TX_GPIO=27
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/lcd1602/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/lcd1602/defconfig
index edcfef241e..1b537cd666 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/lcd1602/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/lcd1602/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -42,7 +41,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
index d050b73350..6c91410694 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/nshsram/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/nshsram/defconfig
index 0640dc38be..a968c49a48 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/nshsram/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/nshsram/defconfig
@@ -16,7 +16,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_STACKDUMP=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/smp/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/smp/defconfig
index 14b4395cf5..19dba9bc35 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/smp/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/smp/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_INTERRUPTSTACK=2048
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/spisd/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/spisd/defconfig
index e136fde9d9..ddd189112d 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/spisd/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/spisd/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -46,7 +45,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/ssd1306/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/ssd1306/defconfig
index 7188c9f22e..a9c7afa1cc 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/ssd1306/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/ssd1306/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -61,7 +60,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/st7735/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/st7735/defconfig
index c129acbea1..84c8330fc9 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/st7735/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/st7735/defconfig
@@ -15,7 +15,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -45,7 +44,7 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
+CONFIG_RP2040_SPI1_TX_GPIO=27
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/usbmsc/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/usbmsc/defconfig
index 4b4d1cee69..d03f3a032b 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/usbmsc/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/usbmsc/defconfig
@@ -18,7 +18,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -48,7 +47,10 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=7
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig
index d4658760b8..0fe5e5c827 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig
@@ -16,7 +16,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.14/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.14/defconfig
index 4d7593b7d3..6d9edec8e7 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.14/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.14/defconfig
@@ -20,7 +20,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -79,7 +78,6 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.3/defconfig b/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.3/defconfig
index 629e0b14da..f769781099 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.3/defconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/configs/waveshare-lcd-1.3/defconfig
@@ -20,7 +20,6 @@
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="adafruit-kb2040"
CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -76,7 +75,6 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RP2040_WS2812_GPIO_PIN=17
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/adafruit-kb2040/include/board.h b/boards/arm/rp2040/adafruit-kb2040/include/board.h
index 8caa301931..093c68ed41 100644
--- a/boards/arm/rp2040/adafruit-kb2040/include/board.h
+++ b/boards/arm/rp2040/adafruit-kb2040/include/board.h
@@ -62,10 +62,11 @@
/* GPIO definitions *********************************************************/
-#undef BOARD_GPIO_LED_PIN
-#define BOARD_NGPIOOUT 1
-#define BOARD_NGPIOIN 1
-#define BOARD_NGPIOINT 1
+#undef BOARD_GPIO_LED_PIN
+#define BOARD_GPIO_WS2812_PWR_PIN 11
+#define BOARD_NGPIOOUT 1
+#define BOARD_NGPIOIN 1
+#define BOARD_NGPIOINT 1
/****************************************************************************
* Public Types
diff --git a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld b/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
index 4d7719c423..f30276ace0 100644
--- a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
+++ b/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
@@ -20,7 +20,7 @@
MEMORY
{
- flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
+ flash (rx) : ORIGIN = 0x10000000, LENGTH = 8192K
sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
}
diff --git a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
index 09d4b315bb..a34ab08910 100644
--- a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
+++ b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
@@ -64,32 +64,32 @@ void rp2040_boardearlyinitialize(void)
/* Set default UART pin */
-#if defined(CONFIG_RP2040_UART0) && CONFIG_RP2040_UART0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO,
+#ifdef CONFIG_RP2040_UART0
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
-#if defined(CONFIG_RP2040_UART1) && CONFIG_RP2040_UART1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO,
+#ifdef CONFIG_RP2040_UART1
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
@@ -106,55 +106,55 @@ void rp2040_boardinitialize(void)
{
/* Set default I2C pin */
-#if defined(CONFIG_RP2040_I2C0) && CONFIG_RP2040_I2C0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO,
+#ifdef CONFIG_RP2040_I2C0
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
#endif
-#if defined(CONFIG_RP2040_I2C1) && CONFIG_RP2040_I2C1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO,
+#ifdef CONFIG_RP2040_I2C1
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
#endif
/* Set default SPI pin */
-#if defined(CONFIG_RP2040_SPI0) && CONFIG_RP2040_SPI0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO,
+#ifdef CONFIG_RP2040_SPI0
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI0_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI0_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI0_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI0_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, true);
#endif
-#if defined(CONFIG_RP2040_SPI1) && CONFIG_RP2040_SPI1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO,
+#ifdef CONFIG_RP2040_SPI1
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI1_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI1_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI1_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI1_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, true);
#endif
}
diff --git a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_bringup.c b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_bringup.c
index c1a071ccfe..5bc59fdee2 100644
--- a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_bringup.c
+++ b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_bringup.c
@@ -462,6 +462,7 @@ int rp2040_bringup(void)
#if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
rp2040_ws2812_setup("/dev/leds0",
CONFIG_RP2040_WS2812_GPIO_PIN,
+ CONFIG_RP2040_WS2812_PWR_GPIO,
CONFIG_WS2812_LED_COUNT,
HAS_WHITE);
#endif
diff --git a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_spi.c b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_spi.c
index 242305bf6d..b2cdee6503 100644
--- a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_spi.c
+++ b/boards/arm/rp2040/adafruit-kb2040/src/rp2040_spi.c
@@ -74,7 +74,7 @@ void rp2040_spi0select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, !selected);
}
uint8_t rp2040_spi0status(struct spi_dev_s *dev, uint32_t devid)
@@ -97,7 +97,7 @@ int rp2040_spi0cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_RX_GPIO, !cmd);
return OK;
}
@@ -115,7 +115,7 @@ void rp2040_spi1select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, !selected);
}
uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
@@ -138,7 +138,7 @@ int rp2040_spi1cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_RX_GPIO, !cmd);
return OK;
}
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/Kconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/Kconfig
new file mode 100644
index 0000000000..1233c2bb5a
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/Kconfig
@@ -0,0 +1,30 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_ADAFRUIT_QT_PY_RP2040
+
+config RP2040_FLASH_BOOT
+ bool "flash boot"
+ default y
+ ---help---
+ If y, the built binary can be used for flash boot.
+ If not, the binary is for SRAM boot.
+
+config RP2040_FLASH_CHIP
+ string "Second stage boot loader"
+ default "w25q080"
+ ---help---
+ This is the name of the Pico-SDK second stage boot loader
+ to use for this board. This board using a Q64 flash chip
+ which is compatible with the w25q080 boot loader.
+ Basically this option should not be changed.
+
+config RP2040_UF2_BINARY
+ bool "uf2 binary format"
+ default y
+ ---help---
+ Create nuttx.uf2 binary format used on RP2040 based arch.
+
+endif
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/README.txt b/boards/arm/rp2040/adafruit-qt-py-rp2040/README.txt
new file mode 100644
index 0000000000..d6add66f0d
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/README.txt
@@ -0,0 +1,98 @@
+README
+======
+
+This directory contains the port of NuttX to the Adafruit QT Py RP2040.
+See https://learn.adafruit.com/adafruit-qt-py-2040 for information
+about Adafruit QT Py RP2040.
+
+Currently only the following devices are supported.
+
+ Supported:
+ - UART (console port)
+ - GPIO 5 (UART1 RX) and GPIO 20 (UART1 TX) are used for the console.
+ - I2C
+ - SPI
+ - DMAC
+ - PWM
+ - ADC
+ - USB device
+ - MSC, CDC/ACM serial and these composite device are supported.
+ - CDC/ACM serial device can be used for the console.
+ - PIO (RP2040 Programmable I/O)
+ - Flash ROM Boot
+ - SRAM Boot
+ - If Pico SDK is available, nuttx.uf2 file which can be used in
+ BOOTSEL mode will be created.
+
+ Not supported:
+ - All other devices
+
+Installation
+============
+
+1. Download Raspberry Pi Pico SDK
+
+ $ git clone -b 1.1.2 https://github.com/raspberrypi/pico-sdk.git
+
+2. Set PICO_SDK_PATH environment variable
+
+ $ export PICO_SDK_PATH=<absolute_path_to_pico-sdk_directory>
+
+3. Configure and build NuttX
+
+ $ git clone https://github.com/apache/incubator-nuttx.git nuttx
+ $ git clone https://github.com/apache/incubator-nuttx-apps.git apps
+ $ cd nuttx
+ $ make distclean
+ $ ./tools/configure.sh raspberrypi-pico:nsh
+ $ make V=1
+
+4. Connect Adafruit KB2040 board to USB port while pressing BOOTSEL.
+ The board will be detected as USB Mass Storage Device.
+ Then copy "nuttx.uf2" into the device.
+ (Same manner as the standard Pico SDK applications installation.)
+
+5. To access the console, GPIO 20 (TX) and 5 (RX) pins must be connected to a
+ device such as USB-serial converter.
+
+ `usbnsh` configuration provides the console access by USB CDC/ACM serial
+ devcice. The console is available by using a terminal software on the USB
+ host.
+
+Defconfigs
+==========
+
+- nsh
+ Minimum configuration with NuttShell
+
+- nshsram
+ Load NuttX binary to SRAM
+
+- smp
+ Enable SMP mode. Both Core 0 and Core 1 are used by NuttX.
+
+- usbnsh
+ USB CDC/ACM serial console with NuttShell
+
+- composite
+ USB composite device (MSC + CDC/ACM) support
+ `conn` command enables the composite device.
+
+License exceptions
+==================
+
+The following files are originated from the files in Pico SDK.
+So, the files are licensed under 3-Clause BSD same as Pico SDK.
+
+- arch/arm/src/rp2040/rp2040_clock.c
+- arch/arm/src/rp2040/rp2040_pll.c
+- arch/arm/src/rp2040/rp2040_xosc.c
+ - These are created by referring the Pico SDK clock initialization.
+
+- arch/arm/src/rp2040/rp2040_pio.c
+- arch/arm/src/rp2040/rp2040_pio.h
+- arch/arm/src/rp2040/rp2040_pio_instructions.h
+ - These provide the similar APIs to Pico SDK's hardware_pio APIs.
+
+- arch/arm/src/rp2040/hardware/*.h
+ - These are generated from rp2040.svd originally provided in Pico SDK.
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/gpio/defconfig
similarity index 78%
copy from boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/configs/gpio/defconfig
index a25898b337..f5362d78c5 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/gpio/defconfig
@@ -6,16 +6,15 @@
# modifications.
#
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
-# CONFIG_LIBC_LONG_LONG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
# CONFIG_NSH_DISABLE_DATE is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
+# CONFIG_RP2040_UART0 is not set
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
-CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
+CONFIG_ARCH_BOARD="adafruit-qt-py-rp2040"
+CONFIG_ARCH_BOARD_ADAFRUIT_QT_PY_RP2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -39,6 +38,11 @@ CONFIG_NSH_READLINE=y
CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_BOARD_HAS_WS2812=y
+CONFIG_RP2040_UART1=y
+CONFIG_RP2040_UART1_RX_GPIO=5
+CONFIG_RP2040_WS2812_GPIO_PIN=12
+CONFIG_RP2040_WS2812_PWR_GPIO=11
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=11
@@ -48,4 +52,6 @@ CONFIG_SYSLOG_CONSOLE=y
CONFIG_SYSTEM_NSH=y
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
-CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_UART1_SERIAL_CONSOLE=y
+CONFIG_WS2812=y
+CONFIG_WS2812_NON_SPI_DRIVER=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nsh/defconfig
similarity index 83%
copy from boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nsh/defconfig
index d050b73350..084cb978f0 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nsh/defconfig
@@ -6,16 +6,15 @@
# modifications.
#
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
-# CONFIG_LIBC_LONG_LONG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
# CONFIG_NSH_DISABLE_DATE is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
+# CONFIG_RP2040_UART0 is not set
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="adafruit-kb2040"
-CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD="adafruit-qt-py-rp2040"
+CONFIG_ARCH_BOARD_ADAFRUIT_QT_PY_RP2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -38,7 +37,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_WS2812_GPIO_PIN=17
+CONFIG_RP2040_UART1=y
+CONFIG_RP2040_UART1_RX_GPIO=5
+CONFIG_RP2040_WS2812_GPIO_PIN=12
+CONFIG_RP2040_WS2812_PWR_GPIO=11
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=9
@@ -48,6 +50,6 @@ CONFIG_SYSLOG_CONSOLE=y
CONFIG_SYSTEM_NSH=y
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
-CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_UART1_SERIAL_CONSOLE=y
CONFIG_WS2812=y
CONFIG_WS2812_NON_SPI_DRIVER=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nshsram/defconfig
similarity index 83%
copy from boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nshsram/defconfig
index d050b73350..4dce15a151 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/nsh/defconfig
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/nshsram/defconfig
@@ -6,19 +6,17 @@
# modifications.
#
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
-# CONFIG_LIBC_LONG_LONG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
# CONFIG_NSH_DISABLE_DATE is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
+# CONFIG_RP2040_UART0 is not set
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="adafruit-kb2040"
-CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD="adafruit-qt-py-rp2040"
+CONFIG_ARCH_BOARD_ADAFRUIT_QT_PY_RP2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
-CONFIG_ARCH_RAMVECTORS=y
CONFIG_ARCH_STACKDUMP=y
CONFIG_BOARDCTL_RESET=y
CONFIG_BOARD_LOOPSPERMSEC=10450
@@ -38,7 +36,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_WS2812_GPIO_PIN=17
+CONFIG_RP2040_UART1=y
+CONFIG_RP2040_UART1_RX_GPIO=5
+CONFIG_RP2040_WS2812_GPIO_PIN=12
+CONFIG_RP2040_WS2812_PWR_GPIO=11
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=9
@@ -48,6 +49,6 @@ CONFIG_SYSLOG_CONSOLE=y
CONFIG_SYSTEM_NSH=y
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
-CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_UART1_SERIAL_CONSOLE=y
CONFIG_WS2812=y
CONFIG_WS2812_NON_SPI_DRIVER=y
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/smp/defconfig
similarity index 84%
copy from boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/configs/smp/defconfig
index 2f08ff6743..0df779d086 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/configs/smp/defconfig
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/smp/defconfig
@@ -6,16 +6,15 @@
# modifications.
#
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
-# CONFIG_LIBC_LONG_LONG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
# CONFIG_NSH_DISABLE_DATE is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
+# CONFIG_RP2040_UART0 is not set
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="adafruit-feather-rp2040"
-CONFIG_ARCH_BOARD_ADAFRUIT_FEATHER_RP2040=y
-CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD="adafruit-qt-py-rp2040"
+CONFIG_ARCH_BOARD_ADAFRUIT_QT_PY_RP2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_INTERRUPTSTACK=2048
@@ -39,7 +38,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_WS2812_GPIO_PIN=16
+CONFIG_RP2040_UART1=y
+CONFIG_RP2040_UART1_RX_GPIO=5
+CONFIG_RP2040_WS2812_GPIO_PIN=12
+CONFIG_RP2040_WS2812_PWR_GPIO=11
CONFIG_RR_INTERVAL=200
CONFIG_SMP=y
CONFIG_SMP_NCPUS=2
@@ -54,6 +56,6 @@ CONFIG_SYSTEM_TASKSET=y
CONFIG_TESTING_GETPRIME=y
CONFIG_TESTING_OSTEST=y
CONFIG_TESTING_SMP=y
-CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_UART1_SERIAL_CONSOLE=y
CONFIG_WS2812=y
CONFIG_WS2812_NON_SPI_DRIVER=y
diff --git a/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/usbnsh/defconfig
similarity index 89%
copy from boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/configs/usbnsh/defconfig
index d4658760b8..0edc888649 100644
--- a/boards/arm/rp2040/adafruit-kb2040/configs/usbnsh/defconfig
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/configs/usbnsh/defconfig
@@ -7,16 +7,14 @@
#
# CONFIG_DEV_CONSOLE is not set
# CONFIG_FS_PROCFS_EXCLUDE_ENVIRON is not set
-# CONFIG_LIBC_LONG_LONG is not set
# CONFIG_NSH_ARGCAT is not set
# CONFIG_NSH_CMDOPT_HEXDUMP is not set
# CONFIG_NSH_DISABLE_DATE is not set
# CONFIG_NSH_DISABLE_LOSMART is not set
# CONFIG_RP2040_UART0 is not set
CONFIG_ARCH="arm"
-CONFIG_ARCH_BOARD="adafruit-kb2040"
-CONFIG_ARCH_BOARD_ADAFRUIT_KB2040=y
-CONFIG_ARCH_BOARD_COMMON=y
+CONFIG_ARCH_BOARD="adafruit-qt-py-rp2040"
+CONFIG_ARCH_BOARD_ADAFRUIT_QT_PY_RP2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
CONFIG_ARCH_RAMVECTORS=y
@@ -42,7 +40,8 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_BOARD_HAS_WS2812=y
-CONFIG_RP2040_WS2812_GPIO_PIN=17
+CONFIG_RP2040_WS2812_GPIO_PIN=12
+CONFIG_RP2040_WS2812_PWR_GPIO=11
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
CONFIG_START_DAY=9
diff --git a/boards/arm/rp2040/adafruit-kb2040/include/board.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
similarity index 88%
copy from boards/arm/rp2040/adafruit-kb2040/include/board.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
index 8caa301931..00e8e36dba 100644
--- a/boards/arm/rp2040/adafruit-kb2040/include/board.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-kb2040/include/board.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/include/board.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,8 +18,8 @@
*
****************************************************************************/
-#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_INCLUDE_BOARD_H
-#define __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_INCLUDE_BOARD_H
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RP2040_INCLUDE_BOARD_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RP2040_INCLUDE_BOARD_H
/****************************************************************************
* Included Files
@@ -62,10 +62,11 @@
/* GPIO definitions *********************************************************/
-#undef BOARD_GPIO_LED_PIN
-#define BOARD_NGPIOOUT 1
-#define BOARD_NGPIOIN 1
-#define BOARD_NGPIOINT 1
+#undef BOARD_GPIO_LED_PIN
+#define BOARD_GPIO_WS2812_PWR_PIN 11
+#define BOARD_NGPIOOUT 1
+#define BOARD_NGPIOIN 1
+#define BOARD_NGPIOINT 1
/****************************************************************************
* Public Types
@@ -113,4 +114,4 @@ void rp2040_boardinitialize(void);
}
#endif
#endif /* __ASSEMBLY__ */
-#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_INCLUDE_BOARD_H */
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RP2040_INCLUDE_BOARD_H */
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2cdev.h
similarity index 59%
copy from arch/arm/src/rp2040/rp2040_ws2812.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2cdev.h
index 3f91cfc9fe..30c378cd7a 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2cdev.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/rp2040/rp2040_ws2812.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2cdev.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,18 +18,27 @@
*
****************************************************************************/
-#ifndef __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-#define __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2CDEV_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2CDEV_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
-#include <debug.h>
-#include <stdbool.h>
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
@@ -38,52 +47,20 @@ extern "C"
#define EXTERN extern
#endif
-#ifdef CONFIG_WS2812
-
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
- * Name: rp2040_ws2812_setup
- *
- * Description:
- * Initialize and register the ws2812 driver.
- *
- * Input Parameters:
- * Path to the ws2812 device (e.g. "/dev/leds0")
- * Port number for the ws2812 chain
- * The number of pixels in the chain
- * Whether ws2812s have white LEDs
- *
- * Returned Value:
- * An opaque pointer that can be passed to rp2040_ws2812_teardown on
- * success or NULL (with errno set) on failure
- ****************************************************************************/
-
-FAR void * rp2040_ws2812_setup(FAR const char *path,
- int port,
- uint16_t pixel_count,
- bool has_white);
-
-/****************************************************************************
- * Name: rp2040_ws2812_release
+ * Name: board_i2cdev_initialize
*
* Description:
- * This function releases the internal memory structures created when
- * a driver is opened. It will fail with an error -EBUSY the driver
- * is open when it is called.
- *
- * Input Parameters:
- * driver - Opaque pointer returned by rp2040_ws2812_setup.
- *
- * Returned Value:
- * OK on success or an ERROR on failure
+ * Initialize i2c driver and register the /dev/i2c device.
*
****************************************************************************/
-int rp2040_ws2812_release(FAR void * driver);
-
+#ifdef CONFIG_RP2040_I2C_DRIVER
+int board_i2cdev_initialize(int bus);
#endif
#undef EXTERN
@@ -92,4 +69,4 @@ int rp2040_ws2812_release(FAR void * driver);
#endif
#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H */
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2CDEV_H */
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2sdev.h
similarity index 59%
copy from arch/arm/src/rp2040/rp2040_ws2812.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2sdev.h
index 3f91cfc9fe..ac3ccbc030 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2sdev.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/rp2040/rp2040_ws2812.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_i2sdev.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,18 +18,27 @@
*
****************************************************************************/
-#ifndef __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-#define __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2SDEV_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2SDEV_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
-#include <debug.h>
-#include <stdbool.h>
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
@@ -38,52 +47,20 @@ extern "C"
#define EXTERN extern
#endif
-#ifdef CONFIG_WS2812
-
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
- * Name: rp2040_ws2812_setup
- *
- * Description:
- * Initialize and register the ws2812 driver.
- *
- * Input Parameters:
- * Path to the ws2812 device (e.g. "/dev/leds0")
- * Port number for the ws2812 chain
- * The number of pixels in the chain
- * Whether ws2812s have white LEDs
- *
- * Returned Value:
- * An opaque pointer that can be passed to rp2040_ws2812_teardown on
- * success or NULL (with errno set) on failure
- ****************************************************************************/
-
-FAR void * rp2040_ws2812_setup(FAR const char *path,
- int port,
- uint16_t pixel_count,
- bool has_white);
-
-/****************************************************************************
- * Name: rp2040_ws2812_release
+ * Name: board_i2sdev_initialize
*
* Description:
- * This function releases the internal memory structures created when
- * a driver is opened. It will fail with an error -EBUSY the driver
- * is open when it is called.
- *
- * Input Parameters:
- * driver - Opaque pointer returned by rp2040_ws2812_setup.
- *
- * Returned Value:
- * OK on success or an ERROR on failure
+ * Initialize i2s driver and register the /dev/audio/pcm0 device.
*
****************************************************************************/
-int rp2040_ws2812_release(FAR void * driver);
-
+#ifdef CONFIG_RP2040_I2S
+int board_i2sdev_initialize(int bus);
#endif
#undef EXTERN
@@ -92,4 +69,4 @@ int rp2040_ws2812_release(FAR void * driver);
#endif
#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H */
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_I2SDEV_H */
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spidev.h
similarity index 59%
copy from arch/arm/src/rp2040/rp2040_ws2812.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spidev.h
index 3f91cfc9fe..293b55cd13 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spidev.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/rp2040/rp2040_ws2812.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spidev.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,18 +18,26 @@
*
****************************************************************************/
-#ifndef __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-#define __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPIDEV_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPIDEV_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
-#include <debug.h>
-#include <stdbool.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
@@ -38,53 +46,19 @@ extern "C"
#define EXTERN extern
#endif
-#ifdef CONFIG_WS2812
-
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
- * Name: rp2040_ws2812_setup
+ * Name: board_spidev_initialize
*
* Description:
- * Initialize and register the ws2812 driver.
+ * Initialize spi driver and register the /dev/spi device.
*
- * Input Parameters:
- * Path to the ws2812 device (e.g. "/dev/leds0")
- * Port number for the ws2812 chain
- * The number of pixels in the chain
- * Whether ws2812s have white LEDs
- *
- * Returned Value:
- * An opaque pointer that can be passed to rp2040_ws2812_teardown on
- * success or NULL (with errno set) on failure
****************************************************************************/
-FAR void * rp2040_ws2812_setup(FAR const char *path,
- int port,
- uint16_t pixel_count,
- bool has_white);
-
-/****************************************************************************
- * Name: rp2040_ws2812_release
- *
- * Description:
- * This function releases the internal memory structures created when
- * a driver is opened. It will fail with an error -EBUSY the driver
- * is open when it is called.
- *
- * Input Parameters:
- * driver - Opaque pointer returned by rp2040_ws2812_setup.
- *
- * Returned Value:
- * OK on success or an ERROR on failure
- *
- ****************************************************************************/
-
-int rp2040_ws2812_release(FAR void * driver);
-
-#endif
+int board_spidev_initialize(int bus);
#undef EXTERN
#if defined(__cplusplus)
@@ -92,4 +66,4 @@ int rp2040_ws2812_release(FAR void * driver);
#endif
#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H */
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPIDEV_H */
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spisd.h
similarity index 59%
copy from arch/arm/src/rp2040/rp2040_ws2812.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spisd.h
index 3f91cfc9fe..4894378abf 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spisd.h
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/rp2040/rp2040_ws2812.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/include/rp2040_spisd.h
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,18 +18,26 @@
*
****************************************************************************/
-#ifndef __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-#define __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPISD_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPISD_H
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
-#include <debug.h>
-#include <stdbool.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
#if defined(__cplusplus)
#define EXTERN extern "C"
extern "C"
@@ -38,52 +46,32 @@ extern "C"
#define EXTERN extern
#endif
-#ifdef CONFIG_WS2812
-
/****************************************************************************
* Public Function Prototypes
****************************************************************************/
/****************************************************************************
- * Name: rp2040_ws2812_setup
+ * Name: board_spisd_initialize
*
* Description:
- * Initialize and register the ws2812 driver.
+ * Initialize the SPI-based SD card.
*
- * Input Parameters:
- * Path to the ws2812 device (e.g. "/dev/leds0")
- * Port number for the ws2812 chain
- * The number of pixels in the chain
- * Whether ws2812s have white LEDs
- *
- * Returned Value:
- * An opaque pointer that can be passed to rp2040_ws2812_teardown on
- * success or NULL (with errno set) on failure
****************************************************************************/
-FAR void * rp2040_ws2812_setup(FAR const char *path,
- int port,
- uint16_t pixel_count,
- bool has_white);
+#ifdef CONFIG_RP2040_SPISD
+int board_spisd_initialize(int minor, int bus);
+#endif
/****************************************************************************
- * Name: rp2040_ws2812_release
+ * Name: board_spisd_status
*
* Description:
- * This function releases the internal memory structures created when
- * a driver is opened. It will fail with an error -EBUSY the driver
- * is open when it is called.
- *
- * Input Parameters:
- * driver - Opaque pointer returned by rp2040_ws2812_setup.
- *
- * Returned Value:
- * OK on success or an ERROR on failure
+ * Get the status whether SD Card is present or not.
*
****************************************************************************/
-int rp2040_ws2812_release(FAR void * driver);
-
+#ifdef CONFIG_RP2040_SPISD
+uint8_t board_spisd_status(struct spi_dev_s *dev, uint32_t devid);
#endif
#undef EXTERN
@@ -92,4 +80,4 @@ int rp2040_ws2812_release(FAR void * driver);
#endif
#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H */
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_QT_PY_RB2040_INCLUDE_RP2040_SPISD_H */
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/Make.defs b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/Make.defs
new file mode 100644
index 0000000000..58ed13a6aa
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/Make.defs
@@ -0,0 +1,45 @@
+############################################################################
+# boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/Make.defs
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/.config
+include $(TOPDIR)/tools/Config.mk
+include $(TOPDIR)/tools/rp2040/Config.mk
+include $(TOPDIR)/arch/arm/src/armv6-m/Toolchain.defs
+
+ifeq ($(CONFIG_RP2040_FLASH_BOOT),y)
+ LDSCRIPT = adafruit-qt-py-rp2040-flash.ld
+else
+ LDSCRIPT = adafruit-qt-py-rp2040-sram.ld
+endif
+
+ARCHSCRIPT += $(BOARD_DIR)$(DELIM)scripts$(DELIM)$(LDSCRIPT)
+
+ARCHPICFLAGS = -fpic -msingle-pic-base -mpic-register=r10
+
+CFLAGS := $(ARCHCFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CPICFLAGS = $(ARCHPICFLAGS) $(CFLAGS)
+CXXFLAGS := $(ARCHCXXFLAGS) $(ARCHOPTIMIZATION) $(ARCHCPUFLAGS) $(ARCHXXINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS) -pipe
+CXXPICFLAGS = $(ARCHPICFLAGS) $(CXXFLAGS)
+CPPFLAGS := $(ARCHINCLUDES) $(ARCHDEFINES) $(EXTRAFLAGS)
+AFLAGS := $(CFLAGS) -D__ASSEMBLY__
+
+NXFLATLDFLAGS1 = -r -d -warn-common
+NXFLATLDFLAGS2 = $(NXFLATLDFLAGS1) -T$(TOPDIR)/binfmt/libnxflat/gnu-nxflat-pcrel.ld -no-check-sections
+LDNXFLATFLAGS = -e main -s 2048
diff --git a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-flash.ld
similarity index 95%
copy from boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-flash.ld
index 4d7719c423..9fc8ee22a4 100644
--- a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-flash.ld
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
+ * boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-qt-py-rp2040-flash.ld
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -20,7 +20,7 @@
MEMORY
{
- flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
+ flash (rx) : ORIGIN = 0x10000000, LENGTH = 8192K
sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
}
diff --git a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-sram.ld
similarity index 84%
copy from boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-sram.ld
index 4d7719c423..7b559bf00c 100644
--- a/boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/scripts/adafruit-qt-py-rp2040-sram.ld
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-kb2040-flash.ld
+ * boards/arm/rp2040/adafruit-kb2040/scripts/adafruit-qt-py-rp2040-sram.ld
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -20,7 +20,6 @@
MEMORY
{
- flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
}
@@ -30,18 +29,10 @@ ENTRY(_stext)
SECTIONS
{
- .flash_begin : {
- __flash_binary_start = .;
- } > flash
-
- .boot2 : {
- __boot2_start__ = .;
- KEEP (*(.boot2))
- __boot2_end__ = .;
- } > flash
-
.text : {
_stext = ABSOLUTE(.);
+ rp2040_start.o(.text)
+ . = ALIGN(256);
*(.vectors)
*(.text .text.*)
*(.fixup)
@@ -54,29 +45,23 @@ SECTIONS
*(.gcc_except_table)
*(.gnu.linkonce.r.*)
_etext = ABSOLUTE(.);
- } > flash
+ } > sram
.init_section : {
_sinit = ABSOLUTE(.);
*(.init_array .init_array.*)
_einit = ABSOLUTE(.);
- } > flash
+ } > sram
.ARM.extab : {
*(.ARM.extab*)
- } > flash
+ } > sram
__exidx_start = ABSOLUTE(.);
.ARM.exidx : {
*(.ARM.exidx*)
- } > flash
- __exidx_end = ABSOLUTE(.);
-
- _eronly = ABSOLUTE(.);
-
- .ram_vectors (COPY) : {
- *(.ram_vectors)
} > sram
+ __exidx_end = ABSOLUTE(.);
.data : {
_sdata = ABSOLUTE(.);
@@ -85,7 +70,7 @@ SECTIONS
CONSTRUCTORS
. = ALIGN(4);
_edata = ABSOLUTE(.);
- } > sram AT > flash
+ } > sram
.bss : {
_sbss = ABSOLUTE(.);
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/src/Make.defs b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/Make.defs
new file mode 100644
index 0000000000..5a73b36fde
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/Make.defs
@@ -0,0 +1,41 @@
+############################################################################
+# boards/arm/rp2040/adafruit-qt-py-rp2040/src/Make.defs
+#
+# Licensed to the Apache Software Foundation (ASF) under one or more
+# contributor license agreements. See the NOTICE file distributed with
+# this work for additional information regarding copyright ownership. The
+# ASF licenses this file to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance with the
+# License. You may obtain a copy of the License at
+#
+# http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+# License for the specific language governing permissions and limitations
+# under the License.
+#
+############################################################################
+
+include $(TOPDIR)/Make.defs
+
+CSRCS = rp2040_boardinitialize.c
+CSRCS += rp2040_appinit.c
+CSRCS += rp2040_bringup.c
+
+ifeq ($(CONFIG_BOARDCTL_RESET),y)
+CSRCS += rp2040_reset.c
+endif
+
+ifeq ($(CONFIG_SPI),y)
+CSRCS += rp2040_spi.c
+endif
+
+ifeq ($(CONFIG_DEV_GPIO),y)
+CSRCS += rp2040_gpio.c
+endif
+
+DEPPATH += --dep-path board
+VPATH += :board
+CFLAGS += $(shell $(INCDIR) "$(CC)" $(TOPDIR)$(DELIM)arch$(DELIM)$(CONFIG_ARCH)$(DELIM)src$(DELIM)board$(DELIM)board)
diff --git a/arch/arm/src/rp2040/rp2040_ws2812.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_appinit.c
similarity index 53%
copy from arch/arm/src/rp2040/rp2040_ws2812.h
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_appinit.c
index 3f91cfc9fe..d263ce78ee 100644
--- a/arch/arm/src/rp2040/rp2040_ws2812.h
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_appinit.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * arch/arm/src/rp2040/rp2040_ws2812.h
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_appinit.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -18,78 +18,59 @@
*
****************************************************************************/
-#ifndef __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-#define __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H
-
/****************************************************************************
* Included Files
****************************************************************************/
#include <nuttx/config.h>
-#include <debug.h>
-#include <stdbool.h>
+#include <nuttx/board.h>
-#ifndef __ASSEMBLY__
-#if defined(__cplusplus)
-#define EXTERN extern "C"
-extern "C"
-{
-#else
-#define EXTERN extern
-#endif
+#include <sys/types.h>
-#ifdef CONFIG_WS2812
+#include "rp2040_pico.h"
/****************************************************************************
- * Public Function Prototypes
+ * Pre-processor Definitions
****************************************************************************/
/****************************************************************************
- * Name: rp2040_ws2812_setup
- *
- * Description:
- * Initialize and register the ws2812 driver.
- *
- * Input Parameters:
- * Path to the ws2812 device (e.g. "/dev/leds0")
- * Port number for the ws2812 chain
- * The number of pixels in the chain
- * Whether ws2812s have white LEDs
- *
- * Returned Value:
- * An opaque pointer that can be passed to rp2040_ws2812_teardown on
- * success or NULL (with errno set) on failure
+ * Public Functions
****************************************************************************/
-FAR void * rp2040_ws2812_setup(FAR const char *path,
- int port,
- uint16_t pixel_count,
- bool has_white);
-
/****************************************************************************
- * Name: rp2040_ws2812_release
+ * Name: board_app_initialize
*
* Description:
- * This function releases the internal memory structures created when
- * a driver is opened. It will fail with an error -EBUSY the driver
- * is open when it is called.
+ * Perform application specific initialization. This function is never
+ * called directly from application code, but only indirectly via the
+ * (non-standard) boardctl() interface using the command BOARDIOC_INIT.
*
* Input Parameters:
- * driver - Opaque pointer returned by rp2040_ws2812_setup.
+ * arg - The boardctl() argument is passed to the board_app_initialize()
+ * implementation without modification. The argument has no
+ * meaning to NuttX; the meaning of the argument is a contract
+ * between the board-specific initialization logic and the
+ * matching application logic. The value could be such things as a
+ * mode enumeration value, a set of DIP switch switch settings, a
+ * pointer to configuration data read from a file or serial FLASH,
+ * or whatever you would like to do with it. Every implementation
+ * should accept zero/NULL as a default configuration.
*
* Returned Value:
- * OK on success or an ERROR on failure
+ * Zero (OK) is returned on success; a negated errno value is returned on
+ * any failure to indicate the nature of the failure.
*
****************************************************************************/
-int rp2040_ws2812_release(FAR void * driver);
+int board_app_initialize(uintptr_t arg)
+{
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+ /* Board initialization already performed by board_late_initialize() */
-#endif
+ return OK;
+#else
+ /* Perform board-specific initialization */
-#undef EXTERN
-#if defined(__cplusplus)
-}
+ return rp2040_bringup();
#endif
-
-#endif /* __ASSEMBLY__ */
-#endif /* __ARCH_ARM_SRC_RP2040_RP2040_WS2812_H */
+}
diff --git a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_boardinitialize.c
similarity index 67%
copy from boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_boardinitialize.c
index 09d4b315bb..e2935b3e46 100644
--- a/boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_boardinitialize.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-kb2040/src/rp2040_boardinitialize.c
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_boardinitialize.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -64,32 +64,32 @@ void rp2040_boardearlyinitialize(void)
/* Set default UART pin */
-#if defined(CONFIG_RP2040_UART0) && CONFIG_RP2040_UART0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO,
+#ifdef CONFIG_RP2040_UART0
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
-#if defined(CONFIG_RP2040_UART1) && CONFIG_RP2040_UART1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO,
+#ifdef CONFIG_RP2040_UART1
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
@@ -106,55 +106,55 @@ void rp2040_boardinitialize(void)
{
/* Set default I2C pin */
-#if defined(CONFIG_RP2040_I2C0) && CONFIG_RP2040_I2C0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO,
+#ifdef CONFIG_RP2040_I2C0
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
#endif
-#if defined(CONFIG_RP2040_I2C1) && CONFIG_RP2040_I2C1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO,
+#ifdef CONFIG_RP2040_I2C1
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
#endif
/* Set default SPI pin */
-#if defined(CONFIG_RP2040_SPI0) && CONFIG_RP2040_SPI0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO,
+#ifdef CONFIG_RP2040_SPI0
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI0_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI0_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI0_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI0_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, true);
#endif
-#if defined(CONFIG_RP2040_SPI1) && CONFIG_RP2040_SPI1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO,
+#ifdef CONFIG_RP2040_SPI1
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI1_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI1_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI1_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI1_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, true);
#endif
}
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_bringup.c
similarity index 99%
copy from boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_bringup.c
index c0637c8131..3814acd727 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_bringup.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_bringup.c
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_bringup.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -462,6 +462,7 @@ int rp2040_bringup(void)
#if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
rp2040_ws2812_setup("/dev/leds0",
CONFIG_RP2040_WS2812_GPIO_PIN,
+ CONFIG_RP2040_WS2812_PWR_GPIO,
CONFIG_WS2812_LED_COUNT,
HAS_WHITE);
#endif
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_gpio.c b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_gpio.c
new file mode 100644
index 0000000000..de580fb8d2
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_gpio.c
@@ -0,0 +1,392 @@
+/****************************************************************************
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_gpio.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include <sys/types.h>
+#include <syslog.h>
+#include <nuttx/irq.h>
+#include <arch/irq.h>
+#include <assert.h>
+#include <debug.h>
+
+#include <nuttx/ioexpander/gpio.h>
+
+#include <arch/board/board.h>
+
+#include "arm_internal.h"
+#include "chip.h"
+#include "rp2040_gpio.h"
+
+#if defined(CONFIG_DEV_GPIO) && !defined(CONFIG_GPIO_LOWER_HALF)
+
+/* Output pins. GPIO25 is onboard LED any other outputs could be used.
+ */
+
+#define GPIO_OUT1 25
+
+/* Input pins.
+ */
+
+#define GPIO_IN1 6
+
+/* Interrupt pins.
+ */
+
+#define GPIO_IRQPIN1 11
+
+/****************************************************************************
+ * Private Types
+ ****************************************************************************/
+
+struct rp2040gpio_dev_s
+{
+ struct gpio_dev_s gpio;
+ uint8_t id;
+};
+
+struct rp2040gpint_dev_s
+{
+ struct rp2040gpio_dev_s rp2040gpio;
+ pin_interrupt_t callback;
+};
+
+/****************************************************************************
+ * Private Function Prototypes
+ ****************************************************************************/
+
+#if BOARD_NGPIOOUT > 0
+static int gpout_read(struct gpio_dev_s *dev, bool *value);
+static int gpout_write(struct gpio_dev_s *dev, bool value);
+#endif
+
+#if BOARD_NGPIOIN > 0
+static int gpin_read(struct gpio_dev_s *dev, bool *value);
+#endif
+
+#if BOARD_NGPIOINT > 0
+static int gpint_read(struct gpio_dev_s *dev, bool *value);
+static int gpint_attach(struct gpio_dev_s *dev,
+ pin_interrupt_t callback);
+static int gpint_enable(struct gpio_dev_s *dev, bool enable);
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+#if BOARD_NGPIOOUT > 0
+static const struct gpio_operations_s gpout_ops =
+{
+ .go_read = gpout_read,
+ .go_write = gpout_write,
+ .go_attach = NULL,
+ .go_enable = NULL,
+};
+
+/* This array maps the GPIO pins used as OUTPUT */
+
+static const uint32_t g_gpiooutputs[BOARD_NGPIOOUT] =
+{
+ GPIO_OUT1
+};
+
+static struct rp2040gpio_dev_s g_gpout[BOARD_NGPIOOUT];
+#endif
+
+#if BOARD_NGPIOIN > 0
+static const struct gpio_operations_s gpin_ops =
+{
+ .go_read = gpin_read,
+ .go_write = NULL,
+ .go_attach = NULL,
+ .go_enable = NULL,
+};
+
+/* This array maps the GPIO pins used as INTERRUPT INPUTS */
+
+static const uint32_t g_gpioinputs[BOARD_NGPIOIN] =
+{
+ GPIO_IN1
+};
+
+static struct rp2040gpio_dev_s g_gpin[BOARD_NGPIOIN];
+#endif
+
+#if BOARD_NGPIOINT > 0
+static const struct gpio_operations_s gpint_ops =
+{
+ .go_read = gpint_read,
+ .go_write = NULL,
+ .go_attach = gpint_attach,
+ .go_enable = gpint_enable,
+};
+
+/* This array maps the GPIO pins used as INTERRUPT INPUTS */
+
+static const uint32_t g_gpiointinputs[BOARD_NGPIOINT] =
+{
+ GPIO_IRQPIN1,
+};
+
+static struct rp2040gpint_dev_s g_gpint[BOARD_NGPIOINT];
+#endif
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: gpout_read
+ ****************************************************************************/
+
+#if BOARD_NGPIOOUT > 0
+static int gpout_read(struct gpio_dev_s *dev, bool *value)
+{
+ struct rp2040gpio_dev_s *rp2040gpio =
+ (struct rp2040gpio_dev_s *)dev;
+
+ DEBUGASSERT(rp2040gpio != NULL && value != NULL);
+ DEBUGASSERT(rp2040gpio->id < BOARD_NGPIOOUT);
+ gpioinfo("Reading...\n");
+
+ *value = rp2040_gpio_get(g_gpiooutputs[rp2040gpio->id]);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: gpout_write
+ ****************************************************************************/
+
+static int gpout_write(struct gpio_dev_s *dev, bool value)
+{
+ struct rp2040gpio_dev_s *rp2040gpio =
+ (struct rp2040gpio_dev_s *)dev;
+
+ DEBUGASSERT(rp2040gpio != NULL);
+ DEBUGASSERT(rp2040gpio->id < BOARD_NGPIOOUT);
+ gpioinfo("Writing %d\n", (int)value);
+
+ rp2040_gpio_put(g_gpiooutputs[rp2040gpio->id], value);
+ return OK;
+}
+#endif
+
+/****************************************************************************
+ * Name: gpin_read
+ ****************************************************************************/
+
+#if BOARD_NGPIOIN > 0
+static int gpin_read(struct gpio_dev_s *dev, bool *value)
+{
+ struct rp2040gpio_dev_s *rp2040gpio =
+ (struct rp2040gpio_dev_s *)dev;
+
+ DEBUGASSERT(rp2040gpio != NULL && value != NULL);
+ DEBUGASSERT(rp2040gpio->id < BOARD_NGPIOIN);
+ gpioinfo("Reading... pin %d\n", (int)g_gpioinputs[rp2040gpio->id]);
+
+ *value = rp2040_gpio_get(g_gpioinputs[rp2040gpio->id]);
+ return OK;
+}
+#endif
+
+/****************************************************************************
+ * Name: rp2040gpio_interrupt
+ ****************************************************************************/
+
+#if BOARD_NGPIOINT > 0
+static int rp2040gpio_interrupt(int irq, void *context, void *arg)
+{
+ struct rp2040gpint_dev_s *rp2040gpint =
+ (struct rp2040gpint_dev_s *)arg;
+
+ DEBUGASSERT(rp2040gpint != NULL && rp2040gpint->callback != NULL);
+ gpioinfo("Interrupt! callback=%p\n", rp2040gpint->callback);
+
+ rp2040gpint->callback(&rp2040gpint->rp2040gpio.gpio,
+ rp2040gpint->rp2040gpio.id);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: gpint_read
+ ****************************************************************************/
+
+static int gpint_read(struct gpio_dev_s *dev, bool *value)
+{
+ struct rp2040gpint_dev_s *rp2040gpint =
+ (struct rp2040gpint_dev_s *)dev;
+
+ DEBUGASSERT(rp2040gpint != NULL && value != NULL);
+ DEBUGASSERT(rp2040gpint->rp2040gpio.id < BOARD_NGPIOINT);
+ gpioinfo("Reading int pin...\n");
+
+ *value = rp2040_gpio_get(g_gpiointinputs[rp2040gpint->rp2040gpio.id]);
+ return OK;
+}
+
+/****************************************************************************
+ * Name: gpint_attach
+ ****************************************************************************/
+
+static int gpint_attach(struct gpio_dev_s *dev,
+ pin_interrupt_t callback)
+{
+ struct rp2040gpint_dev_s *rp2040gpint =
+ (struct rp2040gpint_dev_s *)dev;
+ int irq = g_gpiointinputs[rp2040gpint->rp2040gpio.id];
+ int ret;
+
+ gpioinfo("Attaching the callback\n");
+
+ /* Make sure the interrupt is disabled */
+
+ rp2040_gpio_disable_irq(irq);
+ ret = rp2040_gpio_irq_attach(irq,
+ RP2040_GPIO_INTR_EDGE_LOW,
+ rp2040gpio_interrupt,
+ &g_gpint[rp2040gpint->rp2040gpio.id]);
+ if (ret < 0)
+ {
+ syslog(LOG_ERR, "ERROR: gpint_attach() failed: %d\n", ret);
+ return ret;
+ }
+
+ gpioinfo("Attach %p\n", callback);
+ rp2040gpint->callback = callback;
+ return OK;
+}
+
+/****************************************************************************
+ * Name: gpint_enable
+ ****************************************************************************/
+
+static int gpint_enable(struct gpio_dev_s *dev, bool enable)
+{
+ struct rp2040gpint_dev_s *rp2040gpint =
+ (struct rp2040gpint_dev_s *)dev;
+ int irq = g_gpiointinputs[rp2040gpint->rp2040gpio.id];
+
+ if (enable)
+ {
+ if (rp2040gpint->callback != NULL)
+ {
+ gpioinfo("Enabling the interrupt\n");
+
+ /* Configure the interrupt for rising edge */
+
+ rp2040_gpio_enable_irq(irq);
+ }
+ }
+ else
+ {
+ gpioinfo("Disable the interrupt\n");
+ rp2040_gpio_disable_irq(irq);
+ }
+
+ return OK;
+}
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: rp2040_dev_gpio_init
+ ****************************************************************************/
+
+int rp2040_dev_gpio_init(void)
+{
+ int i;
+ int pincount = 0;
+
+#if BOARD_NGPIOOUT > 0
+ for (i = 0; i < BOARD_NGPIOOUT; i++)
+ {
+ /* Setup and register the GPIO pin */
+
+ g_gpout[i].gpio.gp_pintype = GPIO_OUTPUT_PIN;
+ g_gpout[i].gpio.gp_ops = &gpout_ops;
+ g_gpout[i].id = i;
+ gpio_pin_register(&g_gpout[i].gpio, g_gpiooutputs[i]);
+
+ /* Configure the pins that will be used as output */
+
+ rp2040_gpio_init(g_gpiooutputs[i]);
+ rp2040_gpio_setdir(g_gpiooutputs[i], true);
+ rp2040_gpio_put(g_gpiooutputs[i], false);
+
+ pincount++;
+ }
+#endif
+
+ pincount = 0;
+
+#if BOARD_NGPIOIN > 0
+ for (i = 0; i < BOARD_NGPIOIN; i++)
+ {
+ /* Setup and register the GPIO pin */
+
+ g_gpin[i].gpio.gp_pintype = GPIO_INPUT_PIN;
+ g_gpin[i].gpio.gp_ops = &gpin_ops;
+ g_gpin[i].id = i;
+ gpio_pin_register(&g_gpin[i].gpio, g_gpioinputs[i]);
+
+ /* Configure the pins that will be used as INPUT */
+
+ rp2040_gpio_init(g_gpioinputs[i]);
+
+ pincount++;
+ }
+#endif
+
+ pincount = 0;
+
+#if BOARD_NGPIOINT > 0
+ for (i = 0; i < BOARD_NGPIOINT; i++)
+ {
+ /* Setup and register the GPIO pin */
+
+ g_gpint[i].rp2040gpio.gpio.gp_pintype = GPIO_INTERRUPT_PIN;
+ g_gpint[i].rp2040gpio.gpio.gp_ops = &gpint_ops;
+ g_gpint[i].rp2040gpio.id = i;
+ gpio_pin_register(&g_gpint[i].rp2040gpio.gpio, g_gpiointinputs[i]);
+
+ /* Configure the pins that will be used as interrupt input */
+
+ rp2040_gpio_init(g_gpiointinputs[i]);
+
+ /* pull-up = false : pull-down = true */
+
+ rp2040_gpio_set_pulls(g_gpiointinputs[i], false, true);
+
+ pincount++;
+ }
+#endif
+
+ return OK;
+}
+#endif /* CONFIG_DEV_GPIO && !CONFIG_GPIO_LOWER_HALF */
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_pico.h b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_pico.h
new file mode 100644
index 0000000000..84d4a2d4e5
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_pico.h
@@ -0,0 +1,36 @@
+/****************************************************************************
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_pico.h
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+#ifndef __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_SRC_RP2040_PICO_H
+#define __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_SRC_RP2040_PICO_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+int rp2040_bringup(void);
+
+#ifdef CONFIG_DEV_GPIO
+int rp2040_dev_gpio_init(void);
+#endif
+
+#endif /* __BOARDS_ARM_RP2040_ADAFRUIT_KB2040_SRC_RP2040_PICO_H */
diff --git a/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_reset.c b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_reset.c
new file mode 100644
index 0000000000..5276cddc84
--- /dev/null
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_reset.c
@@ -0,0 +1,61 @@
+/****************************************************************************
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_reset.c
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership. The
+ * ASF licenses this file to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the
+ * License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
+ * License for the specific language governing permissions and limitations
+ * under the License.
+ *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <nuttx/board.h>
+#include <nuttx/arch.h>
+
+#ifdef CONFIG_BOARDCTL_RESET
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_reset
+ *
+ * Description:
+ * Reset board. Support for this function is required by board-level
+ * logic if CONFIG_BOARDCTL_RESET is selected.
+ *
+ * Input Parameters:
+ * status - Status information provided with the reset event. This
+ * meaning of this status information is board-specific. If not
+ * used by a board, the value zero may be provided in calls to
+ * board_reset().
+ *
+ * Returned Value:
+ * If this function returns, then it was not possible to power-off the
+ * board due to some constraints. The return value int this case is a
+ * board-specific reason for the failure to shutdown.
+ *
+ ****************************************************************************/
+
+int board_reset(int status)
+{
+ up_systemreset();
+ return 0;
+}
+
+#endif /* CONFIG_BOARDCTL_RESET */
diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_spi.c
similarity index 94%
copy from boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
copy to boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_spi.c
index f6b23acbcd..14ce78cc43 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
+++ b/boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_spi.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * boards/arm/rp2040/adafruit-feather-rp2040/src/rp2040_spi.c
+ * boards/arm/rp2040/adafruit-qt-py-rp2040/src/rp2040_spi.c
*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
@@ -74,7 +74,7 @@ void rp2040_spi0select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, !selected);
}
uint8_t rp2040_spi0status(struct spi_dev_s *dev, uint32_t devid)
@@ -97,7 +97,7 @@ int rp2040_spi0cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_RX_GPIO, !cmd);
return OK;
}
@@ -115,7 +115,7 @@ void rp2040_spi1select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, !selected);
}
uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
@@ -138,7 +138,7 @@ int rp2040_spi1cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_RX_GPIO, !cmd);
return OK;
}
diff --git a/boards/arm/rp2040/common/Kconfig b/boards/arm/rp2040/common/Kconfig
index 266bebabdd..0c95ae9b8f 100644
--- a/boards/arm/rp2040/common/Kconfig
+++ b/boards/arm/rp2040/common/Kconfig
@@ -3,52 +3,501 @@
# see the file kconfig-language.txt in the NuttX tools repository.
#
-if ARCH_BOARD_RASPBERRYPI_PICO
+#####################################################################
+# UART Configuration
+#####################################################################
-config RP2040_ADC
- bool "Enable ADC Support"
- default n
- ---help---
- If y, the RP2040 ADC code will be built. For ADC device driver
- support you must also select "Analog-to-Digital Conversion"
- under the "Device Driver/Analog Device Support" menu.
+if RP2040_UART0
- If the ADC device driver is not built, basic functions
- to programatically access the ADC ports will be added.
+ config RP2040_UART0_TX_GPIO
+ int "GPIO pin for UART0 TX (0, 12, 16, or 28)"
+ default 0
+ range 0 28
+ ---help---
+ RP2040 UART0 TX pin number used for data transmitted
+ from the RP2040. Refer to board documentation to see
+ which pins are available.
-if RP2040_ADC && ADC
+ config RP2040_UART0_RX_GPIO
+ int "GPIO pin for UART0 RX (1, 13, 17, or 29)"
+ default 1
+ range 1 29
+ ---help---
+ RP2040 UART0 RX pin number used for data received by the
+ RP2040. Refer to board documentation to see which pins
+ are available.
- config RPC2040_ADC_CHANNEL0
- bool "Read ADC channel 0"
- default n
- ---help---
- If y, then ADC0 will be read.
+ if SERIAL_IFLOWCONTROL
- config RPC2040_ADC_CHANNEL1
- bool "Read ADC channel 1"
- default n
- ---help---
- If y, then ADC1 will be read.
+ config RP2040_UART0_CTS_GPIO
+ int "GPIO pin for UART0 CTS (2, 14, or 18)"
+ default 2
+ range 2 18
+ ---help---
+ RP2040 UART0 CTS pin number an output pin that reflects the
+ UARTs ability to receive data. This pin will be asserted when
+ the UART is able to receive another character. Refer to board
+ documentation to see which pins are available.
- config RPC2040_ADC_CHANNEL2
- bool "Read ADC channel 2"
- default n
- ---help---
- If y, then ADC2 will be read.
+ endif # SERIAL_IFLOWCONTROL
+
+ if SERIAL_OFLOWCONTROL
+
+ config RP2040_UART0_RTS_GPIO
+ int "GPIO pin for UART0 RTS (3, 15, or 19)"
+ default 3
+ range 2 19
+ ---help---
+ RP2040 UART0 RTS pin number an input pin used to control
+ transmission by the UART. If output flow control is
+ enabled this pin must be asserted before data will be
+ transmitted. Refer to board documentation to see which
+ pins are available.
+
+ endif # SERIAL_OFLOWCONTROL
+
+endif # RP2040_UART0
+
+#####################################################################
+
+if RP2040_UART1
+
+ config RP2040_UART1_TX_GPIO
+ int "GPIO pin for UART1 TX (4, 8, 20, or 24)"
+ default 20
+ range 4 24
+ ---help---
+ RP2040 UART1 TX pin number. Refer to board documentation
+ to see which pins are available.
+
+ config RP2040_UART1_RX_GPIO
+ int "GPIO pin for UART1 RX (5, 9, 21, or 25)"
+ default 21
+ range 5 25
+ ---help---
+ RP2040 UART1 RX pin number. Refer to board documentation
+ to see which pins are available.
+
+ if SERIAL_IFLOWCONTROL
+
+ config RP2040_UART1_CTS_GPIO
+ int "GPIO pin for UART1 CTS (6, 10, 22, or 26)"
+ default 22
+ range 6 26
+ ---help---
+ RP2040 UART1 CTS pin number an output pin that reflects the
+ UARTs ability to receive data. This pin will be asserted when
+ the UART is able to receive another character. Refer to board
+ documentation to see which pins are available.
+
+ endif # SERIAL_IFLOWCONTROL
+
+ if SERIAL_OFLOWCONTROL
+
+ config RP2040_UART1_RTS_GPIO
+ int "GPIO pin for UART1 RTS (7, 11, 23, or 27)"
+ default 23
+ range 7 27
+ ---help---
+ RP2040 UART01 RTS pin number an input pin used to control
+ transmission by the UART. If output flow control is
+ enabled this pin must be asserted before data will be
+ transmitted. Refer to board documentation to see which
+ pins are available.
+
+ endif # SERIAL_OFLOWCONTROL
+
+endif # RP2040_UART1
+
+#####################################################################
+# SPI Configuration
+#####################################################################
+
+if RP2040_SPI0
+
+ config RP2040_SPI0_RX_GPIO
+ int "GPIO pin for SPI0 RX (0, 4, 16, or 20)"
+ default 16
+ range 0 20
+ ---help---
+ Refer to board documentation to see which pins are available.
+ This line is also known as MISO when we are configured in
+ SPI master mode.
+
+ config RP2040_SPI0_CS_GPIO
+ int "GPIO pin for SPI0 CSn (1, 5, 17, or 21)"
+ default 17
+ range 1 21
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+
+ config RP2040_SPI0_SCK_GPIO
+ int "GPIO pin for SPI0 SCK (2, 6, 18, or 22)"
+ default 18
+ range 2 22
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+ config RP2040_SPI0_TX_GPIO
+ int "GPIO pin for SPI0 TX (3, 7, 19, or 23)"
+ default 19
+ range 3 23
+ ---help---
+ Refer to board documentation to see which pins are available.
+ This line is also known as MOSI when we are configured in
+ SPI master mode.
+
+endif # RP2040_SPI0
+
+#####################################################################
+
+if RP2040_SPI1
+
+ config RP2040_SPI1_RX_GPIO
+ int "GPIO pin for SPI1 RX (8, 12, 24, or 28)"
+ default 8
+ range 8 28
+ ---help---
+ Refer to board documentation to see which pins are available.
+ This line is also known as MISO when we are configured in
+ SPI master mode, or MOSI when slave mode is configured.
+
+ config RP2040_SPI1_CS_GPIO
+ int "GPIO pin for SPI1 CSn (9, 13, 25, or 29)"
+ default 9
+ range 9 29
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+ config RP2040_SPI1_SCK_GPIO
+ int "GPIO pin for SPI1 SCK (10, 14, or 26)"
+ default 10
+ range 10 26
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+ config RP2040_SPI1_TX_GPIO
+ int "GPIO pin for SPI1 TX (11, 15, or 27)"
+ default 11
+ range 11 27
+ ---help---
+ Refer to board documentation to see which pins are available.
+ This line is also known as MOSI when we are configured in
+ SPI master mode, or MISO when slave mode is configured.
+
+endif # RP2040_SPI1
+
+#####################################################################
+# I2C Configuration
+#####################################################################
+
+if RP2040_I2C0 || RP2040_I2C0_SLAVE
+
+ config RP2040_I2C0_SDA_GPIO
+ int "GPIO pin for I2C0 SDA (0, 4, 8, 12, 16, 20, 24, or 28)"
+ default 4
+ range 0 28
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+ config RP2040_I2C0_SCL_GPIO
+ int "GPIO pin for I2C0 SCL (1, 5, 9, 13, 17, 21, 25, or 29)"
+ default 5
+ range 1 29
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+endif # RP2040_I2C0 || RP2040_I2C0_SLAVE
+
+#####################################################################
+
+if RP2040_I2C1 || RP2040_I2C0_SLAVE
+
+ config RP2040_I2C1_SDA_GPIO
+ int "GPIO pin for I2C1 SDA (2, 6, 10, 14, 18, 22, or 26)"
+ default 6
+ range 2 26
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+ config RP2040_I2C1_SCL_GPIO
+ int "GPIO pin for I2C1 SCL (3, 7, 11, 15, 19, 23, or 27)"
+ default 7
+ range 3 27
+ ---help---
+ Refer to board documentation to see which pins are available.
+
+endif # RP2040_I2C1 || RP2040_I2C0_SLAVE
+
+#####################################################################
+# PWM Configuration
+#####################################################################
+
+if RP2040_PWM0
+
+ config RP2040_PWM0A_GPIO
+ int "GPIO pin for PWM0 channel 1 (0, 16 or -1:no assign)"
+ default 0
+ range -1 16
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 0 or 16, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM0B_GPIO
+ int "GPIO pin for PWM0 channel 2 (1, 17 or -1:no assign)"
+ default 1
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 1 or 17, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM0
+
+#####################################################################
+
+if RP2040_PWM1
+
+ config RP2040_PWM1A_GPIO
+ int "GPIO pin for PWM1 channel 1 (2, 18 or -1:no assign)"
+ default 2
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 2 or 18, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM1B_GPIO
+ int "GPIO pin for PWM1 channel 2 (3, 19 or -1:no assign)"
+ default 3
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 3 or 19, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM1
+
+#####################################################################
+
+if RP2040_PWM2
+
+ config RP2040_PWM2A_GPIO
+ int "GPIO pin for PWM2 channel 1 (4, 20 or -1:no assign)"
+ default 4
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 4 or 20, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM2B_GPIO
+ int "GPIO pin for PWM2 channel 2 (5, 21 or -1:no assign)"
+ default 5
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 5 or 21, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM2
+
+#####################################################################
+
+if RP2040_PWM3
+
+ config RP2040_PWM3A_GPIO
+
+ int "GPIO pin for PWM3 channel 1 (6, 22 or -1:no assign)"
+ default 6
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 6 or 22, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM3B_GPIO
+ int "GPIO pin for PWM3 channel 2 (7, 23 or -1:no assign)"
+ default 7
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 7 or 23, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM3
+
+#####################################################################
+
+if RP2040_PWM4
+
+ config RP2040_PWM4A_GPIO
+ int "GPIO pin for PWM4 channel 1 (8, 24 or -1:no assign)"
+ default 8
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 8 or 24, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM4B_GPIO
+ int "GPIO pin for PWM4 channel 2 (9, 25 or -1:no assign)"
+ default 9
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 9 or 25, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM4
+
+#####################################################################
+
+if RP2040_PWM5
+
+ config RP2040_PWM5A_GPIO
+ int "GPIO pin for PWM5 channel 1 (10, 26 or -1:no assign)"
+ default 10
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 10 or 26, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM5B_GPIO
+ int "GPIO pin for PWM5 channel 2 (11, 27 or -1:no assign)"
+ default 11
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 11 or 27, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM5
+
+#####################################################################
+
+if RP2040_PWM6
+
+ config RP2040_PWM6A_GPIO
+ int "GPIO pin for PWM6 channel 1 (12, 28 or -1:no assign)"
+ default 12
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 12 or 28, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM6B_GPIO
+ int "GPIO pin for PWM6 channel 2 (13, 29 or -1:no assign)"
+ default 13
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 13 or 29, any other value disables the output.
+ Refer to board documentation to see which pins are available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM6
+
+#####################################################################
+
+if RP2040_PWM7
+
+ config RP2040_PWM7A_GPIO
+ int "GPIO pin for PWM7 channel 1 (14 or -1:no assign)"
+ default 14
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the A channel it must be
+ either 14, any other value disables the output.
+ Refer to board documentation to see if pin 14 is available.
+
+ if PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+ config RP2040_PWM7B_GPIO
+ int "GPIO pin for PWM7 channel 2 (15 or -1:no assign)"
+ default 15
+ range -1 29
+ ---help---
+ This sets the GPIO pin to use for the B channel it must be
+ either 15, any other value disables the output.
+ Refer to board documentation to see if pin 15 is available.
+
+ endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
+
+endif # RP2040_PWM7
+
+#####################################################################
+# I2S Configuration
+#####################################################################
+
+if RP2040_I2S
+
+ config RP2040_I2S_DATA
+ int "GPIO pin for I2S DATA (0-29)"
+ default 9
+ range 0 29
+
+ config RP2040_I2S_CLOCK
+ int "GPIO pin for I2S CLOCK (0-29)"
+ default 10
+ range 0 29
+
+endif # RP2040_I2S
+
+
+#####################################################################
+# WS2812 Configuration
+#####################################################################
+
+if RP2040_BOARD_HAS_WS2812
- config RPC2040_ADC_CHANNEL3
- bool "Read ADC channel 3"
- default n
+ config RP2040_WS2812_GPIO_PIN
+ int "GPIO pin for ws2812 data line (0-29)"
+ default 0
+ range 0 29
---help---
- If y, then ADC3 will be read.
+ This is the GPIO pin used to send data to the
+ configured ws2812 pixels.
- config RPC2040_ADC_TEMPERATURE
- bool "Read ADC chip temperature channel"
- default n
+ config RP2040_WS2812_PWR_GPIO
+ int "GPIO pin for ws2812 power (0-29, or -1 if not used)"
+ default -1
+ range -1 29
---help---
- If y, then the ADC chip temperature
- will be read.
-
- endif
+ Some RP2040 boards have an on-board ws2812
+ that is powered by a GPIO pin. Set this
+ value to -1 if your board does not have
+ such a pin.
-endif
+endif # RP2040_BOARD_HAS_WS2812
diff --git a/boards/arm/rp2040/common/src/rp2040_spisd.c b/boards/arm/rp2040/common/src/rp2040_spisd.c
index 7980191975..9d56b668c4 100644
--- a/boards/arm/rp2040/common/src/rp2040_spisd.c
+++ b/boards/arm/rp2040/common/src/rp2040_spisd.c
@@ -73,14 +73,14 @@ int board_spisd_initialize(int minor, int bus)
#ifdef CONFIG_RP2040_SPI0
if (bus == 0)
{
- rp2040_gpio_set_pulls(CONFIG_RP2040_SPI0_GPIO, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_SPI0_RX_GPIO, true, false);
}
#endif
#ifdef CONFIG_RP2040_SPI1
if (bus == 1)
{
- rp2040_gpio_set_pulls(CONFIG_RP2040_SPI1_GPIO, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_SPI1_RX_GPIO, true, false);
}
#endif
diff --git a/boards/arm/rp2040/common/src/rp2040_st7735.c b/boards/arm/rp2040/common/src/rp2040_st7735.c
index 451370cfb2..770136c5d4 100644
--- a/boards/arm/rp2040/common/src/rp2040_st7735.c
+++ b/boards/arm/rp2040/common/src/rp2040_st7735.c
@@ -45,11 +45,11 @@
#define LCD_SPI_PORTNO 1
#if LCD_SPI_PORTNO
-#define LCD_DC CONFIG_RP2040_SPI1_GPIO
+#define LCD_DC CONFIG_RP2040_SPI1_RX_GPIO
#define LCD_RST 10
#define LCD_BL 11
#else
-#define LCD_DC CONFIG_RP2040_SPI0_GPIO
+#define LCD_DC CONFIG_RP2040_SPI0_RX_GPIO
#endif
/****************************************************************************
diff --git a/boards/arm/rp2040/common/src/rp2040_st7789.c b/boards/arm/rp2040/common/src/rp2040_st7789.c
index 9c61df6cfe..832d5eb07b 100644
--- a/boards/arm/rp2040/common/src/rp2040_st7789.c
+++ b/boards/arm/rp2040/common/src/rp2040_st7789.c
@@ -45,11 +45,11 @@
#define LCD_SPI_PORTNO CONFIG_RP2040_LCD_SPI_CH
#if LCD_SPI_PORTNO
-#define LCD_DC CONFIG_RP2040_SPI1_GPIO
+#define LCD_DC CONFIG_RP2040_SPI1_RX_GPIO
#define LCD_RST 12
#define LCD_BL 13
#else
-#define LCD_DC CONFIG_RP2040_SPI0_GPIO
+#define LCD_DC CONFIG_RP2040_SPI0_RX_GPIO
#endif
/****************************************************************************
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/Kconfig b/boards/arm/rp2040/pimoroni-tiny2040/Kconfig
index a021973340..0af7a58fa7 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/Kconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/Kconfig
@@ -13,11 +13,12 @@ config RP2040_FLASH_BOOT
If not, the binary is for SRAM boot.
config RP2040_FLASH_CHIP
- string "flash chip name"
+ string "Second stage boot loader"
default "w25q080"
---help---
- Name of NOR flash device connected to RP2040 SoC.
- (Used to choose the secondary boot loader.)
+ This is the name of the Pico-SDK second stage boot loader
+ to use for this board. This board using a Q16 flash chip
+ which is compatible with the w25q080 boot loader.
Basically this option should not be changed.
config RP2040_UF2_BINARY
@@ -26,306 +27,4 @@ config RP2040_UF2_BINARY
---help---
Create nuttx.uf2 binary format used on RP2040 based arch.
-config RP2040_UART0_GPIO
- int "UART0 GPIO pin assign (0,12,16,28 or -1:no assign)"
- default 0
- range -1 29
- depends on RP2040_UART0
-
-config RP2040_UART1_GPIO
- int "UART1 GPIO pin assign (4,8,20,24 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_UART1
-
-config RP2040_I2C0_GPIO
- int "I2C0 GPIO pin assign (0,4,8,12,16,20,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C0
-
-config RP2040_I2C1_GPIO
- int "I2C1 GPIO pin assign (2,6,10,14,18,22,26 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C1
-
-if RP2040_PWM0
- config RP2040_PWM0A_GPIO
- int "PWM0 channel 1 GPIO pin assign (0 or -1:no assign)"
- default 0
- range -1 16
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 0, any other value disables the output.
-
- config RP2040_PWM0A_INVERT
- bool "PWM0 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM0B_GPIO
- int "PWM0 channel 2 GPIO pin assign (1 or -1:no assign)"
- default 1
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 1, any other value disables the output.
-
- config RP2040_PWM0B_INVERT
- bool "PWM0 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM0_PHASE_CORRECT
- bool "PWM0 phase correct"
- default n
-endif
-
-if RP2040_PWM1
- config RP2040_PWM1A_GPIO
- int "PWM1 channel 1 GPIO pin assign (2, 18 or -1:no assign)"
- default 2
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 2 or 18, any other value disables the output.
-
- config RP2040_PWM1A_INVERT
- bool "PWM1 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM1B_GPIO
- int "PWM1 channel 2 GPIO pin assign (3, 19 or -1:no assign)"
- default 3
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 3 or 19, any other value disables the output.
-
- config RP2040_PWM1B_INVERT
- bool "PWM1 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM1_PHASE_CORRECT
- bool "PWM1 phase correct"
- default n
-endif
-
-if RP2040_PWM2
- config RP2040_PWM2A_GPIO
- int "PWM2 channel 1 GPIO pin assign (4, 20 or -1:no assign)"
- default 4
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 4 or 20, any other value disables the output.
-
- config RP2040_PWM2A_INVERT
- bool "PWM2 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM2B_GPIO
- int "PWM2 channel 2 GPIO pin assign (5, 21 or -1:no assign)"
- default 5
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 5 or 21, any other value disables the output.
-
- config RP2040_PWM2B_INVERT
- bool "PWM2 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM2_PHASE_CORRECT
- bool "PWM2 phase correct"
- default n
-endif
-
-if RP2040_PWM3
- config RP2040_PWM3A_GPIO
- int "PWM3 channel 1 GPIO pin assign (6 or -1:no assign)"
- default 6
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 6, any other value disables the output.
-
- config RP2040_PWM3A_INVERT
- bool "PWM3 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM3B_GPIO
- int "PWM3 channel 2 GPIO pin assign (7 or -1:no assign)"
- default 7
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 7, any other value disables the output.
-
- config RP2040_PWM3B_INVERT
- bool "PWM3 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM3_PHASE_CORRECT
- bool "PWM3 phase correct"
- default n
-endif
-
-if RP2040_PWM5
- config RP2040_PWM5A_GPIO
- int "PWM5 channel 1 GPIO pin assign (26 or -1:no assign)"
- default 26
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 26, any other value disables the output.
-
- config RP2040_PWM5A_INVERT
- bool "PWM5 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM5B_GPIO
- int "PWM5 channel 2 GPIO pin assign (27 or -1:no assign)"
- default 27
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 27, any other value disables the output.
-
- config RP2040_PWM5B_INVERT
- bool "PWM5 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM5_PHASE_CORRECT
- bool "PWM5 phase correct"
- default n
-endif
-
-if RP2040_PWM6
- config RP2040_PWM6A_GPIO
- int "PWM6 channel 1 GPIO pin assign (28 or -1:no assign)"
- default 28
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 28, any other value disables the output.
-
- config RP2040_PWM6A_INVERT
- bool "PWM6 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM6B_GPIO
- int "PWM6 channel 2 GPIO pin assign (29 or -1:no assign)"
- default 29
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 29, any other value disables the output.
-
- config RP2040_PWM6B_INVERT
- bool "PWM6 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM6_PHASE_CORRECT
- bool "PWM6 phase correct"
- default n
-endif
-
-if RP2040_PWM7
- config RP2040_PWM7A_GPIO
- int "PWM7 channel 1 GPIO pin assign (14 or -1:no assign)"
- default 14
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 14, any other value disables the output.
-
- config RP2040_PWM7A_INVERT
- bool "PWM7 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM7B_GPIO
- int "PWM7 channel 2 GPIO pin assign (15 or -1:no assign)"
- default 15
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 15, any other value disables the output.
-
- config RP2040_PWM7B_INVERT
- bool "PWM7 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM7_PHASE_CORRECT
- bool "PWM7 phase correct"
- default n
-endif
-
-config RP2040_SPI0_GPIO
- int "SPI0 GPIO pin assign (0,4,16,20 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI0
-
-config RP2040_SPI1_GPIO
- int "SPI1 GPIO pin assign (8,12,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI1
-
endif
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/composite/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/composite/defconfig
index 573206543a..3a1ffeceff 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/composite/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/composite/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -53,7 +52,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=4
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=3
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig
index a25898b337..3ad6d6cb19 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/gpio/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/nsh/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/nsh/defconfig
index 3630991fa0..4a33d5fba0 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/nsh/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/nsh/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/nshsram/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/nshsram/defconfig
index 99dbb282a9..f0e347c9bf 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/nshsram/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/nshsram/defconfig
@@ -15,7 +15,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/smp/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/smp/defconfig
index 235ce75b96..3512946e54 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/smp/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/smp/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/spisd/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/spisd/defconfig
index de1e4d5a48..ce16a6bea7 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/spisd/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/spisd/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -45,7 +44,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=4
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=3
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/usbmsc/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/usbmsc/defconfig
index 57cddbec76..62831d35bb 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/usbmsc/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/usbmsc/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -47,7 +46,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=4
+CONFIG_RP2040_SPI0_CS_GPIO=5
+CONFIG_RP2040_SPI0_RX_GPIO=4
+CONFIG_RP2040_SPI0_SCK_GPIO=6
+CONFIG_RP2040_SPI0_TX_GPIO=3
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/configs/usbnsh/defconfig b/boards/arm/rp2040/pimoroni-tiny2040/configs/usbnsh/defconfig
index d1af1ca2e9..9504215089 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/configs/usbnsh/defconfig
+++ b/boards/arm/rp2040/pimoroni-tiny2040/configs/usbnsh/defconfig
@@ -15,7 +15,6 @@
# CONFIG_RP2040_UART0 is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="pimoroni-tiny2040"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_PIMORONI_TINY2040=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_boardinitialize.c b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_boardinitialize.c
index 714e43534a..882dcf32fc 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_boardinitialize.c
+++ b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_boardinitialize.c
@@ -79,32 +79,32 @@ void rp2040_boardearlyinitialize(void)
/* Set default UART pin */
-#if defined(CONFIG_RP2040_UART0) && CONFIG_RP2040_UART0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO,
+#ifdef CONFIG_RP2040_UART0
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
-#if defined(CONFIG_RP2040_UART1) && CONFIG_RP2040_UART1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO,
+#ifdef CONFIG_RP2040_UART1
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
@@ -121,55 +121,55 @@ void rp2040_boardinitialize(void)
{
/* Set default I2C pin */
-#if defined(CONFIG_RP2040_I2C0) && CONFIG_RP2040_I2C0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO,
+#ifdef CONFIG_RP2040_I2C0
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
#endif
-#if defined(CONFIG_RP2040_I2C1) && CONFIG_RP2040_I2C1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO,
+#ifdef CONFIG_RP2040_I2C1
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
#endif
/* Set default SPI pin */
-#if defined(CONFIG_RP2040_SPI0) && CONFIG_RP2040_SPI0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO,
+#ifdef CONFIG_RP2040_SPI0
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI0_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI0_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI0_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI0_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, true);
#endif
-#if defined(CONFIG_RP2040_SPI1) && CONFIG_RP2040_SPI1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO,
+#ifdef CONFIG_RP2040_SPI1
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI1_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI1_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI1_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI1_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, true);
#endif
}
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_bringup.c b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_bringup.c
index 8082bbf121..a43aa21937 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_bringup.c
+++ b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_bringup.c
@@ -460,6 +460,7 @@ int rp2040_bringup(void)
#if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
rp2040_ws2812_setup("/dev/leds0",
CONFIG_RP2040_WS2812_GPIO_PIN,
+ CONFIG_RP2040_WS2812_PWR_GPIO,
CONFIG_WS2812_LED_COUNT,
HAS_WHITE);
#endif
diff --git a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_spi.c b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_spi.c
index 4faf44d9ea..111765b392 100644
--- a/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_spi.c
+++ b/boards/arm/rp2040/pimoroni-tiny2040/src/rp2040_spi.c
@@ -74,7 +74,7 @@ void rp2040_spi0select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, !selected);
}
uint8_t rp2040_spi0status(struct spi_dev_s *dev, uint32_t devid)
@@ -102,7 +102,7 @@ void rp2040_spi1select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, !selected);
}
uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
diff --git a/boards/arm/rp2040/raspberrypi-pico/Kconfig b/boards/arm/rp2040/raspberrypi-pico/Kconfig
index a2bf69e6af..a1a01a010d 100644
--- a/boards/arm/rp2040/raspberrypi-pico/Kconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/Kconfig
@@ -13,11 +13,12 @@ config RP2040_FLASH_BOOT
If not, the binary is for SRAM boot.
config RP2040_FLASH_CHIP
- string "flash chip name"
+ string "Second stage boot loader"
default "w25q080"
---help---
- Name of NOR flash device connected to RP2040 SoC.
- (Used to choose the secondary boot loader.)
+ This is the name of the Pico-SDK second stage boot loader
+ to use for this board. This board using a Q16 flash chip
+ which is compatible with the w25q080 boot loader.
Basically this option should not be changed.
config RP2040_UF2_BINARY
@@ -26,346 +27,6 @@ config RP2040_UF2_BINARY
---help---
Create nuttx.uf2 binary format used on RP2040 based arch.
-config RP2040_UART0_GPIO
- int "UART0 GPIO pin assign (0,12,16,28 or -1:no assign)"
- default 0
- range -1 29
- depends on RP2040_UART0
-
-config RP2040_UART1_GPIO
- int "UART1 GPIO pin assign (4,8,20,24 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_UART1
-
-config RP2040_I2C0_GPIO
- int "I2C0 GPIO pin assign (0,4,8,12,16,20,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C0
-
-config RP2040_I2C1_GPIO
- int "I2C1 GPIO pin assign (2,6,10,14,18,22,26 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_I2C1
-
-if RP2040_PWM0
- config RP2040_PWM0A_GPIO
- int "PWM0 channel 1 GPIO pin assign (0, 16 or -1:no assign)"
- default 0
- range -1 16
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 0 or 16, any other value disables the output.
-
- config RP2040_PWM0A_INVERT
- bool "PWM0 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM0B_GPIO
- int "PWM0 channel 2 GPIO pin assign (1, 17 or -1:no assign)"
- default 1
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 1 or 17, any other value disables the output.
-
- config RP2040_PWM0B_INVERT
- bool "PWM0 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM0_PHASE_CORRECT
- bool "PWM0 phase correct"
- default n
-endif
-
-if RP2040_PWM1
- config RP2040_PWM1A_GPIO
- int "PWM1 channel 1 GPIO pin assign (2, 18 or -1:no assign)"
- default 2
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 2 or 18, any other value disables the output.
-
- config RP2040_PWM1A_INVERT
- bool "PWM1 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM1B_GPIO
- int "PWM1 channel 2 GPIO pin assign (3, 19 or -1:no assign)"
- default 3
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 3 or 19, any other value disables the output.
-
- config RP2040_PWM1B_INVERT
- bool "PWM1 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM1_PHASE_CORRECT
- bool "PWM1 phase correct"
- default n
-endif
-
-if RP2040_PWM2
- config RP2040_PWM2A_GPIO
- int "PWM2 channel 1 GPIO pin assign (4, 20 or -1:no assign)"
- default 4
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 4 or 20, any other value disables the output.
-
- config RP2040_PWM2A_INVERT
- bool "PWM2 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM2B_GPIO
- int "PWM2 channel 2 GPIO pin assign (5, 21 or -1:no assign)"
- default 5
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 5 or 21, any other value disables the output.
-
- config RP2040_PWM2B_INVERT
- bool "PWM2 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM2_PHASE_CORRECT
- bool "PWM2 phase correct"
- default n
-endif
-
-if RP2040_PWM3
- config RP2040_PWM3A_GPIO
- int "PWM3 channel 1 GPIO pin assign (6, 22 or -1:no assign)"
- default 6
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 6 or 22, any other value disables the output.
-
- config RP2040_PWM3A_INVERT
- bool "PWM3 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM3B_GPIO
- int "PWM3 channel 2 GPIO pin assign (7, 23 or -1:no assign)"
- default 7
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 7 or 23, any other value disables the output.
-
- config RP2040_PWM3B_INVERT
- bool "PWM3 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM3_PHASE_CORRECT
- bool "PWM3 phase correct"
- default n
-endif
-
-if RP2040_PWM4
- config RP2040_PWM4A_GPIO
- int "PWM4 channel 1 GPIO pin assign (8, 24 or -1:no assign)"
- default 8
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 8 or 24, any other value disables the output.
-
- config RP2040_PWM4A_INVERT
- bool "PWM4 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM4B_GPIO
- int "PWM4 channel 2 GPIO pin assign (9, 25 or -1:no assign)"
- default 9
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 9 or 25, any other value disables the output.
-
- config RP2040_PWM4B_INVERT
- bool "PWM4 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM4_PHASE_CORRECT
- bool "PWM4 phase correct"
- default n
-endif
-
-if RP2040_PWM5
- config RP2040_PWM5A_GPIO
- int "PWM5 channel 1 GPIO pin assign (10, 26 or -1:no assign)"
- default 10
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 10 or 26, any other value disables the output.
-
- config RP2040_PWM5A_INVERT
- bool "PWM5 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM5B_GPIO
- int "PWM5 channel 2 GPIO pin assign (11, 27 or -1:no assign)"
- default 11
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 11 or 27, any other value disables the output.
-
- config RP2040_PWM5B_INVERT
- bool "PWM5 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM5_PHASE_CORRECT
- bool "PWM5 phase correct"
- default n
-endif
-
-if RP2040_PWM6
- config RP2040_PWM6A_GPIO
- int "PWM6 channel 1 GPIO pin assign (12, 28 or -1:no assign)"
- default 12
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 12 or 28, any other value disables the output.
-
- config RP2040_PWM6A_INVERT
- bool "PWM6 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM6B_GPIO
- int "PWM6 channel 2 GPIO pin assign (13, 29 or -1:no assign)"
- default 13
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 13 or 29, any other value disables the output.
-
- config RP2040_PWM6B_INVERT
- bool "PWM6 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM6_PHASE_CORRECT
- bool "PWM6 phase correct"
- default n
-endif
-
-if RP2040_PWM7
- config RP2040_PWM7A_GPIO
- int "PWM7 channel 1 GPIO pin assign (14 or -1:no assign)"
- default 14
- range -1 29
- ---help---
- This sets the GPIO pin to use for the A channel it must be
- either 14, any other value disables the output.
-
- config RP2040_PWM7A_INVERT
- bool "PWM7 channel 1 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the A pin will idle high
- with the pulse going low.
-
- if PWM_MULTICHAN && PWM_NCHANNELS > 1
- config RP2040_PWM7B_GPIO
- int "PWM7 channel 2 GPIO pin assign (15 or -1:no assign)"
- default 15
- range -1 29
- ---help---
- This sets the GPIO pin to use for the B channel it must be
- either 15, any other value disables the output.
-
- config RP2040_PWM7B_INVERT
- bool "PWM7 channel 2 invert"
- default n
- ---help---
- If invert is enabled, the PWM on the B pin will idle high
- with the pulse going low.
- endif
-
- config RP2040_PWM7_PHASE_CORRECT
- bool "PWM7 phase correct"
- default n
-endif
-
-config RP2040_SPI0_GPIO
- int "SPI0 GPIO pin assign (0,4,16,20 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI0
-
-config RP2040_SPI1_GPIO
- int "SPI1 GPIO pin assign (8,12,24,28 or -1:no assign)"
- default -1
- range -1 29
- depends on RP2040_SPI1
-
config RP2040_LCD_SPI_CH
int "RP2040 LCD SPI channel number"
default 0
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/audiopack/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/audiopack/defconfig
index 41d32edef7..a365d1ce8a 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/audiopack/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/audiopack/defconfig
@@ -21,7 +21,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -54,7 +53,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_I2S=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/composite/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/composite/defconfig
index 38484216bc..6b246a0ee6 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/composite/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/composite/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -53,7 +52,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/displaypack/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/displaypack/defconfig
index f48923f4ae..e1a0ec7469 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/displaypack/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/displaypack/defconfig
@@ -20,7 +20,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -81,7 +80,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/enc28j60/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/enc28j60/defconfig
index 89c73fc0c7..09d4ca2a17 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/enc28j60/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/enc28j60/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -59,9 +58,11 @@ CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_ENC28J60_INTR_GPIO=11
CONFIG_RP2040_ENC28J60_RESET_GPIO=10
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
+CONFIG_RP2040_SPI1_CS_GPIO=13
+CONFIG_RP2040_SPI1_RX_GPIO=12
+CONFIG_RP2040_SPI1_SCK_GPIO=14
+CONFIG_RP2040_SPI1_TX_GPIO=15
CONFIG_RP2040_SPI=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_HPWORK=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/lcd1602/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/lcd1602/defconfig
index db9f390dec..7767f6443a 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/lcd1602/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/lcd1602/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -41,7 +40,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/nsh/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/nsh/defconfig
index 421ba0692a..545734df1e 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/nsh/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/nsh/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/nshsram/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/nshsram/defconfig
index 854cb64d53..e90297c312 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/nshsram/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/nshsram/defconfig
@@ -15,7 +15,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/smp/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/smp/defconfig
index e7fc281bcd..40de637396 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/smp/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/smp/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/spisd/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/spisd/defconfig
index b662bbaa52..a27ca55151 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/spisd/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/spisd/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -45,7 +44,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/ssd1306/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/ssd1306/defconfig
index e9ebc400d2..814ea27d43 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/ssd1306/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/ssd1306/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -60,7 +59,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_I2C0=y
-CONFIG_RP2040_I2C0_GPIO=4
CONFIG_RP2040_I2C=y
CONFIG_RP2040_I2C_DRIVER=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/st7735/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/st7735/defconfig
index 9e7d8caaab..a218a25400 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/st7735/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/st7735/defconfig
@@ -14,7 +14,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -44,7 +43,10 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=12
+CONFIG_RP2040_SPI1_CS_GPIO=13
+CONFIG_RP2040_SPI1_RX_GPIO=12
+CONFIG_RP2040_SPI1_SCK_GPIO=14
+CONFIG_RP2040_SPI1_TX_GPIO=15
CONFIG_RP2040_SPI=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/usbmsc/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/usbmsc/defconfig
index fc4af6e603..495a998957 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/usbmsc/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/usbmsc/defconfig
@@ -17,7 +17,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -47,7 +46,6 @@ CONFIG_RAM_SIZE=270336
CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_SPI0=y
-CONFIG_RP2040_SPI0_GPIO=16
CONFIG_RP2040_SPI=y
CONFIG_RP2040_SPISD=y
CONFIG_RR_INTERVAL=200
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/usbnsh/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/usbnsh/defconfig
index 1944655f00..e45f7ee4c6 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/usbnsh/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/usbnsh/defconfig
@@ -15,7 +15,6 @@
# CONFIG_RP2040_UART0 is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.14/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.14/defconfig
index b4748ad3df..83ae1bb1c6 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.14/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.14/defconfig
@@ -19,7 +19,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -78,7 +77,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.3/defconfig b/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.3/defconfig
index 70ffeac581..8f2f50ea19 100644
--- a/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.3/defconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/configs/waveshare-lcd-1.3/defconfig
@@ -19,7 +19,6 @@
# CONFIG_STANDARD_SERIAL is not set
CONFIG_ARCH="arm"
CONFIG_ARCH_BOARD="raspberrypi-pico"
-CONFIG_ARCH_BOARD_COMMON=y
CONFIG_ARCH_BOARD_RASPBERRYPI_PICO=y
CONFIG_ARCH_CHIP="rp2040"
CONFIG_ARCH_CHIP_RP2040=y
@@ -75,7 +74,6 @@ CONFIG_RAM_START=0x20000000
CONFIG_READLINE_CMD_HISTORY=y
CONFIG_RP2040_LCD_SPI_CH=1
CONFIG_RP2040_SPI1=y
-CONFIG_RP2040_SPI1_GPIO=8
CONFIG_RP2040_SPI=y
CONFIG_RR_INTERVAL=200
CONFIG_SCHED_WAITPID=y
diff --git a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_boardinitialize.c b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_boardinitialize.c
index 33e6790870..a3eba93eae 100644
--- a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_boardinitialize.c
+++ b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_boardinitialize.c
@@ -70,32 +70,32 @@ void rp2040_boardearlyinitialize(void)
/* Set default UART pin */
-#if defined(CONFIG_RP2040_UART0) && CONFIG_RP2040_UART0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO,
+#ifdef CONFIG_RP2040_UART0
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART0_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
-#if defined(CONFIG_RP2040_UART1) && CONFIG_RP2040_UART1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO,
+#ifdef CONFIG_RP2040_UART1
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_TX_GPIO,
RP2040_GPIO_FUNC_UART); /* TX */
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RX_GPIO,
RP2040_GPIO_FUNC_UART); /* RX */
#ifdef CONFIG_SERIAL_OFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_CTS_GPIO,
RP2040_GPIO_FUNC_UART); /* CTS */
#endif
#ifdef CONFIG_SERIAL_IFLOWCONTROL
- rp2040_gpio_set_function(CONFIG_RP2040_UART1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_UART1_RTS_GPIO,
RP2040_GPIO_FUNC_UART); /* RTS */
#endif
#endif
@@ -112,55 +112,55 @@ void rp2040_boardinitialize(void)
{
/* Set default I2C pin */
-#if defined(CONFIG_RP2040_I2C0) && CONFIG_RP2040_I2C0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO,
+#ifdef CONFIG_RP2040_I2C0
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C0_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C0_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C0_SCL_GPIO, true, false);
#endif
-#if defined(CONFIG_RP2040_I2C1) && CONFIG_RP2040_I2C1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO,
+#ifdef CONFIG_RP2040_I2C1
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SDA_GPIO,
RP2040_GPIO_FUNC_I2C); /* SDA */
- rp2040_gpio_set_function(CONFIG_RP2040_I2C1_GPIO + 1,
+ rp2040_gpio_set_function(CONFIG_RP2040_I2C1_SCL_GPIO,
RP2040_GPIO_FUNC_I2C); /* SCL */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO, true, false); /* Pull up */
- rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_GPIO + 1, true, false);
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SDA_GPIO, true, false); /* Pull up */
+ rp2040_gpio_set_pulls(CONFIG_RP2040_I2C1_SCL_GPIO, true, false);
#endif
/* Set default SPI pin */
-#if defined(CONFIG_RP2040_SPI0) && CONFIG_RP2040_SPI0_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO,
+#ifdef CONFIG_RP2040_SPI0
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI0_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI0_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI0_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI0_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI0_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI0_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, true);
#endif
-#if defined(CONFIG_RP2040_SPI1) && CONFIG_RP2040_SPI1_GPIO >= 0
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO,
+#ifdef CONFIG_RP2040_SPI1
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_RX_GPIO,
RP2040_GPIO_FUNC_SPI); /* RX */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 2,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_SCK_GPIO,
RP2040_GPIO_FUNC_SPI); /* SCK */
- rp2040_gpio_set_function(CONFIG_RP2040_SPI1_GPIO + 3,
+ rp2040_gpio_set_function(CONFIG_RP2040_SPI1_TX_GPIO,
RP2040_GPIO_FUNC_SPI); /* TX */
/* CSn is controlled by board-specific logic */
- rp2040_gpio_init(CONFIG_RP2040_SPI1_GPIO + 1); /* CSn */
- rp2040_gpio_setdir(CONFIG_RP2040_SPI1_GPIO + 1, true);
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, true);
+ rp2040_gpio_init(CONFIG_RP2040_SPI1_CS_GPIO); /* CSn */
+ rp2040_gpio_setdir(CONFIG_RP2040_SPI1_CS_GPIO, true);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, true);
#endif
}
diff --git a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_bringup.c b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_bringup.c
index b5b19e7e1b..2e5ae58070 100644
--- a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_bringup.c
+++ b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_bringup.c
@@ -539,6 +539,7 @@ int rp2040_bringup(void)
#if defined(CONFIG_RP2040_BOARD_HAS_WS2812) && defined(CONFIG_WS2812)
rp2040_ws2812_setup("/dev/leds0",
CONFIG_RP2040_WS2812_GPIO_PIN,
+ CONFIG_RP2040_WS2812_PWR_GPIO,
CONFIG_WS2812_LED_COUNT,
HAS_WHITE);
#endif
diff --git a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_spi.c b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_spi.c
index 9e6c3d1e44..db9b8e4981 100644
--- a/boards/arm/rp2040/raspberrypi-pico/src/rp2040_spi.c
+++ b/boards/arm/rp2040/raspberrypi-pico/src/rp2040_spi.c
@@ -74,7 +74,7 @@ void rp2040_spi0select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_CS_GPIO, !selected);
}
uint8_t rp2040_spi0status(struct spi_dev_s *dev, uint32_t devid)
@@ -97,7 +97,7 @@ int rp2040_spi0cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI0_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI0_RX_GPIO, !cmd);
return OK;
}
@@ -115,7 +115,7 @@ void rp2040_spi1select(struct spi_dev_s *dev, uint32_t devid,
spiinfo("devid: %d CS: %s\n", (int)devid,
selected ? "assert" : "de-assert");
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO + 1, !selected);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_CS_GPIO, !selected);
}
uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
@@ -138,7 +138,7 @@ int rp2040_spi1cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
* data bits are data or a command.
*/
- rp2040_gpio_put(CONFIG_RP2040_SPI1_GPIO, !cmd);
+ rp2040_gpio_put(CONFIG_RP2040_SPI1_RX_GPIO, !cmd);
return OK;
}
diff --git a/drivers/leds/ws2812.c b/drivers/leds/ws2812.c
index 1c2b0df89b..0919d3f500 100644
--- a/drivers/leds/ws2812.c
+++ b/drivers/leds/ws2812.c
@@ -667,7 +667,7 @@ int ws2812_leds_register(FAR const char *devpath, FAR struct spi_dev_s *spi,
return -ENOMEM;
}
- priv->nleds = nleds;
+ priv->nleds = nleds;
priv->tx_buf = (FAR uint8_t *)kmm_zalloc(TXBUFF_SIZE(priv->nleds));
if (!priv->tx_buf)
{
diff --git a/include/nuttx/leds/ws2812.h b/include/nuttx/leds/ws2812.h
index e64759e6d6..5ab44468cb 100644
--- a/include/nuttx/leds/ws2812.h
+++ b/include/nuttx/leds/ws2812.h
@@ -88,17 +88,12 @@ struct ws2812_dev_s
FAR char *data,
size_t len);
+ void *private; /* Private data for opened device */
uint32_t clock;
sem_t exclsem;
int port;
uint16_t nleds;
bool has_white;
-
- /* --------------------------------------------------------
- * Other fields must be set to zero.
- */
-
- void *private; /* Private data for opened device */
};
#endif