You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nuttx.apache.org by ac...@apache.org on 2023/01/18 22:31:49 UTC

[nuttx] branch master updated (dc454765fb -> 85f57fb50c)

This is an automated email from the ASF dual-hosted git repository.

acassis pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git


    from dc454765fb Revert "add holder for mutex"
     new 5d08844413 boards/arm/rp2040: move duplicate peripheral configs to common
     new 9deeae0dee boards/arm/rp2040: add gc9a01 drivers
     new 85f57fb50c boards/arm/rp2040: add waveshare rp2040 lcd 1.28

The 3 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 boards/Kconfig                                     | 548 +++++++++++----------
 boards/arm/rp2040/adafruit-feather-rp2040/Kconfig  |  28 --
 boards/arm/rp2040/adafruit-kb2040/Kconfig          |  28 --
 boards/arm/rp2040/common/Kconfig                   |  42 +-
 boards/arm/rp2040/common/src/Make.defs             |   4 +
 boards/arm/rp2040/common/src/rp2040_gc9a01.c       | 156 ++++++
 boards/arm/rp2040/common/src/rp2040_spi.c          |   2 +-
 boards/arm/rp2040/raspberrypi-pico-w/Kconfig       |  34 +-
 boards/arm/rp2040/raspberrypi-pico/Kconfig         |  28 --
 .../arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig   |   8 +
 .../rp2040/waveshare-rp2040-lcd-1.28/README.txt    | 191 +++++++
 .../configs/composite/defconfig                    |  72 +++
 .../waveshare-rp2040-lcd-1.28/configs/fb/defconfig |  63 +++
 .../configs/lvgl/defconfig                         |  73 +++
 .../configs/nsh-flash/defconfig                    |  49 ++
 .../configs/nsh/defconfig                          |  47 ++
 .../configs/nshsram/defconfig                      |  47 ++
 .../configs/smp/defconfig                          |  54 ++
 .../configs/spisd/defconfig                        |  58 +++
 .../configs/usbmsc/defconfig                       |  65 +++
 .../configs/usbnsh/defconfig                       |  51 ++
 .../waveshare-rp2040-lcd-1.28/include/board.h      | 116 +++++
 .../include/rp2040_i2cdev.h                        |  72 +++
 .../include/rp2040_i2sdev.h                        |  72 +++
 .../include/rp2040_spidev.h                        |  69 +++
 .../include/rp2040_spisd.h                         |  83 ++++
 .../waveshare-rp2040-lcd-1.28/scripts/Make.defs    |  45 ++
 .../scripts/waveshare-rp2040-lcd-1-28-flash.ld}    |   0
 .../scripts/waveshare-rp2040-lcd-1-28-sram.ld}     |   0
 .../src/Make.defs                                  |   0
 .../waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c |  78 +++
 .../src/rp2040_boardinitialize.c                   |  87 ++++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c |  63 +++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c    | 392 +++++++++++++++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_pico.h    |  36 ++
 35 files changed, 2374 insertions(+), 387 deletions(-)
 create mode 100644 boards/arm/rp2040/common/src/rp2040_gc9a01.c
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/README.txt
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/composite/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/fb/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/lvgl/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh-flash/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nshsram/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/smp/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/spisd/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbmsc/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbnsh/defconfig
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2cdev.h
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2sdev.h
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spidev.h
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spisd.h
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/Make.defs
 copy boards/arm/rp2040/{raspberrypi-pico-w/scripts/raspberrypi-pico-flash.ld => waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-flash.ld} (100%)
 copy boards/arm/rp2040/{raspberrypi-pico-w/scripts/raspberrypi-pico-sram.ld => waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-sram.ld} (100%)
 copy boards/arm/rp2040/{raspberrypi-pico => waveshare-rp2040-lcd-1.28}/src/Make.defs (100%)
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_boardinitialize.c
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c
 create mode 100644 boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_pico.h


[nuttx] 01/03: boards/arm/rp2040: move duplicate peripheral configs to common

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 5d0884441328a586befc92af9d2fd9503069f3a0
Author: Peter Bee <bi...@xiaomi.com>
AuthorDate: Wed Jan 18 16:05:04 2023 +0800

    boards/arm/rp2040: move duplicate peripheral configs to common
    
    Kconfigs with same names in different files could not be handled
    correctly
    
    Signed-off-by: Peter Bee <bi...@xiaomi.com>
---
 boards/arm/rp2040/adafruit-feather-rp2040/Kconfig | 28 ---------------
 boards/arm/rp2040/adafruit-kb2040/Kconfig         | 28 ---------------
 boards/arm/rp2040/common/Kconfig                  | 42 ++++++++++++++++++++++-
 boards/arm/rp2040/raspberrypi-pico-w/Kconfig      | 34 ++----------------
 boards/arm/rp2040/raspberrypi-pico/Kconfig        | 28 ---------------
 5 files changed, 44 insertions(+), 116 deletions(-)

diff --git a/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig b/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
index 45616d3692..005f26d57d 100644
--- a/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
+++ b/boards/arm/rp2040/adafruit-feather-rp2040/Kconfig
@@ -5,32 +5,4 @@
 
 if ARCH_BOARD_ADAFRUIT_FEATHER_RP2040
 
-config RP2040_LCD_SPI_CH
-	int "RP2040 LCD SPI channel number"
-	default 0
-	range 0 1
-	depends on LCD
-	---help---
-		Select SPI channel number to use LCD display.
-
-config RP2040_ENC28J60_SPI_CH
-	int "ENC28J60 SPI channel number"
-	default 1
-	range 0 1
-	depends on ENC28J60
-	---help---
-		Select SPI channel number to use ENC28J60 ethernet.
-
-config RP2040_ENC28J60_INTR_GPIO
-	int "ENC28J60 interrupt GPIO pin assign"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
-config RP2040_ENC28J60_RESET_GPIO
-	int "ENC28J60 reset GPIO pin assign (optional)"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
 endif
diff --git a/boards/arm/rp2040/adafruit-kb2040/Kconfig b/boards/arm/rp2040/adafruit-kb2040/Kconfig
index 0b4e0518b9..0acee34886 100644
--- a/boards/arm/rp2040/adafruit-kb2040/Kconfig
+++ b/boards/arm/rp2040/adafruit-kb2040/Kconfig
@@ -5,32 +5,4 @@
 
 if ARCH_BOARD_ADAFRUIT_KB2040
 
-config RP2040_LCD_SPI_CH
-	int "RP2040 LCD SPI channel number"
-	default 0
-	range 0 1
-	depends on LCD
-	---help---
-		Select SPI channel number to use LCD display.
-
-config RP2040_ENC28J60_SPI_CH
-	int "ENC28J60 SPI channel number"
-	default 1
-	range 0 1
-	depends on ENC28J60
-	---help---
-		Select SPI channel number to use ENC28J60 ethernet.
-
-config RP2040_ENC28J60_INTR_GPIO
-	int "ENC28J60 interrupt GPIO pin assign"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
-config RP2040_ENC28J60_RESET_GPIO
-	int "ENC28J60 reset GPIO pin assign (optional)"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
 endif
diff --git a/boards/arm/rp2040/common/Kconfig b/boards/arm/rp2040/common/Kconfig
index 954b9c116f..396ca55d93 100644
--- a/boards/arm/rp2040/common/Kconfig
+++ b/boards/arm/rp2040/common/Kconfig
@@ -482,7 +482,7 @@ if RP2040_PWM7
   endif # PWM_MULTICHAN && PWM_NCHANNELS > 1
 
 endif # RP2040_PWM7
-		
+
 #####################################################################
 #  I2S Configuration
 #####################################################################
@@ -540,3 +540,43 @@ if RP2040_FLASH_FILE_SYSTEM
 			This is the overall amount of flash memory on the board.
 
 endif # RP2040_FLASH_FILE_SYSTEM
+
+#####################################################################
+#  LCD Configuration
+#####################################################################
+
+if LCD
+
+  config RP2040_LCD_SPI_CH
+    int "RP2040 LCD SPI channel number"
+    default 0
+    range 0 1
+    ---help---
+      Select SPI channel number to use LCD display.
+
+endif # LCD
+
+#####################################################################
+#  Ethernet Configuration
+#####################################################################
+
+if ENC28J60
+
+  config RP2040_ENC28J60_SPI_CH
+    int "ENC28J60 SPI channel number"
+    default 1
+    range 0 1
+    ---help---
+      Select SPI channel number to use ENC28J60 ethernet.
+
+  config RP2040_ENC28J60_INTR_GPIO
+    int "ENC28J60 interrupt GPIO pin assign"
+    default -1
+    range -1 29
+
+  config RP2040_ENC28J60_RESET_GPIO
+    int "ENC28J60 reset GPIO pin assign (optional)"
+    default -1
+    range -1 29
+
+endif # ENC28J60
diff --git a/boards/arm/rp2040/raspberrypi-pico-w/Kconfig b/boards/arm/rp2040/raspberrypi-pico-w/Kconfig
index 45927d1ba2..ab1ea1ef83 100644
--- a/boards/arm/rp2040/raspberrypi-pico-w/Kconfig
+++ b/boards/arm/rp2040/raspberrypi-pico-w/Kconfig
@@ -5,34 +5,6 @@
 
 if ARCH_BOARD_RASPBERRYPI_PICO_W
 
-config RP2040_LCD_SPI_CH
-	int "RP2040 LCD SPI channel number"
-	default 0
-	range 0 1
-	depends on LCD
-	---help---
-		Select SPI channel number to use LCD display.
-
-config RP2040_ENC28J60_SPI_CH
-	int "ENC28J60 SPI channel number"
-	default 1
-	range 0 1
-	depends on ENC28J60
-	---help---
-		Select SPI channel number to use ENC28J60 ethernet.
-
-config RP2040_ENC28J60_INTR_GPIO
-	int "ENC28J60 interrupt GPIO pin assign"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
-config RP2040_ENC28J60_RESET_GPIO
-	int "ENC28J60 reset GPIO pin assign (optional)"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
 menuconfig RP2040_INFINEON_CYW43439
 	bool "Has Infineon cyw43439 WiFi chip"
 	depends on IEEE80211_INFINEON_CYW43439
@@ -57,10 +29,10 @@ if RP2040_INFINEON_CYW43439
 		default 224190
 		---help---
 			This is the length of just the base firmware in the firmware file specified
-			by the "Path to Infineon 43439 firmware file" configuration option.  
-			
+			by the "Path to Infineon 43439 firmware file" configuration option.
+
 			This length does not include the length of any padding nor the length of
-			the appended clm_blob. If a clm_blob is present in the firmware file, this 
+			the appended clm_blob. If a clm_blob is present in the firmware file, this
 			length will be less than the length of the whole file.
 
 
diff --git a/boards/arm/rp2040/raspberrypi-pico/Kconfig b/boards/arm/rp2040/raspberrypi-pico/Kconfig
index 45ebfcb330..df670914bb 100644
--- a/boards/arm/rp2040/raspberrypi-pico/Kconfig
+++ b/boards/arm/rp2040/raspberrypi-pico/Kconfig
@@ -5,32 +5,4 @@
 
 if ARCH_BOARD_RASPBERRYPI_PICO
 
-config RP2040_LCD_SPI_CH
-	int "RP2040 LCD SPI channel number"
-	default 0
-	range 0 1
-	depends on LCD
-	---help---
-		Select SPI channel number to use LCD display.
-
-config RP2040_ENC28J60_SPI_CH
-	int "ENC28J60 SPI channel number"
-	default 1
-	range 0 1
-	depends on ENC28J60
-	---help---
-		Select SPI channel number to use ENC28J60 ethernet.
-
-config RP2040_ENC28J60_INTR_GPIO
-	int "ENC28J60 interrupt GPIO pin assign"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
-config RP2040_ENC28J60_RESET_GPIO
-	int "ENC28J60 reset GPIO pin assign (optional)"
-	default -1
-	range -1 29
-	depends on ENC28J60
-
 endif


[nuttx] 02/03: boards/arm/rp2040: add gc9a01 drivers

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 9deeae0dee552733a5d5922b9b750095ed2709fa
Author: Peter Bee <bi...@xiaomi.com>
AuthorDate: Wed Jan 18 15:35:09 2023 +0800

    boards/arm/rp2040: add gc9a01 drivers
    
    Added gc9a01 drivers to rp2040
    
    Signed-off-by: Peter Bee <bi...@xiaomi.com>
---
 boards/arm/rp2040/common/src/Make.defs       |   4 +
 boards/arm/rp2040/common/src/rp2040_gc9a01.c | 156 +++++++++++++++++++++++++++
 boards/arm/rp2040/common/src/rp2040_spi.c    |   2 +-
 3 files changed, 161 insertions(+), 1 deletion(-)

diff --git a/boards/arm/rp2040/common/src/Make.defs b/boards/arm/rp2040/common/src/Make.defs
index d5dc2ca842..097386d9cb 100644
--- a/boards/arm/rp2040/common/src/Make.defs
+++ b/boards/arm/rp2040/common/src/Make.defs
@@ -59,6 +59,10 @@ ifeq ($(CONFIG_LCD_ST7735),y)
 CSRCS += rp2040_st7735.c
 endif
 
+ifeq ($(CONFIG_LCD_GC9A01),y)
+CSRCS += rp2040_gc9a01.c
+endif
+
 ifeq ($(CONFIG_USBMSC),y)
 CSRCS += rp2040_usbmsc.c
 endif
diff --git a/boards/arm/rp2040/common/src/rp2040_gc9a01.c b/boards/arm/rp2040/common/src/rp2040_gc9a01.c
new file mode 100644
index 0000000000..2abef5f2c4
--- /dev/null
+++ b/boards/arm/rp2040/common/src/rp2040_gc9a01.c
@@ -0,0 +1,156 @@
+/****************************************************************************
+ * boards/arm/rp2040/common/src/rp2040_gc9a01.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 <stdio.h>
+#include <stdbool.h>
+#include <debug.h>
+#include <errno.h>
+
+#include <nuttx/arch.h>
+#include <nuttx/board.h>
+#include <nuttx/spi/spi.h>
+#include <nuttx/lcd/lcd.h>
+#include <nuttx/lcd/gc9a01.h>
+
+#include "rp2040_spi.h"
+#include "rp2040_gpio.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#define LCD_SPI_PORTNO CONFIG_RP2040_LCD_SPI_CH
+
+#if LCD_SPI_PORTNO
+#define LCD_DC         CONFIG_RP2040_SPI1_RX_GPIO
+#define LCD_RST        12
+#define LCD_BL         25
+#else
+#define LCD_DC         CONFIG_RP2040_SPI0_RX_GPIO
+#endif
+
+#ifndef CONFIG_SPI_CMDDATA
+#  error "The GC9A01 driver requires CONFIG_SPI_CMDATA in the config"
+#endif
+
+/****************************************************************************
+ * Private Data
+ ****************************************************************************/
+
+static struct spi_dev_s *g_spidev;
+static struct lcd_dev_s *g_lcd = NULL;
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name:  board_lcd_initialize
+ *
+ * Description:
+ *   Initialize the LCD video hardware.  The initial state of the LCD is
+ *   fully initialized, display memory cleared, and the LCD ready to use, but
+ *   with the power setting at 0 (full off).
+ *
+ ****************************************************************************/
+
+int board_lcd_initialize(void)
+{
+  g_spidev = rp2040_spibus_initialize(LCD_SPI_PORTNO);
+  if (!g_spidev)
+    {
+      lcderr("ERROR: Failed to initialize SPI port %d\n", LCD_SPI_PORTNO);
+      return -ENODEV;
+    }
+
+  /* SPI RX is not used. Same pin is used as LCD Data/Command control */
+
+  rp2040_gpio_init(LCD_DC);
+  rp2040_gpio_setdir(LCD_DC, true);
+  rp2040_gpio_put(LCD_DC, true);
+
+#if LCD_SPI_PORTNO
+
+  /* Pull LCD_RESET high */
+
+  rp2040_gpio_init(LCD_RST);
+  rp2040_gpio_setdir(LCD_RST, true);
+  rp2040_gpio_put(LCD_RST, false);
+  up_mdelay(50);
+  rp2040_gpio_put(LCD_RST, true);
+  up_mdelay(50);
+
+  /* Set full brightness */
+
+  rp2040_gpio_init(LCD_BL);
+  rp2040_gpio_setdir(LCD_BL, true);
+  rp2040_gpio_put(LCD_BL, true);
+
+#endif
+
+  return OK;
+}
+
+/****************************************************************************
+ * Name:  board_lcd_getdev
+ *
+ * Description:
+ *   Return a a reference to the LCD object for the specified LCD.  This
+ *   allows support for multiple LCD devices.
+ *
+ ****************************************************************************/
+
+struct lcd_dev_s *board_lcd_getdev(int devno)
+{
+  g_lcd = gc9a01_lcdinitialize(g_spidev);
+  if (!g_lcd)
+    {
+      lcderr("ERROR: Failed to bind SPI port %d to LCD %d\n", LCD_SPI_PORTNO,
+      devno);
+    }
+  else
+    {
+      lcdinfo("SPI port %d bound to LCD %d\n", LCD_SPI_PORTNO, devno);
+      return g_lcd;
+    }
+
+  return NULL;
+}
+
+/****************************************************************************
+ * Name:  board_lcd_uninitialize
+ *
+ * Description:
+ *   Uninitialize the LCD support
+ *
+ ****************************************************************************/
+
+void board_lcd_uninitialize(void)
+{
+  /* Turn the display off */
+
+  g_lcd->setpower(g_lcd, 0);
+}
diff --git a/boards/arm/rp2040/common/src/rp2040_spi.c b/boards/arm/rp2040/common/src/rp2040_spi.c
index d6b39b192c..a2f0fea777 100644
--- a/boards/arm/rp2040/common/src/rp2040_spi.c
+++ b/boards/arm/rp2040/common/src/rp2040_spi.c
@@ -131,7 +131,7 @@ uint8_t rp2040_spi1status(struct spi_dev_s *dev, uint32_t devid)
 #ifdef CONFIG_SPI_CMDDATA
 int rp2040_spi1cmddata(struct spi_dev_s *dev, uint32_t devid, bool cmd)
 {
-#if defined (CONFIG_LCD_ST7789) || (CONFIG_LCD_ST7735)
+#if defined (CONFIG_LCD_ST7789) || defined (CONFIG_LCD_ST7735) || defined (CONFIG_LCD_GC9A01)
   if (devid == SPIDEV_DISPLAY(0))
     {
       /*  This is the Data/Command control pad which determines whether the


[nuttx] 03/03: boards/arm/rp2040: add waveshare rp2040 lcd 1.28

Posted by ac...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

acassis pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/nuttx.git

commit 85f57fb50cac0f573460840841710b788814087a
Author: Peter Bee <bi...@xiaomi.com>
AuthorDate: Wed Jan 18 14:37:05 2023 +0800

    boards/arm/rp2040: add waveshare rp2040 lcd 1.28
    
    Added board files and sample configs for waveshare-rp2040-lcd-1.28.
    https://www.waveshare.com/wiki/RP2040-LCD-1.28
    
    Signed-off-by: Peter Bee <bi...@xiaomi.com>
---
 boards/Kconfig                                     | 548 +++++++++++----------
 .../arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig   |   8 +
 .../rp2040/waveshare-rp2040-lcd-1.28/README.txt    | 191 +++++++
 .../configs/composite/defconfig                    |  72 +++
 .../waveshare-rp2040-lcd-1.28/configs/fb/defconfig |  63 +++
 .../configs/lvgl/defconfig                         |  73 +++
 .../configs/nsh-flash/defconfig                    |  49 ++
 .../configs/nsh/defconfig                          |  47 ++
 .../configs/nshsram/defconfig                      |  47 ++
 .../configs/smp/defconfig                          |  54 ++
 .../configs/spisd/defconfig                        |  58 +++
 .../configs/usbmsc/defconfig                       |  65 +++
 .../configs/usbnsh/defconfig                       |  51 ++
 .../waveshare-rp2040-lcd-1.28/include/board.h      | 116 +++++
 .../include/rp2040_i2cdev.h                        |  72 +++
 .../include/rp2040_i2sdev.h                        |  72 +++
 .../include/rp2040_spidev.h                        |  69 +++
 .../include/rp2040_spisd.h                         |  83 ++++
 .../waveshare-rp2040-lcd-1.28/scripts/Make.defs    |  45 ++
 .../scripts/waveshare-rp2040-lcd-1-28-flash.ld     | 118 +++++
 .../scripts/waveshare-rp2040-lcd-1-28-sram.ld      | 104 ++++
 .../rp2040/waveshare-rp2040-lcd-1.28/src/Make.defs |  33 ++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c |  78 +++
 .../src/rp2040_boardinitialize.c                   |  87 ++++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c |  63 +++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c    | 392 +++++++++++++++
 .../waveshare-rp2040-lcd-1.28/src/rp2040_pico.h    |  36 ++
 27 files changed, 2424 insertions(+), 270 deletions(-)

diff --git a/boards/Kconfig b/boards/Kconfig
index 8c0955c031..22c8830441 100644
--- a/boards/Kconfig
+++ b/boards/Kconfig
@@ -370,7 +370,7 @@ config ARCH_BOARD_ESP32S2_SAOLA_1
 	select ARCH_HAVE_IRQBUTTONS if ESP32S2_GPIO_IRQ
 	---help---
 		This is the ESP32-S2-Saola-1 board
-		
+
 config ARCH_BOARD_FRANZININHO_WIFI
 	bool "FRANZININHO WI-FI"
 	depends on ARCH_CHIP_ESP32S2WROVER
@@ -379,7 +379,7 @@ config ARCH_BOARD_FRANZININHO_WIFI
 	select ARCH_HAVE_IRQBUTTONS if ESP32S2_GPIO_IRQ
 	---help---
 		Franzininho Wi-Fi is a development board to evaluate the ESP32-S2 SoC
-		
+
 config ARCH_BOARD_ESP32S3_DEVKIT
 	bool "Espressif ESP32-S3 DevKit"
 	depends on ARCH_CHIP_ESP32S3WROOM1 || ARCH_CHIP_ESP32S3MINI1
@@ -1621,6 +1621,13 @@ config ARCH_BOARD_ADAFRUIT_QT_PY_RP2040
 		This is a port to the Adafruit QT Py RP2040 board.
 		Support is derived from Raspberry Pi Pico support.
 
+config ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28
+	bool "Waveshare RP2040 LCD 1.28 board"
+	depends on ARCH_CHIP_RP2040
+	---help---
+		This is a port to the Waveshare RP2040 LCD 1.28 board.
+		Support is derived from Raspberry Pi Pico support.
+
 config ARCH_BOARD_RX65N
 	bool "RX65N renesas board"
 	depends on ARCH_CHIP_R5F565NEDDFC
@@ -2693,274 +2700,275 @@ endif #ARCH_BOARD_CUSTOM
 
 config ARCH_BOARD
 	string
-	default "amber"                    if ARCH_BOARD_AMBER
-	default "arduino-mega2560"         if ARCH_BOARD_ARDUINO_MEGA2560
-	default "arduino-due"              if ARCH_BOARD_ARDUINO_DUE
-	default "arduino-m0"               if ARCH_BOARD_ARDUINO_M0
-	default "arty_a7"                  if ARCH_BOARD_ARTY_A7
-	default "avr32dev1"                if ARCH_BOARD_AVR32DEV1
-	default "axoloti"                  if ARCH_BOARD_AXOLOTI
-	default "bambino-200e"             if ARCH_BOARD_BAMBINO_200E
-	default "bl602evb"                 if ARCH_BOARD_BL602EVB
-	default "c5471evm"                 if ARCH_BOARD_C5471EVM
-	default "circuit-express"          if ARCH_BOARD_CIRCUIT_EXPRESS
-	default "clicker2-stm32"           if ARCH_BOARD_CLICKER2_STM32
-	default "cloudctrl"                if ARCH_BOARD_CLOUDCTRL
-	default "demo9s12ne64"             if ARCH_BOARD_DEMOS92S12NEC64
-	default "dk-tm4c129x"              if ARCH_BOARD_DK_TM4C129X
-	default "ea3131"                   if ARCH_BOARD_EA3131
-	default "ea3152"                   if ARCH_BOARD_EA3152
-	default "eagle100"                 if ARCH_BOARD_EAGLE100
-	default "efm32-g8xx-stk"           if ARCH_BOARD_EFM32G8XXSTK
-	default "efm32gg-stk3700"          if ARCH_BOARD_EFM32GG_STK3700
-	default "ekk-lm3s9b96"             if ARCH_BOARD_EKKLM3S9B96
-	default "emw3162"                  if ARCH_BOARD_EMW3162
-	default "quickfeather"             if ARCH_BOARD_QUICKFEATHER
-	default "esp32-devkitc"            if ARCH_BOARD_ESP32_DEVKITC
-	default "ttgo_eink5_v2"            if ARCH_BOARD_TTGO_T5V2_ESP32
-	default "esp32-ethernet-kit"       if ARCH_BOARD_ESP32_ETHERNETKIT
-	default "esp32-lyrat"              if ARCH_BOARD_ESP32_LYRAT
-	default "esp32-sparrow-kit"        if ARCH_BOARD_ESP32_SPARROWKIT
-	default "esp32-wrover-kit"         if ARCH_BOARD_ESP32_WROVERKIT
-	default "esp32c3-devkit"           if ARCH_BOARD_ESP32C3_DEVKIT
-	default "esp32c3-devkit-rust-1"    if ARCH_BOARD_ESP32C3_DEVKIT_RUST1
-	default "esp32s2-kaluga-1"         if ARCH_BOARD_ESP32S2_KALUGA_1
-	default "esp32s2-saola-1"          if ARCH_BOARD_ESP32S2_SAOLA_1
-	default "franzininho-wifi"         if ARCH_BOARD_FRANZININHO_WIFI
-	default "esp32s3-devkit"           if ARCH_BOARD_ESP32S3_DEVKIT
-	default "esp32s3-eye"              if ARCH_BOARD_ESP32S3_EYE
-	default "et-stm32-stamp"           if ARCH_BOARD_ET_STM32_STAMP
-	default "tlsr8278adk80d"           if ARCH_BOARD_TLSR8278ADK80D
-	default "ez80f910200kitg"          if ARCH_BOARD_EZ80F910200KITG
-	default "ez80f910200zco"           if ARCH_BOARD_EZ80F910200ZCO
-	default "fire-stm32v2"             if ARCH_BOARD_FIRE_STM32
-	default "chipkit-wifire"           if ARCH_BOARD_CHIPKIT_WIFIRE
-	default "flipnclick-pic32mz"       if ARCH_BOARD_FLIPNCLICK_PIC32MZ
-	default "flipnclick-sam3x"         if ARCH_BOARD_FLIPNCLICK_SAM3X
-	default "freedom-k28f"             if ARCH_BOARD_FREEDOM_K28F
-	default "freedom-k64f"             if ARCH_BOARD_FREEDOM_K64F
-	default "freedom-k66f"             if ARCH_BOARD_FREEDOM_K66F
-	default "freedom-kl25z"            if ARCH_BOARD_FREEDOM_KL25Z
-	default "freedom-kl26z"            if ARCH_BOARD_FREEDOM_KL26Z
-	default "gd32f450zk-eval"          if ARCH_BOARD_GD32F450ZK_EVAL
-	default "hifive1-revb"             if ARCH_BOARD_HIFIVE1_REVB
-	default "hymini-stm32v"            if ARCH_BOARD_HYMINI_STM32V
-	default "imxrt1020-evk"            if ARCH_BOARD_IMXRT1020_EVK
-	default "imxrt1050-evk"            if ARCH_BOARD_IMXRT1050_EVK
-	default "imxrt1060-evk"            if ARCH_BOARD_IMXRT1060_EVK
-	default "imxrt1064-evk"            if ARCH_BOARD_IMXRT1064_EVK
-	default "kwikstik-k40"             if ARCH_BOARD_KWIKSTIK_K40
-	default "launchxl-cc1310"          if ARCH_BOARD_LAUNCHXL_CC1310
-	default "launchxl-cc1312r1"        if ARCH_BOARD_LAUNCHXL_CC1312R1
-	default "launchxl-tms57004"        if ARCH_BOARD_LAUNCHXL_TMS57004
-	default "lc823450-xgevk"           if ARCH_BOARD_LC823450_XGEVK
-	default "lincoln60"                if ARCH_BOARD_LINCOLN60
-	default "lm3s6432-s2e"             if ARCH_BOARD_LM3S6432S2E
-	default "lm3s6965-ek"              if ARCH_BOARD_LM3S6965EK
-	default "lm3s8962-ek"              if ARCH_BOARD_LM3S8962EK
-	default "lm4f120-launchpad"        if ARCH_BOARD_LM4F120_LAUNCHPAD
-	default "lpc4088-devkit"           if ARCH_BOARD_LPC4088_DEVKIT
-	default "lpc4088-quickstart"       if ARCH_BOARD_LPC4088_QUICKSTART
-	default "lpc4330-xplorer"          if ARCH_BOARD_LPC4330_XPLORER
-	default "lpc4337-ws"               if ARCH_BOARD_LPC4337_WS
-	default "lpc4357-evb"              if ARCH_BOARD_LPC4357_EVB
-	default "lpc4370-link2"            if ARCH_BOARD_LPC4370_LINK2
-	default "lpcxpresso-lpc1768"       if ARCH_BOARD_LPCXPRESSO
-	default "lpcxpresso-lpc54628"      if ARCH_BOARD_LPCXPRESSO_LPC54628
-	default "lx_cpu"                   if ARCH_BOARD_LX_CPU
-	default "maix-bit"                 if ARCH_BOARD_MAIX_BIT
-	default "smartl-c906"              if ARCH_BOARD_SMARTL_C906
-	default "icicle"                   if ARCH_BOARD_ICICLE_MPFS
-	default "m100pfsevp"               if ARCH_BOARD_M100PFSEVP_MPFS
-	default "maple"                    if ARCH_BOARD_MAPLE
-	default "makerlisp"                if ARCH_BOARD_MAKERLISP
-	default "max32660-evsys"           if ARCH_BOARD_MAX32660_EVSYS
-	default "mbed"                     if ARCH_BOARD_MBED
-	default "mcb1700"                  if ARCH_BOARD_MCB1700
-	default "mcu123-lpc214x"           if ARCH_BOARD_MCU123_LPC214X
-	default "metro-m4"                 if ARCH_BOARD_METRO_M4
-	default "micropendous3"            if ARCH_BOARD_MICROPENDOUS3
-	default "mirtoo"                   if ARCH_BOARD_MIRTOO
-	default "misoc"                    if ARCH_BOARD_MISOC_QEMU || ARCH_BOARD_MISOC_VERILATOR
-	default "moteino-mega"             if ARCH_BOARD_MOTEINO_MEGA
-	default "ne64badge"                if ARCH_BOARD_NE64BADGE
-	default "nrf52-feather"            if ARCH_BOARD_NRF52_FEATHER
-	default "nrf52832-sparkfun"        if ARCH_BOARD_NRF52832_SPARKFUN
-	default "nrf52832-mdk"             if ARCH_BOARD_NRF52832_MDK
-	default "nrf52832-dk"              if ARCH_BOARD_NRF52832_DK
-	default "nrf52840-dk"              if ARCH_BOARD_NRF52840_DK
-	default "nrf52840-dongle"          if ARCH_BOARD_NRF52840_DONGLE
-	default "nrf5340-audio-dk"         if ARCH_BOARD_NRF5340_AUDIO_DK
-	default "ntosd-dm320"              if ARCH_BOARD_NTOSD_DM320
-	default "nucleo-144"               if ARCH_BOARD_NUCLEO_144
-	default "nucleo-f072rb"            if ARCH_BOARD_NUCLEO_F072RB
-	default "nucleo-f091rc"            if ARCH_BOARD_NUCLEO_F091RC
-	default "nucleo-f103rb"            if ARCH_BOARD_NUCLEO_F103RB
-	default "nucleo-f207zg"            if ARCH_BOARD_NUCLEO_F207ZG
-	default "nucleo-f302r8"            if ARCH_BOARD_NUCLEO_F302R8
-	default "nucleo-f303re"            if ARCH_BOARD_NUCLEO_F303RE
-	default "nucleo-f303ze"            if ARCH_BOARD_NUCLEO_F303ZE
-	default "nucleo-f334r8"            if ARCH_BOARD_NUCLEO_F334R8
-	default "nucleo-f4x1re"            if ARCH_BOARD_NUCLEO_F401RE || ARCH_BOARD_NUCLEO_F411RE
-	default "nucleo-f429zi"            if ARCH_BOARD_NUCLEO_F429ZI
-	default "nucleo-f446re"            if ARCH_BOARD_NUCLEO_F446RE
-	default "nucleo-f410rb"            if ARCH_BOARD_NUCLEO_F410RB
-	default "nucleo-f412zg"            if ARCH_BOARD_NUCLEO_F412ZG
-	default "stm32g071b-disco"         if ARCH_BOARD_STM32G071B_DISCO
-	default "nucleo-g070rb"            if ARCH_BOARD_NUCLEO_G070RB
-	default "nucleo-g071rb"            if ARCH_BOARD_NUCLEO_G071RB
-	default "nucleo-h743zi"            if ARCH_BOARD_NUCLEO_H743ZI
-	default "nucleo-h743zi2"           if ARCH_BOARD_NUCLEO_H743ZI2
-	default "nucleo-l073rz"            if ARCH_BOARD_NUCLEO_L073RZ
-	default "nucleo-l152re"            if ARCH_BOARD_NUCLEO_L152RE
-	default "nucleo-l432kc"            if ARCH_BOARD_NUCLEO_L432KC
-	default "nucleo-l452re"            if ARCH_BOARD_NUCLEO_L452RE
-	default "nucleo-l476rg"            if ARCH_BOARD_NUCLEO_L476RG
-	default "steval-stlcs01v1"         if ARCH_BOARD_STEVAL_STLCS01V1
-	default "nucleo-l496zg"            if ARCH_BOARD_NUCLEO_L496ZG
-	default "nucleo-l552ze"            if ARCH_BOARD_NUCLEO_L552ZE
-	default "flipperzero"              if ARCH_BOARD_FLIPPERZERO
-	default "nucleo-wb55rg"            if ARCH_BOARD_NUCLEO_WB55RG
-	default "nucleo-wl55jc"            if ARCH_BOARD_NUCLEO_WL55JC
-	default "nutiny-nuc120"            if ARCH_BOARD_NUTINY_NUC120
-	default "olimex-efm32g880f128-stk" if ARCH_BOARD_OLIMEX_EFM32G880F128_STK
-	default "olimex-lpc1766stk"        if ARCH_BOARD_LPC1766STK
-	default "olimex-lpc2378"           if ARCH_BOARD_OLIMEXLPC2378
-	default "olimex-lpc-h3131"         if ARCH_BOARD_OLIMEX_LPC_H3131
-	default "olimex-stm32-h405"        if ARCH_BOARD_OLIMEX_STM32H405
-	default "olimex-stm32-h407"        if ARCH_BOARD_OLIMEX_STM32H407
-	default "olimex-stm32-e407"        if ARCH_BOARD_OLIMEX_STM32E407
-	default "olimex-stm32-p107"        if ARCH_BOARD_OLIMEX_STM32P107
-	default "olimex-stm32-p207"        if ARCH_BOARD_OLIMEX_STM32P207
-	default "olimex-stm32-p407"        if ARCH_BOARD_OLIMEX_STM32P407
-	default "olimex-strp711"           if ARCH_BOARD_OLIMEX_STRP711
-	default "olimexino-stm32"          if ARCH_BOARD_OLIMEXINO_STM32
-	default "omnibusf4"                if ARCH_BOARD_OMNIBUSF4
-	default "open1788"                 if ARCH_BOARD_OPEN1788
-	default "or1k"                     if ARCH_BOARD_OR1K
-	default "p112"                     if ARCH_BOARD_P112
-	default "pcduino-a10"              if ARCH_BOARD_PCDUINO_A10
-	default "beaglebone-black"         if ARCH_BOARD_BEAGLEBONE_BLACK
-	default "pic32mx-starterkit"       if ARCH_BOARD_PIC32MX_STARTERKIT
-	default "pic32mx7mmb"              if ARCH_BOARD_PIC32MX7MMB
-	default "pic32mz-starterkit"       if ARCH_BOARD_PIC32MZ_STARTERKIT
-	default "qemu-i486"                if ARCH_BOARD_QEMU_I486
-	default "intel64-qemu"             if ARCH_BOARD_INTEL64_QEMU
-	default "raspberrypi-pico"         if ARCH_BOARD_RASPBERRYPI_PICO
-	default "raspberrypi-pico-w"       if ARCH_BOARD_RASPBERRYPI_PICO_W
-	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
-	default "rx65n-grrose"             if ARCH_BOARD_RX65N_GRROSE
-	default "s32k118evb"               if ARCH_BOARD_S32K118EVB
-	default "s32k144evb"               if ARCH_BOARD_S32K144EVB
-	default "rddrone-bms772"           if ARCH_BOARD_RDDRONE_BMS772
-	default "s32k146evb"               if ARCH_BOARD_S32K146EVB
-	default "ucans32k146"              if ARCH_BOARD_UCANS32K146
-	default "s32k148evb"               if ARCH_BOARD_S32K148EVB
-	default "s32k344evb"               if ARCH_BOARD_S32K344EVB
-	default "mr-canhubk3"              if ARCH_BOARD_MR_CANHUBK3
-	default "rv32m1-vega"              if ARCH_BOARD_RV32M1_VEGA
-	default "rv-virt"                  if ARCH_BOARD_QEMU_RV_VIRT
-	default "sabre-6quad"              if ARCH_BOARD_SABRE_6QUAD
-	default "qemu-armv8a"              if ARCH_BOARD_QEMU_ARMV8A
-	default "pinephone"                if ARCH_BOARD_PINEPHONE
-	default "sama5d2-xult"             if ARCH_BOARD_SAMA5D2_XULT
-	default "giant-board"              if ARCH_BOARD_GIANT_BOARD
-	default "jupiter-nano"             if ARCH_BOARD_JUPITER_NANO
-	default "sama5d3x-ek"              if ARCH_BOARD_SAMA5D3X_EK
-	default "sama5d3-xplained"         if ARCH_BOARD_SAMA5D3_XPLAINED
-	default "sama5d4-ek"               if ARCH_BOARD_SAMA5D4_EK
-	default "samd20-xplained"          if ARCH_BOARD_SAMD20_XPLAINED
-	default "samd21-xplained"          if ARCH_BOARD_SAMD21_XPLAINED
-	default "same54-xplained-pro"      if ARCH_BOARD_SAME54_XPLAINED_PRO
-	default "saml21-xplained"          if ARCH_BOARD_SAML21_XPLAINED
-	default "sam3u-ek"                 if ARCH_BOARD_SAM3UEK
-	default "sam4cmp-db"               if ARCH_BOARD_SAM4CMP_DB
-	default "sam4e-ek"                 if ARCH_BOARD_SAM4EEK
-	default "sam4l-xplained"           if ARCH_BOARD_SAM4L_XPLAINED
-	default "sam4s-xplained"           if ARCH_BOARD_SAM4S_XPLAINED
-	default "sam4s-xplained-pro"       if ARCH_BOARD_SAM4S_XPLAINED_PRO
-	default "same70-qmtech"            if ARCH_BOARD_SAME70_QMTECH
-	default "same70-xplained"          if ARCH_BOARD_SAME70_XPLAINED
-	default "samv71-xult"              if ARCH_BOARD_SAMV71_XULT
-	default "shenzhou"                 if ARCH_BOARD_SHENZHOU
-	default "skp16c26"                 if ARCH_BOARD_SKP16C26
-	default "photon"                   if ARCH_BOARD_PHOTON
-	default "pnev5180b"                if ARCH_BOARD_PNEV5180B
-	default "stm32butterfly2"          if ARCH_BOARD_STM32_BUTTERFLY2
-	default "stm32_tiny"               if ARCH_BOARD_STM32_TINY
-	default "stm32l0538-disco"         if ARCH_BOARD_STM32L0538_DISCO
-	default "stm32f051-discovery"      if ARCH_BOARD_STM32F051_DISCOVERY
-	default "stm32f072-discovery"      if ARCH_BOARD_STM32F072_DISCOVERY
-	default "stm32f103-minimum"        if ARCH_BOARD_STM32F103_MINIMUM
-	default "stm32f411-minimum"        if ARCH_BOARD_STM32F411_MINIMUM
-	default "stm3210e-eval"            if ARCH_BOARD_STM3210E_EVAL
-	default "stm3220g-eval"            if ARCH_BOARD_STM3220G_EVAL
-	default "stm3240g-eval"            if ARCH_BOARD_STM3240G_EVAL
-	default "stm32f3discovery"         if ARCH_BOARD_STM32F3_DISCOVERY
-	default "stm32f334-disco"          if ARCH_BOARD_STM32F334_DISCO
-	default "stm32f4discovery"         if ARCH_BOARD_STM32F4_DISCOVERY
-	default "stm32f411e-disco"         if ARCH_BOARD_STM32F411E_DISCO
-	default "stm32f429i-disco"         if ARCH_BOARD_STM32F429I_DISCO
-	default "stm32f746g-disco"         if ARCH_BOARD_STM32F746G_DISCO
-	default "stm32f769i-disco"         if ARCH_BOARD_STM32F769I_DISCO
-	default "steval-eth001v1"          if ARCH_BOARD_STEVAL_ETH001V1
-	default "stm32h747i-disco"         if ARCH_BOARD_STM32H747I_DISCO
-	default "stm32f746-ws"             if ARCH_BOARD_STM32F746_WS
-	default "b-g474e-dpow1"            if ARCH_BOARD_B_G474E_DPOW1
-	default "b-g431b-esc1"             if ARCH_BOARD_B_G431B_ESC1
-	default "nucleo-g431kb"            if ARCH_BOARD_NUCLEO_G431KB
-	default "nucleo-g431rb"            if ARCH_BOARD_NUCLEO_G431RB
-	default "nucleo-g474re"            if ARCH_BOARD_NUCLEO_G474RE
-	default "b-l072z-lrwan1"           if ARCH_BOARD_B_L072Z_LRWAN1
-	default "b-l475e-iot01a"           if ARCH_BOARD_B_L475E_IOT01A
-	default "b-u585i-iot02a"           if ARCH_BOARD_B_U585I_IOT02A
-	default "stm32l476vg-disco"        if ARCH_BOARD_STM32L476VG_DISCO
-	default "stm32l476-mdk"            if ARCH_BOARD_STM32L476_MDK
-	default "stm32l4r9ai-disco"        if ARCH_BOARD_STM32L4R9AI_DISCO
-	default "stm32l562e-dk"            if ARCH_BOARD_STM32L562E_DK
-	default "stm32ldiscovery"          if ARCH_BOARD_STM32L_DISCOVERY
-	default "stm32vldiscovery"         if ARCH_BOARD_STM32VL_DISCOVERY
-	default "mikroe-stm32f4"           if ARCH_BOARD_MIKROE_STM32F4
-	default "sure-pic32mx"             if ARCH_BOARD_SUREPIC32MX
-	default "teensy-2.0"               if ARCH_BOARD_TEENSY_20
-	default "teensy-3.x"               if ARCH_BOARD_TEENSY_3X
-	default "teensy-4.x"               if ARCH_BOARD_TEENSY_4X
-	default "teensy-lc"                if ARCH_BOARD_TEENSY_LC
-	default "tm4c123g-launchpad"       if ARCH_BOARD_TM4C123G_LAUNCHPAD
-	default "tm4c1294-launchpad"       if ARCH_BOARD_TM4C1294_LAUNCHPAD
-	default "tm4c129e-launchpad"       if ARCH_BOARD_TM4C129E_LAUNCHPAD
-	default "tms570ls31x-usb-kit"      if ARCH_BOARD_TMS570LS31X_USB_KIT
-	default "lilygo_tbeam_lora_gps"    if ARCH_BOARD_LILYGO_TBEAM_LORA_GPS
-	default "ttgo_lora_esp32"          if ARCH_BOARD_TTGO_LORA_ESP32
-	default "ttgo_t_display_esp32"     if ARCH_BOARD_TTGO_T_DISPLAY_ESP32
-	default "twr-k60n512"              if ARCH_BOARD_TWR_K60N512
-	default "twr-k64f120m"             if ARCH_BOARD_TWR_K64F120M
-	default "u-blox-c027"              if ARCH_BOARD_U_BLOX_C027
-	default "ubw32"                    if ARCH_BOARD_UBW32
-	default "us7032evb1"               if ARCH_BOARD_US7032EVB1
-	default "viewtool-stm32f107"       if ARCH_BOARD_VIEWTOOL_STM32F107
-	default "xmc4500-relax"            if ARCH_BOARD_XMC4500RELAX
-	default "xmc4700-relax"            if ARCH_BOARD_XMC4700RELAX
-	default "z16f2800100zcog"          if ARCH_BOARD_Z16F2800100ZCOG
-	default "z20x"                     if ARCH_BOARD_Z20X
-	default "z80sim"                   if ARCH_BOARD_Z80SIM
-	default "z8encore000zco"           if ARCH_BOARD_Z8ENCORE000ZCO
-	default "z8f64200100kit"           if ARCH_BOARD_Z8F64200100KIT
-	default "zp214xpa"                 if ARCH_BOARD_ZP214XPA
-	default "zkit-arm-1769"            if ARCH_BOARD_ZKITARM
-	default "phy6222"                  if ARCH_BOARD_PHY6222
-	default "sim"                      if ARCH_BOARD_SIM
-	default "moxa"                     if ARCH_BOARD_MOXA
-	default "spresense"                if ARCH_BOARD_SPRESENSE
-	default "xx3803"                   if ARCH_BOARD_XX3803
-	default "xx3823"                   if ARCH_BOARD_XX3823
-	default "s698pm-dkit"              if ARCH_BOARD_S698PM_DKIT
+	default "amber"                     if ARCH_BOARD_AMBER
+	default "arduino-mega2560"          if ARCH_BOARD_ARDUINO_MEGA2560
+	default "arduino-due"               if ARCH_BOARD_ARDUINO_DUE
+	default "arduino-m0"                if ARCH_BOARD_ARDUINO_M0
+	default "arty_a7"                   if ARCH_BOARD_ARTY_A7
+	default "avr32dev1"                 if ARCH_BOARD_AVR32DEV1
+	default "axoloti"                   if ARCH_BOARD_AXOLOTI
+	default "bambino-200e"              if ARCH_BOARD_BAMBINO_200E
+	default "bl602evb"                  if ARCH_BOARD_BL602EVB
+	default "c5471evm"                  if ARCH_BOARD_C5471EVM
+	default "circuit-express"           if ARCH_BOARD_CIRCUIT_EXPRESS
+	default "clicker2-stm32"            if ARCH_BOARD_CLICKER2_STM32
+	default "cloudctrl"                 if ARCH_BOARD_CLOUDCTRL
+	default "demo9s12ne64"              if ARCH_BOARD_DEMOS92S12NEC64
+	default "dk-tm4c129x"               if ARCH_BOARD_DK_TM4C129X
+	default "ea3131"                    if ARCH_BOARD_EA3131
+	default "ea3152"                    if ARCH_BOARD_EA3152
+	default "eagle100"                  if ARCH_BOARD_EAGLE100
+	default "efm32-g8xx-stk"            if ARCH_BOARD_EFM32G8XXSTK
+	default "efm32gg-stk3700"           if ARCH_BOARD_EFM32GG_STK3700
+	default "ekk-lm3s9b96"              if ARCH_BOARD_EKKLM3S9B96
+	default "emw3162"                   if ARCH_BOARD_EMW3162
+	default "quickfeather"              if ARCH_BOARD_QUICKFEATHER
+	default "esp32-devkitc"             if ARCH_BOARD_ESP32_DEVKITC
+	default "ttgo_eink5_v2"             if ARCH_BOARD_TTGO_T5V2_ESP32
+	default "esp32-ethernet-kit"        if ARCH_BOARD_ESP32_ETHERNETKIT
+	default "esp32-lyrat"               if ARCH_BOARD_ESP32_LYRAT
+	default "esp32-sparrow-kit"         if ARCH_BOARD_ESP32_SPARROWKIT
+	default "esp32-wrover-kit"          if ARCH_BOARD_ESP32_WROVERKIT
+	default "esp32c3-devkit"            if ARCH_BOARD_ESP32C3_DEVKIT
+	default "esp32c3-devkit-rust-1"     if ARCH_BOARD_ESP32C3_DEVKIT_RUST1
+	default "esp32s2-kaluga-1"          if ARCH_BOARD_ESP32S2_KALUGA_1
+	default "esp32s2-saola-1"           if ARCH_BOARD_ESP32S2_SAOLA_1
+	default "franzininho-wifi"          if ARCH_BOARD_FRANZININHO_WIFI
+	default "esp32s3-devkit"            if ARCH_BOARD_ESP32S3_DEVKIT
+	default "esp32s3-eye"               if ARCH_BOARD_ESP32S3_EYE
+	default "et-stm32-stamp"            if ARCH_BOARD_ET_STM32_STAMP
+	default "tlsr8278adk80d"            if ARCH_BOARD_TLSR8278ADK80D
+	default "ez80f910200kitg"           if ARCH_BOARD_EZ80F910200KITG
+	default "ez80f910200zco"            if ARCH_BOARD_EZ80F910200ZCO
+	default "fire-stm32v2"              if ARCH_BOARD_FIRE_STM32
+	default "chipkit-wifire"            if ARCH_BOARD_CHIPKIT_WIFIRE
+	default "flipnclick-pic32mz"        if ARCH_BOARD_FLIPNCLICK_PIC32MZ
+	default "flipnclick-sam3x"          if ARCH_BOARD_FLIPNCLICK_SAM3X
+	default "freedom-k28f"              if ARCH_BOARD_FREEDOM_K28F
+	default "freedom-k64f"              if ARCH_BOARD_FREEDOM_K64F
+	default "freedom-k66f"              if ARCH_BOARD_FREEDOM_K66F
+	default "freedom-kl25z"             if ARCH_BOARD_FREEDOM_KL25Z
+	default "freedom-kl26z"             if ARCH_BOARD_FREEDOM_KL26Z
+	default "gd32f450zk-eval"           if ARCH_BOARD_GD32F450ZK_EVAL
+	default "hifive1-revb"              if ARCH_BOARD_HIFIVE1_REVB
+	default "hymini-stm32v"             if ARCH_BOARD_HYMINI_STM32V
+	default "imxrt1020-evk"             if ARCH_BOARD_IMXRT1020_EVK
+	default "imxrt1050-evk"             if ARCH_BOARD_IMXRT1050_EVK
+	default "imxrt1060-evk"             if ARCH_BOARD_IMXRT1060_EVK
+	default "imxrt1064-evk"             if ARCH_BOARD_IMXRT1064_EVK
+	default "kwikstik-k40"              if ARCH_BOARD_KWIKSTIK_K40
+	default "launchxl-cc1310"           if ARCH_BOARD_LAUNCHXL_CC1310
+	default "launchxl-cc1312r1"         if ARCH_BOARD_LAUNCHXL_CC1312R1
+	default "launchxl-tms57004"         if ARCH_BOARD_LAUNCHXL_TMS57004
+	default "lc823450-xgevk"            if ARCH_BOARD_LC823450_XGEVK
+	default "lincoln60"                 if ARCH_BOARD_LINCOLN60
+	default "lm3s6432-s2e"              if ARCH_BOARD_LM3S6432S2E
+	default "lm3s6965-ek"               if ARCH_BOARD_LM3S6965EK
+	default "lm3s8962-ek"               if ARCH_BOARD_LM3S8962EK
+	default "lm4f120-launchpad"         if ARCH_BOARD_LM4F120_LAUNCHPAD
+	default "lpc4088-devkit"            if ARCH_BOARD_LPC4088_DEVKIT
+	default "lpc4088-quickstart"        if ARCH_BOARD_LPC4088_QUICKSTART
+	default "lpc4330-xplorer"           if ARCH_BOARD_LPC4330_XPLORER
+	default "lpc4337-ws"                if ARCH_BOARD_LPC4337_WS
+	default "lpc4357-evb"               if ARCH_BOARD_LPC4357_EVB
+	default "lpc4370-link2"             if ARCH_BOARD_LPC4370_LINK2
+	default "lpcxpresso-lpc1768"        if ARCH_BOARD_LPCXPRESSO
+	default "lpcxpresso-lpc54628"       if ARCH_BOARD_LPCXPRESSO_LPC54628
+	default "lx_cpu"                    if ARCH_BOARD_LX_CPU
+	default "maix-bit"                  if ARCH_BOARD_MAIX_BIT
+	default "smartl-c906"               if ARCH_BOARD_SMARTL_C906
+	default "icicle"                    if ARCH_BOARD_ICICLE_MPFS
+	default "m100pfsevp"                if ARCH_BOARD_M100PFSEVP_MPFS
+	default "maple"                     if ARCH_BOARD_MAPLE
+	default "makerlisp"                 if ARCH_BOARD_MAKERLISP
+	default "max32660-evsys"            if ARCH_BOARD_MAX32660_EVSYS
+	default "mbed"                      if ARCH_BOARD_MBED
+	default "mcb1700"                   if ARCH_BOARD_MCB1700
+	default "mcu123-lpc214x"            if ARCH_BOARD_MCU123_LPC214X
+	default "metro-m4"                  if ARCH_BOARD_METRO_M4
+	default "micropendous3"             if ARCH_BOARD_MICROPENDOUS3
+	default "mirtoo"                    if ARCH_BOARD_MIRTOO
+	default "misoc"                     if ARCH_BOARD_MISOC_QEMU || ARCH_BOARD_MISOC_VERILATOR
+	default "moteino-mega"              if ARCH_BOARD_MOTEINO_MEGA
+	default "ne64badge"                 if ARCH_BOARD_NE64BADGE
+	default "nrf52-feather"             if ARCH_BOARD_NRF52_FEATHER
+	default "nrf52832-sparkfun"         if ARCH_BOARD_NRF52832_SPARKFUN
+	default "nrf52832-mdk"              if ARCH_BOARD_NRF52832_MDK
+	default "nrf52832-dk"               if ARCH_BOARD_NRF52832_DK
+	default "nrf52840-dk"               if ARCH_BOARD_NRF52840_DK
+	default "nrf52840-dongle"           if ARCH_BOARD_NRF52840_DONGLE
+	default "nrf5340-audio-dk"          if ARCH_BOARD_NRF5340_AUDIO_DK
+	default "ntosd-dm320"               if ARCH_BOARD_NTOSD_DM320
+	default "nucleo-144"                if ARCH_BOARD_NUCLEO_144
+	default "nucleo-f072rb"             if ARCH_BOARD_NUCLEO_F072RB
+	default "nucleo-f091rc"             if ARCH_BOARD_NUCLEO_F091RC
+	default "nucleo-f103rb"             if ARCH_BOARD_NUCLEO_F103RB
+	default "nucleo-f207zg"             if ARCH_BOARD_NUCLEO_F207ZG
+	default "nucleo-f302r8"             if ARCH_BOARD_NUCLEO_F302R8
+	default "nucleo-f303re"             if ARCH_BOARD_NUCLEO_F303RE
+	default "nucleo-f303ze"             if ARCH_BOARD_NUCLEO_F303ZE
+	default "nucleo-f334r8"             if ARCH_BOARD_NUCLEO_F334R8
+	default "nucleo-f4x1re"             if ARCH_BOARD_NUCLEO_F401RE || ARCH_BOARD_NUCLEO_F411RE
+	default "nucleo-f429zi"             if ARCH_BOARD_NUCLEO_F429ZI
+	default "nucleo-f446re"             if ARCH_BOARD_NUCLEO_F446RE
+	default "nucleo-f410rb"             if ARCH_BOARD_NUCLEO_F410RB
+	default "nucleo-f412zg"             if ARCH_BOARD_NUCLEO_F412ZG
+	default "stm32g071b-disco"          if ARCH_BOARD_STM32G071B_DISCO
+	default "nucleo-g070rb"             if ARCH_BOARD_NUCLEO_G070RB
+	default "nucleo-g071rb"             if ARCH_BOARD_NUCLEO_G071RB
+	default "nucleo-h743zi"             if ARCH_BOARD_NUCLEO_H743ZI
+	default "nucleo-h743zi2"            if ARCH_BOARD_NUCLEO_H743ZI2
+	default "nucleo-l073rz"             if ARCH_BOARD_NUCLEO_L073RZ
+	default "nucleo-l152re"             if ARCH_BOARD_NUCLEO_L152RE
+	default "nucleo-l432kc"             if ARCH_BOARD_NUCLEO_L432KC
+	default "nucleo-l452re"             if ARCH_BOARD_NUCLEO_L452RE
+	default "nucleo-l476rg"             if ARCH_BOARD_NUCLEO_L476RG
+	default "steval-stlcs01v1"          if ARCH_BOARD_STEVAL_STLCS01V1
+	default "nucleo-l496zg"             if ARCH_BOARD_NUCLEO_L496ZG
+	default "nucleo-l552ze"             if ARCH_BOARD_NUCLEO_L552ZE
+	default "flipperzero"               if ARCH_BOARD_FLIPPERZERO
+	default "nucleo-wb55rg"             if ARCH_BOARD_NUCLEO_WB55RG
+	default "nucleo-wl55jc"             if ARCH_BOARD_NUCLEO_WL55JC
+	default "nutiny-nuc120"             if ARCH_BOARD_NUTINY_NUC120
+	default "olimex-efm32g880f128-stk"  if ARCH_BOARD_OLIMEX_EFM32G880F128_STK
+	default "olimex-lpc1766stk"         if ARCH_BOARD_LPC1766STK
+	default "olimex-lpc2378"            if ARCH_BOARD_OLIMEXLPC2378
+	default "olimex-lpc-h3131"          if ARCH_BOARD_OLIMEX_LPC_H3131
+	default "olimex-stm32-h405"         if ARCH_BOARD_OLIMEX_STM32H405
+	default "olimex-stm32-h407"         if ARCH_BOARD_OLIMEX_STM32H407
+	default "olimex-stm32-e407"         if ARCH_BOARD_OLIMEX_STM32E407
+	default "olimex-stm32-p107"         if ARCH_BOARD_OLIMEX_STM32P107
+	default "olimex-stm32-p207"         if ARCH_BOARD_OLIMEX_STM32P207
+	default "olimex-stm32-p407"         if ARCH_BOARD_OLIMEX_STM32P407
+	default "olimex-strp711"            if ARCH_BOARD_OLIMEX_STRP711
+	default "olimexino-stm32"           if ARCH_BOARD_OLIMEXINO_STM32
+	default "omnibusf4"                 if ARCH_BOARD_OMNIBUSF4
+	default "open1788"                  if ARCH_BOARD_OPEN1788
+	default "or1k"                      if ARCH_BOARD_OR1K
+	default "p112"                      if ARCH_BOARD_P112
+	default "pcduino-a10"               if ARCH_BOARD_PCDUINO_A10
+	default "beaglebone-black"          if ARCH_BOARD_BEAGLEBONE_BLACK
+	default "pic32mx-starterkit"        if ARCH_BOARD_PIC32MX_STARTERKIT
+	default "pic32mx7mmb"               if ARCH_BOARD_PIC32MX7MMB
+	default "pic32mz-starterkit"        if ARCH_BOARD_PIC32MZ_STARTERKIT
+	default "qemu-i486"                 if ARCH_BOARD_QEMU_I486
+	default "intel64-qemu"              if ARCH_BOARD_INTEL64_QEMU
+	default "raspberrypi-pico"          if ARCH_BOARD_RASPBERRYPI_PICO
+	default "raspberrypi-pico-w"        if ARCH_BOARD_RASPBERRYPI_PICO_W
+	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 "waveshare-rp2040-lcd-1.28" if ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28
+	default "rx65n"                     if ARCH_BOARD_RX65N
+	default "rx65n-rsk1mb"              if ARCH_BOARD_RX65N_RSK1MB
+	default "rx65n-rsk2mb"              if ARCH_BOARD_RX65N_RSK2MB
+	default "rx65n-grrose"              if ARCH_BOARD_RX65N_GRROSE
+	default "s32k118evb"                if ARCH_BOARD_S32K118EVB
+	default "s32k144evb"                if ARCH_BOARD_S32K144EVB
+	default "rddrone-bms772"            if ARCH_BOARD_RDDRONE_BMS772
+	default "s32k146evb"                if ARCH_BOARD_S32K146EVB
+	default "ucans32k146"               if ARCH_BOARD_UCANS32K146
+	default "s32k148evb"                if ARCH_BOARD_S32K148EVB
+	default "s32k344evb"                if ARCH_BOARD_S32K344EVB
+	default "mr-canhubk3"               if ARCH_BOARD_MR_CANHUBK3
+	default "rv32m1-vega"               if ARCH_BOARD_RV32M1_VEGA
+	default "rv-virt"                   if ARCH_BOARD_QEMU_RV_VIRT
+	default "sabre-6quad"               if ARCH_BOARD_SABRE_6QUAD
+	default "qemu-armv8a"               if ARCH_BOARD_QEMU_ARMV8A
+	default "pinephone"                 if ARCH_BOARD_PINEPHONE
+	default "sama5d2-xult"              if ARCH_BOARD_SAMA5D2_XULT
+	default "giant-board"               if ARCH_BOARD_GIANT_BOARD
+	default "jupiter-nano"              if ARCH_BOARD_JUPITER_NANO
+	default "sama5d3x-ek"               if ARCH_BOARD_SAMA5D3X_EK
+	default "sama5d3-xplained"          if ARCH_BOARD_SAMA5D3_XPLAINED
+	default "sama5d4-ek"                if ARCH_BOARD_SAMA5D4_EK
+	default "samd20-xplained"           if ARCH_BOARD_SAMD20_XPLAINED
+	default "samd21-xplained"           if ARCH_BOARD_SAMD21_XPLAINED
+	default "same54-xplained-pro"       if ARCH_BOARD_SAME54_XPLAINED_PRO
+	default "saml21-xplained"           if ARCH_BOARD_SAML21_XPLAINED
+	default "sam3u-ek"                  if ARCH_BOARD_SAM3UEK
+	default "sam4cmp-db"                if ARCH_BOARD_SAM4CMP_DB
+	default "sam4e-ek"                  if ARCH_BOARD_SAM4EEK
+	default "sam4l-xplained"            if ARCH_BOARD_SAM4L_XPLAINED
+	default "sam4s-xplained"            if ARCH_BOARD_SAM4S_XPLAINED
+	default "sam4s-xplained-pro"        if ARCH_BOARD_SAM4S_XPLAINED_PRO
+	default "same70-qmtech"             if ARCH_BOARD_SAME70_QMTECH
+	default "same70-xplained"           if ARCH_BOARD_SAME70_XPLAINED
+	default "samv71-xult"               if ARCH_BOARD_SAMV71_XULT
+	default "shenzhou"                  if ARCH_BOARD_SHENZHOU
+	default "skp16c26"                  if ARCH_BOARD_SKP16C26
+	default "photon"                    if ARCH_BOARD_PHOTON
+	default "pnev5180b"                 if ARCH_BOARD_PNEV5180B
+	default "stm32butterfly2"           if ARCH_BOARD_STM32_BUTTERFLY2
+	default "stm32_tiny"                if ARCH_BOARD_STM32_TINY
+	default "stm32l0538-disco"          if ARCH_BOARD_STM32L0538_DISCO
+	default "stm32f051-discovery"       if ARCH_BOARD_STM32F051_DISCOVERY
+	default "stm32f072-discovery"       if ARCH_BOARD_STM32F072_DISCOVERY
+	default "stm32f103-minimum"         if ARCH_BOARD_STM32F103_MINIMUM
+	default "stm32f411-minimum"         if ARCH_BOARD_STM32F411_MINIMUM
+	default "stm3210e-eval"             if ARCH_BOARD_STM3210E_EVAL
+	default "stm3220g-eval"             if ARCH_BOARD_STM3220G_EVAL
+	default "stm3240g-eval"             if ARCH_BOARD_STM3240G_EVAL
+	default "stm32f3discovery"          if ARCH_BOARD_STM32F3_DISCOVERY
+	default "stm32f334-disco"           if ARCH_BOARD_STM32F334_DISCO
+	default "stm32f4discovery"          if ARCH_BOARD_STM32F4_DISCOVERY
+	default "stm32f411e-disco"          if ARCH_BOARD_STM32F411E_DISCO
+	default "stm32f429i-disco"          if ARCH_BOARD_STM32F429I_DISCO
+	default "stm32f746g-disco"          if ARCH_BOARD_STM32F746G_DISCO
+	default "stm32f769i-disco"          if ARCH_BOARD_STM32F769I_DISCO
+	default "steval-eth001v1"           if ARCH_BOARD_STEVAL_ETH001V1
+	default "stm32h747i-disco"          if ARCH_BOARD_STM32H747I_DISCO
+	default "stm32f746-ws"              if ARCH_BOARD_STM32F746_WS
+	default "b-g474e-dpow1"             if ARCH_BOARD_B_G474E_DPOW1
+	default "b-g431b-esc1"              if ARCH_BOARD_B_G431B_ESC1
+	default "nucleo-g431kb"             if ARCH_BOARD_NUCLEO_G431KB
+	default "nucleo-g431rb"             if ARCH_BOARD_NUCLEO_G431RB
+	default "nucleo-g474re"             if ARCH_BOARD_NUCLEO_G474RE
+	default "b-l072z-lrwan1"            if ARCH_BOARD_B_L072Z_LRWAN1
+	default "b-l475e-iot01a"            if ARCH_BOARD_B_L475E_IOT01A
+	default "b-u585i-iot02a"            if ARCH_BOARD_B_U585I_IOT02A
+	default "stm32l476vg-disco"         if ARCH_BOARD_STM32L476VG_DISCO
+	default "stm32l476-mdk"             if ARCH_BOARD_STM32L476_MDK
+	default "stm32l4r9ai-disco"         if ARCH_BOARD_STM32L4R9AI_DISCO
+	default "stm32l562e-dk"             if ARCH_BOARD_STM32L562E_DK
+	default "stm32ldiscovery"           if ARCH_BOARD_STM32L_DISCOVERY
+	default "stm32vldiscovery"          if ARCH_BOARD_STM32VL_DISCOVERY
+	default "mikroe-stm32f4"            if ARCH_BOARD_MIKROE_STM32F4
+	default "sure-pic32mx"              if ARCH_BOARD_SUREPIC32MX
+	default "teensy-2.0"                if ARCH_BOARD_TEENSY_20
+	default "teensy-3.x"                if ARCH_BOARD_TEENSY_3X
+	default "teensy-4.x"                if ARCH_BOARD_TEENSY_4X
+	default "teensy-lc"                 if ARCH_BOARD_TEENSY_LC
+	default "tm4c123g-launchpad"        if ARCH_BOARD_TM4C123G_LAUNCHPAD
+	default "tm4c1294-launchpad"        if ARCH_BOARD_TM4C1294_LAUNCHPAD
+	default "tm4c129e-launchpad"        if ARCH_BOARD_TM4C129E_LAUNCHPAD
+	default "tms570ls31x-usb-kit"       if ARCH_BOARD_TMS570LS31X_USB_KIT
+	default "lilygo_tbeam_lora_gps"     if ARCH_BOARD_LILYGO_TBEAM_LORA_GPS
+	default "ttgo_lora_esp32"           if ARCH_BOARD_TTGO_LORA_ESP32
+	default "ttgo_t_display_esp32"      if ARCH_BOARD_TTGO_T_DISPLAY_ESP32
+	default "twr-k60n512"               if ARCH_BOARD_TWR_K60N512
+	default "twr-k64f120m"              if ARCH_BOARD_TWR_K64F120M
+	default "u-blox-c027"               if ARCH_BOARD_U_BLOX_C027
+	default "ubw32"                     if ARCH_BOARD_UBW32
+	default "us7032evb1"                if ARCH_BOARD_US7032EVB1
+	default "viewtool-stm32f107"        if ARCH_BOARD_VIEWTOOL_STM32F107
+	default "xmc4500-relax"             if ARCH_BOARD_XMC4500RELAX
+	default "xmc4700-relax"             if ARCH_BOARD_XMC4700RELAX
+	default "z16f2800100zcog"           if ARCH_BOARD_Z16F2800100ZCOG
+	default "z20x"                      if ARCH_BOARD_Z20X
+	default "z80sim"                    if ARCH_BOARD_Z80SIM
+	default "z8encore000zco"            if ARCH_BOARD_Z8ENCORE000ZCO
+	default "z8f64200100kit"            if ARCH_BOARD_Z8F64200100KIT
+	default "zp214xpa"                  if ARCH_BOARD_ZP214XPA
+	default "zkit-arm-1769"             if ARCH_BOARD_ZKITARM
+	default "phy6222"                   if ARCH_BOARD_PHY6222
+	default "sim"                       if ARCH_BOARD_SIM
+	default "moxa"                      if ARCH_BOARD_MOXA
+	default "spresense"                 if ARCH_BOARD_SPRESENSE
+	default "xx3803"                    if ARCH_BOARD_XX3803
+	default "xx3823"                    if ARCH_BOARD_XX3823
+	default "s698pm-dkit"               if ARCH_BOARD_S698PM_DKIT
 
 comment "Common Board Options"
 
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig
new file mode 100644
index 0000000000..7b71e12c7f
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/Kconfig
@@ -0,0 +1,8 @@
+#
+# For a description of the syntax of this configuration file,
+# see the file kconfig-language.txt in the NuttX tools repository.
+#
+
+if ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28
+
+endif
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/README.txt b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/README.txt
new file mode 100644
index 0000000000..3e6f5ad636
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/README.txt
@@ -0,0 +1,191 @@
+README
+======
+
+This directory contains the port of NuttX to the Waveshare RP2040 LCD 1.28.
+See https://www.waveshare.com/wiki/RP2040-LCD-1.28 for information
+about Waveshare RP2040 LCD 1.28.
+
+NuttX supports the following RP2040 capabilities:
+  - UART  (console port)
+    - GPIO 0 (UART0 TX) and GPIO 1 (UART0 RX) are used for the console.
+  - I2C
+  - SPI (master only)
+  - DMAC
+  - PWM
+  - ADC
+  - Watchdog
+  - 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.
+  - Persistent flash filesystem in unused flash ROM
+
+NuttX also provide support for these external devices:
+
+  - BMP180 sensor at I2C0 (don't forget to define I2C0 GPIOs at "I2C0 GPIO pin assign" in Board Selection menu)
+  - INA219 sensor / module (don't forget to define I2C0 GPIOs at "I2C0 GPIO pin assign" in Board Selection menu)
+  - Pico Display Pack (ST7789 LCD)
+    - RGB leds and buttons are not supported yet.
+  - Pico Audio Pack (PCM5100A I2S DAC)
+    - I2S interface is realized by PIO.
+  - WS2812 smart pixel support
+
+There is currently no direct user mode access to these RP2040 hardware features:
+  - SPI Slave Mode
+  - SSI
+  - RTC
+  - Timers
+
+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/nuttx.git nuttx
+  $ git clone https://github.com/apache/nuttx-apps.git apps
+  $ cd nuttx
+  $ make distclean
+  $ ./tools/configure.sh raspberrypi-pico:nsh
+  $ make V=1
+
+4. Connect Raspberry Pi Pico 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 0 and 1 pins must be connected to the
+   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
+
+- nsh-flash
+    NuttX shell with SMART flash filesystem.
+
+- nshsram
+    Load NuttX binary to SRAM
+
+- smp
+    Enable SMP mode. Both Core 0 and Core 1 are used by NuttX.
+
+- ssd1306
+    SSD1306 OLED display (I2C) test configuration
+    Connection:
+       SSD1306       Raspberry Pi Pico
+           GND ----- GND            (Pin 3 or 38 or ...)
+           VCC ----- 3V3 OUT        (Pin 36)
+           SDA ----- GP4 (I2C0 SDA) (Pin 6)
+           SCL ----- GP5 (I2C0 SCL) (Pin 7)
+
+- lcd1602
+    LCD 1602 Segment LCD Disaply (I2C)
+    Connection:
+    PCF8574 BackPack Raspberry Pi Pico
+           GND ----- GND            (Pin 3 or 38 or ...)
+           VCC ----- 5V Vbus        (Pin 40)
+           SDA ----- GP4 (I2C0 SDA) (Pin 6)
+           SCL ----- GP5 (I2C0 SCL) (Pin 7)
+- spisd
+    SD card support (SPI connection)
+    Connection:
+      SD card slot   Raspberry Pi Pico
+       DAT2          (NC)
+       DAT3/CS ----- GP17 (SPI0 CSn) (Pin 22)
+       CMD /DI ----- GP19 (SPI0 TX)  (Pin 25)
+       VDD     ----- 3V3 OUT         (Pin 36)
+       CLK/SCK ----- GP18 (SPI0 SCK) (Pin 24)
+       VSS     ----- GND             (Pin 3 or 38 or ...)
+       DAT0/DO ----- GP16 (SPI0 RX)  (Pin 21)
+       DAT1          (NC)
+    * Card hot swapping is not supported.
+
+- st7735
+    st7735 SPI LCD support
+    Connection:
+      st7735         Raspberry Pi Pico
+           GND ----- GND             (Pin 3 or 38 or ...)
+           VCC ----- 5V Vbus         (Pin 40)
+           SDA ----- GP15 (SPI1 TX)  (Pin 20)
+           SCK ----- GP14 (SPI1 SCK) (Pin 19)
+            CS ----- GP13 (SPI1 CSn) (Pin 17)
+       AO(D/C) ----- GP12 (SPI1 RX)  (Pin 16)
+            BL ----- GP11            (Pin 15)
+         RESET ----- GP10            (Pin 14)
+
+- enc28j60
+    ENC28J60 SPI ethernet controller support
+      - IP address is configured by DHCP.
+      - DNS address is 8.8.8.8 (CONFIG_NETINIT_DNSIPADDR)
+      - NTP client is enabled.
+    Connection:
+      ENC28J60       Raspberry Pi Pico
+           GND ----- GND             (Pin 3 or 38 or ...)
+           3.3 ----- 3V3 OUT         (Pin 36)
+            SI ----- GP15 (SPI1 TX)  (Pin 20)
+           SCK ----- GP14 (SPI1 SCK) (Pin 19)
+            CS ----- GP13 (SPI1 CSn) (Pin 17)
+            SO ----- GP12 (SPI1 RX)  (Pin 16)
+           INT ----- GP11            (Pin 15)
+         RESET ----- GP10            (Pin 14)
+
+- displaypack
+    Pico Display Pack support
+    See the following page for connection:
+      https://shop.pimoroni.com/products/pico-display-pack
+
+- audiopack
+    Pico Audio Pack support
+    See the following page for connection:
+      https://shop.pimoroni.com/products/pico-audio-pack
+    SD card interface is also enabled.
+
+- usbnsh
+    USB CDC/ACM serial console with NuttShell
+
+- usbmsc
+    USB MSC and CDC/ACM support
+    `msconn` and `sercon` commands enable the MSC and CDC/ACM devices.
+    The MSC support provides the interface to the SD card with SPI,
+    so the SD card slot connection like spisd configuration is required.
+
+- 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/waveshare-rp2040-lcd-1.28/configs/composite/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/composite/defconfig
new file mode 100644
index 0000000000..71de340e59
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/composite/defconfig
@@ -0,0 +1,72 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_LIBC_LONG_LONG is not set
+# CONFIG_MMCSD_HAVE_CARDDETECT is not set
+# CONFIG_MMCSD_HAVE_WRITEPROTECT 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_SPI_CALLBACK is not set
+# CONFIG_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_COMPOSITE=y
+CONFIG_COMPOSITE_IAD=y
+CONFIG_COMPOSITE_MSFT_OS_DESCRIPTORS=y
+CONFIG_COMPOSITE_PRODUCTID=0x2022
+CONFIG_COMPOSITE_SERIALSTR="12345"
+CONFIG_COMPOSITE_VENDORID=0x03eb
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_USBSERIAL=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_MMCSD=y
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_SPI0=y
+CONFIG_RP2040_SPI=y
+CONFIG_RP2040_SPISD=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_COMPOSITE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_SPITOOL=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y
+CONFIG_USBDEV_COMPOSITE=y
+CONFIG_USBMSC=y
+CONFIG_USBMSC_COMPOSITE=y
+CONFIG_USBMSC_NOT_STALL_BULKEP=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/fb/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/fb/defconfig
new file mode 100644
index 0000000000..6e78113612
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/fb/defconfig
@@ -0,0 +1,63 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_DEV_CONSOLE 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="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_CONSOLE=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_DRIVERS_VIDEO=y
+CONFIG_EXAMPLES_FB=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_LCD=y
+CONFIG_LCD_FRAMEBUFFER=y
+CONFIG_LCD_GC9A01=y
+CONFIG_LCD_GC9A01_BGR=y
+CONFIG_LCD_GC9A01_FREQUENCY=50000000
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_NSH_USBCONSOLE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_LCD_SPI_CH=1
+CONFIG_RP2040_SPI1=y
+CONFIG_RP2040_SPI=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_SPI_CMDDATA=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y
+CONFIG_VIDEO_FB=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/lvgl/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/lvgl/defconfig
new file mode 100644
index 0000000000..849234adc7
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/lvgl/defconfig
@@ -0,0 +1,73 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_DEV_CONSOLE 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="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_CONSOLE=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_LVGLDEMO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_GRAPHICS_LVGL=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_LCD=y
+CONFIG_LCD_DEV=y
+CONFIG_LCD_GC9A01=y
+CONFIG_LCD_GC9A01_BGR=y
+CONFIG_LCD_GC9A01_FREQUENCY=50000000
+CONFIG_LV_COLOR_16_SWAP=y
+CONFIG_LV_DEMO_WIDGETS_SLIDESHOW=y
+CONFIG_LV_MEM_SIZE_KILOBYTES=48
+CONFIG_LV_PORT_LCDDEV_FULL_SCREEN_BUFFER=y
+CONFIG_LV_PORT_USE_LCDDEV=y
+CONFIG_LV_TICK_CUSTOM=y
+CONFIG_LV_TICK_CUSTOM_INCLUDE="port/lv_port_tick.h"
+CONFIG_LV_USE_DEMO_BENCHMARK=y
+CONFIG_LV_USE_DEMO_STRESS=y
+CONFIG_LV_USE_DEMO_WIDGETS=y
+CONFIG_LV_USE_LOG=y
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_NSH_USBCONSOLE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_LCD_SPI_CH=1
+CONFIG_RP2040_SPI1=y
+CONFIG_RP2040_SPI=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_SPI_CMDDATA=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh-flash/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh-flash/defconfig
new file mode 100644
index 0000000000..2de30ba757
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh-flash/defconfig
@@ -0,0 +1,49 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# 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_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_FLASH_FILE_SYSTEM=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_SMARTFS_ALIGNED_ACCESS=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSLOG_CONSOLE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_TESTING_SMART_TEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh/defconfig
new file mode 100644
index 0000000000..6d41ead990
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nsh/defconfig
@@ -0,0 +1,47 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# 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_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSLOG_CONSOLE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nshsram/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nshsram/defconfig
new file mode 100644
index 0000000000..f4e28c41f2
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/nshsram/defconfig
@@ -0,0 +1,47 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# 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_FLASH_BOOT is not set
+# CONFIG_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=y
+CONFIG_ARCH_CHIP="rp2040"
+CONFIG_ARCH_CHIP_RP2040=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_BOARDCTL_RESET=y
+CONFIG_BOARD_LOOPSPERMSEC=10450
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSLOG_CONSOLE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/smp/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/smp/defconfig
new file mode 100644
index 0000000000..5c43525ac8
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/smp/defconfig
@@ -0,0 +1,54 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# 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_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=y
+CONFIG_ARCH_CHIP="rp2040"
+CONFIG_ARCH_CHIP_RP2040=y
+CONFIG_ARCH_INTERRUPTSTACK=2048
+CONFIG_ARCH_RAMVECTORS=y
+CONFIG_ARCH_STACKDUMP=y
+CONFIG_BOARDCTL_RESET=y
+CONFIG_BOARD_LOOPSPERMSEC=10450
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SMP=y
+CONFIG_SMP_NCPUS=2
+CONFIG_STACK_COLORATION=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSLOG_CONSOLE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_SYSTEM=y
+CONFIG_SYSTEM_TASKSET=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_TESTING_SMP=y
+CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_UART0_TXBUFSIZE=384
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/spisd/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/spisd/defconfig
new file mode 100644
index 0000000000..2075632b7f
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/spisd/defconfig
@@ -0,0 +1,58 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_LIBC_LONG_LONG is not set
+# CONFIG_MMCSD_HAVE_CARDDETECT is not set
+# CONFIG_MMCSD_HAVE_WRITEPROTECT 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_SPI_CALLBACK is not set
+# CONFIG_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_MMCSD=y
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_SPI0=y
+CONFIG_RP2040_SPI=y
+CONFIG_RP2040_SPISD=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSLOG_CONSOLE=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_SPITOOL=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbmsc/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbmsc/defconfig
new file mode 100644
index 0000000000..7acdd1ec37
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbmsc/defconfig
@@ -0,0 +1,65 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_LIBC_LONG_LONG is not set
+# CONFIG_MMCSD_HAVE_CARDDETECT is not set
+# CONFIG_MMCSD_HAVE_WRITEPROTECT 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_SPI_CALLBACK is not set
+# CONFIG_STANDARD_SERIAL is not set
+CONFIG_ARCH="arm"
+CONFIG_ARCH_BOARD="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_EXAMPLES_USBSERIAL=y
+CONFIG_FAT_LCNAMES=y
+CONFIG_FAT_LFN=y
+CONFIG_FS_FAT=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_MMCSD=y
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RP2040_SPI0=y
+CONFIG_RP2040_SPI=y
+CONFIG_RP2040_SPISD=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_CDCACM=y
+CONFIG_SYSTEM_NSH=y
+CONFIG_SYSTEM_SPITOOL=y
+CONFIG_SYSTEM_USBMSC=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_UART0_SERIAL_CONSOLE=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y
+CONFIG_USBMSC=y
+CONFIG_USBMSC_NOT_STALL_BULKEP=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbnsh/defconfig b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbnsh/defconfig
new file mode 100644
index 0000000000..512e1aa9e2
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/configs/usbnsh/defconfig
@@ -0,0 +1,51 @@
+#
+# This file is autogenerated: PLEASE DO NOT EDIT IT.
+#
+# You can use "make menuconfig" to make any modifications to the installed .config file.
+# You can then do "make savedefconfig" to generate a new defconfig file that includes your
+# modifications.
+#
+# CONFIG_DEV_CONSOLE 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="waveshare-rp2040-lcd-1.28"
+CONFIG_ARCH_BOARD_WAVESHARE_RP2040_LCD_1_28=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
+CONFIG_BUILTIN=y
+CONFIG_CDCACM=y
+CONFIG_CDCACM_CONSOLE=y
+CONFIG_DEBUG_FULLOPT=y
+CONFIG_DEBUG_SYMBOLS=y
+CONFIG_DISABLE_POSIX_TIMERS=y
+CONFIG_EXAMPLES_HELLO=y
+CONFIG_FS_PROCFS=y
+CONFIG_FS_PROCFS_REGISTER=y
+CONFIG_INIT_ENTRYPOINT="nsh_main"
+CONFIG_NFILE_DESCRIPTORS_PER_BLOCK=6
+CONFIG_NSH_ARCHINIT=y
+CONFIG_NSH_BUILTIN_APPS=y
+CONFIG_NSH_READLINE=y
+CONFIG_NSH_USBCONSOLE=y
+CONFIG_RAM_SIZE=270336
+CONFIG_RAM_START=0x20000000
+CONFIG_READLINE_CMD_HISTORY=y
+CONFIG_RR_INTERVAL=200
+CONFIG_SCHED_WAITPID=y
+CONFIG_START_DAY=9
+CONFIG_START_MONTH=2
+CONFIG_START_YEAR=2021
+CONFIG_SYSTEM_NSH=y
+CONFIG_TESTING_GETPRIME=y
+CONFIG_TESTING_OSTEST=y
+CONFIG_USBDEV=y
+CONFIG_USBDEV_BUSPOWERED=y
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
new file mode 100644
index 0000000000..271cce1a53
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.h
@@ -0,0 +1,116 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/board.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_WAVESHARE_RP2040_LCD_1_28_INCLUDE_BOARD_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_BOARD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+#include "rp2040_i2cdev.h"
+#include "rp2040_spidev.h"
+#include "rp2040_i2sdev.h"
+
+#include "rp2040_spisd.h"
+
+#ifndef __ASSEMBLY__
+# include <stdint.h>
+#endif
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/* Clocking *****************************************************************/
+
+#define MHZ                     1000000
+
+#define BOARD_XOSC_FREQ         (12 * MHZ)
+#define BOARD_PLL_SYS_FREQ      (125 * MHZ)
+#define BOARD_PLL_USB_FREQ      (48 * MHZ)
+
+#define BOARD_REF_FREQ          (12 * MHZ)
+#define BOARD_SYS_FREQ          (125 * MHZ)
+#define BOARD_PERI_FREQ         (125 * MHZ)
+#define BOARD_USB_FREQ          (48 * MHZ)
+#define BOARD_ADC_FREQ          (48 * MHZ)
+#define BOARD_RTC_FREQ          46875
+
+#define BOARD_UART_BASEFREQ     BOARD_PERI_FREQ
+
+#define BOARD_TICK_CLOCK        (1 * MHZ)
+
+/* GPIO definitions *********************************************************/
+
+#define BOARD_GPIO_LED_PIN      25
+#define BOARD_NGPIOOUT          1
+#define BOARD_NGPIOIN           1
+#define BOARD_NGPIOINT          1
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: rp2040_boardearlyinitialize
+ *
+ * Description:
+ *
+ ****************************************************************************/
+
+void rp2040_boardearlyinitialize(void);
+
+/****************************************************************************
+ * Name: rp2040_boardinitialize
+ *
+ * Description:
+ *
+ ****************************************************************************/
+
+void rp2040_boardinitialize(void);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_BOARD_H */
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2cdev.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2cdev.h
new file mode 100644
index 0000000000..f946d825df
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2cdev.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2cdev.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_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2CDEV_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2CDEV_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_i2cdev_initialize
+ *
+ * Description:
+ *   Initialize i2c driver and register the /dev/i2c device.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_RP2040_I2C_DRIVER
+int board_i2cdev_initialize(int bus);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2CDEV_H */
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2sdev.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2sdev.h
new file mode 100644
index 0000000000..a113ff6571
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2sdev.h
@@ -0,0 +1,72 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_i2sdev.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_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2SDEV_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2SDEV_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+#include <stdint.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_i2sdev_initialize
+ *
+ * Description:
+ *   Initialize i2s driver and register the /dev/audio/pcm0 device.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_RP2040_I2S
+int board_i2sdev_initialize(int bus);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_I2SDEV_H */
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spidev.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spidev.h
new file mode 100644
index 0000000000..a21ed07625
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spidev.h
@@ -0,0 +1,69 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spidev.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_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPIDEV_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPIDEV_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_spidev_initialize
+ *
+ * Description:
+ *   Initialize spi driver and register the /dev/spi device.
+ *
+ ****************************************************************************/
+
+int board_spidev_initialize(int bus);
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPIDEV_H */
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spisd.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spisd.h
new file mode 100644
index 0000000000..cee198959e
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spisd.h
@@ -0,0 +1,83 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/include/rp2040_spisd.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_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPISD_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPISD_H
+
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
+#include <nuttx/config.h>
+
+/****************************************************************************
+ * Public Types
+ ****************************************************************************/
+
+#ifndef __ASSEMBLY__
+
+/****************************************************************************
+ * Public Data
+ ****************************************************************************/
+
+#undef EXTERN
+#if defined(__cplusplus)
+#define EXTERN extern "C"
+extern "C"
+{
+#else
+#define EXTERN extern
+#endif
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_spisd_initialize
+ *
+ * Description:
+ *   Initialize the SPI-based SD card.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_RP2040_SPISD
+int board_spisd_initialize(int minor, int bus);
+#endif
+
+/****************************************************************************
+ * Name: board_spisd_status
+ *
+ * Description:
+ *   Get the status whether SD Card is present or not.
+ *
+ ****************************************************************************/
+
+#ifdef CONFIG_RP2040_SPISD
+uint8_t board_spisd_status(struct spi_dev_s *dev, uint32_t devid);
+#endif
+
+#undef EXTERN
+#if defined(__cplusplus)
+}
+#endif
+
+#endif /* __ASSEMBLY__ */
+#endif /* __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_INCLUDE_RP2040_SPISD_H */
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/Make.defs b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/Make.defs
new file mode 100644
index 0000000000..1ed7684fca
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/Make.defs
@@ -0,0 +1,45 @@
+############################################################################
+# boards/arm/rp2040/raspberrypi-pico/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 = waveshare-rp2040-lcd-1-28-flash.ld
+else
+  LDSCRIPT = waveshare-rp2040-lcd-1-28-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/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-flash.ld b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-flash.ld
new file mode 100644
index 0000000000..82de4b749a
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-flash.ld
@@ -0,0 +1,118 @@
+/****************************************************************************
+ * boards/arm/rp2040/raspberrypi-pico/scripts/raspberrypi-pico-flash.ld
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+MEMORY
+{
+  flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
+  sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .flash_begin : {
+        __flash_binary_start = .;
+    } > flash
+
+    .boot2 : {
+        __boot2_start__ = .;
+        KEEP (*(.boot2))
+        __boot2_end__ = .;
+    } > flash
+
+    .text : {
+        _stext = ABSOLUTE(.);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        _etext = ABSOLUTE(.);
+    } > flash
+
+    .init_section : {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > flash
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > flash
+
+    __exidx_start = ABSOLUTE(.);
+    .ARM.exidx : {
+        *(.ARM.exidx*)
+    } > flash
+    __exidx_end = ABSOLUTE(.);
+
+    _eronly = ABSOLUTE(.);
+
+    .ram_vectors (COPY) : {
+        *(.ram_vectors)
+    } > sram
+
+    .data : {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        *(.ram_code.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram AT > flash
+
+    .flash_section : {
+        . = ALIGN(4*1024);
+        *(.flash.*)
+    } > flash
+
+    .bss : {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sram
+
+    /* Stabs debugging sections. */
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-sram.ld b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-sram.ld
new file mode 100644
index 0000000000..1227117022
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/scripts/waveshare-rp2040-lcd-1-28-sram.ld
@@ -0,0 +1,104 @@
+/****************************************************************************
+ * boards/arm/rp2040/raspberrypi-pico/scripts/raspberrypi-pico-sram.ld
+ *
+ * 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.
+ *
+ ****************************************************************************/
+
+MEMORY
+{
+  flash (rx) : ORIGIN = 0x10000000, LENGTH = 2048K
+  sram (rwx) : ORIGIN = 0x20000000, LENGTH = 264K
+}
+
+OUTPUT_ARCH(arm)
+EXTERN(_vectors)
+ENTRY(_stext)
+
+SECTIONS
+{
+    .text : {
+        _stext = ABSOLUTE(.);
+        rp2040_start.o(.text)
+        . = ALIGN(256);
+        *(.vectors)
+        *(.text .text.*)
+        *(.fixup)
+        *(.gnu.warning)
+        *(.rodata .rodata.*)
+        *(.gnu.linkonce.t.*)
+        *(.glue_7)
+        *(.glue_7t)
+        *(.got)
+        *(.gcc_except_table)
+        *(.gnu.linkonce.r.*)
+        _etext = ABSOLUTE(.);
+    } > sram
+
+    .init_section : {
+        _sinit = ABSOLUTE(.);
+        *(.init_array .init_array.*)
+        _einit = ABSOLUTE(.);
+    } > sram
+
+    .ARM.extab : {
+        *(.ARM.extab*)
+    } > sram
+
+    __exidx_start = ABSOLUTE(.);
+    .ARM.exidx : {
+        *(.ARM.exidx*)
+    } > sram
+    __exidx_end = ABSOLUTE(.);
+
+    .data : {
+        _sdata = ABSOLUTE(.);
+        *(.data .data.*)
+        *(.gnu.linkonce.d.*)
+        *(.ram_code.*)
+        CONSTRUCTORS
+        . = ALIGN(4);
+        _edata = ABSOLUTE(.);
+    } > sram
+
+    .flash_section : {
+        . = ALIGN(4*1024);
+        *(.flash.*)
+    } > flash
+
+    .bss : {
+        _sbss = ABSOLUTE(.);
+        *(.bss .bss.*)
+        *(.gnu.linkonce.b.*)
+        *(COMMON)
+        . = ALIGN(4);
+        _ebss = ABSOLUTE(.);
+    } > sram
+
+    /* Stabs debugging sections. */
+    .stab 0 : { *(.stab) }
+    .stabstr 0 : { *(.stabstr) }
+    .stab.excl 0 : { *(.stab.excl) }
+    .stab.exclstr 0 : { *(.stab.exclstr) }
+    .stab.index 0 : { *(.stab.index) }
+    .stab.indexstr 0 : { *(.stab.indexstr) }
+    .comment 0 : { *(.comment) }
+    .debug_abbrev 0 : { *(.debug_abbrev) }
+    .debug_info 0 : { *(.debug_info) }
+    .debug_line 0 : { *(.debug_line) }
+    .debug_pubnames 0 : { *(.debug_pubnames) }
+    .debug_aranges 0 : { *(.debug_aranges) }
+}
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/Make.defs b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/Make.defs
new file mode 100644
index 0000000000..c3c8459ab6
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/Make.defs
@@ -0,0 +1,33 @@
+############################################################################
+# boards/arm/rp2040/raspberrypi-pico/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_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/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c
new file mode 100644
index 0000000000..de8614272c
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_appinit.c
@@ -0,0 +1,78 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_appinit.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 "rp2040_pico.h"
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+#ifndef OK
+#  define OK 0
+#endif
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: board_app_initialize
+ *
+ * Description:
+ *   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:
+ *   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:
+ *   Zero (OK) is returned on success; a negated errno value is returned on
+ *   any failure to indicate the nature of the failure.
+ *
+ ****************************************************************************/
+
+int board_app_initialize(uintptr_t arg)
+{
+#ifdef CONFIG_BOARD_LATE_INITIALIZE
+  /* Board initialization already performed by board_late_initialize() */
+
+  return OK;
+#else
+  /* Perform board-specific initialization */
+
+  return rp2040_bringup();
+#endif
+}
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_boardinitialize.c b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_boardinitialize.c
new file mode 100644
index 0000000000..4543df8fd4
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_boardinitialize.c
@@ -0,0 +1,87 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_boardinitialize.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 <debug.h>
+
+#include <nuttx/board.h>
+#include <arch/board/board.h>
+
+#include "arm_internal.h"
+#include "rp2040_gpio.h"
+
+#ifdef CONFIG_ARCH_BOARD_COMMON
+#include "rp2040_common_initialize.h"
+#endif /* CONFIG_ARCH_BOARD_COMMON */
+
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Private Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: rp2040_boardearlyinitialize
+ *
+ * Description:
+ *
+ ****************************************************************************/
+
+void rp2040_boardearlyinitialize(void)
+{
+  #ifdef CONFIG_ARCH_BOARD_COMMON
+  rp2040_common_earlyinitialize();
+  #endif
+
+  /* --- Place any board specific early initialization here --- */
+
+  /* Set board LED pin */
+
+  rp2040_gpio_init(BOARD_GPIO_LED_PIN);
+  rp2040_gpio_setdir(BOARD_GPIO_LED_PIN, true);
+  rp2040_gpio_put(BOARD_GPIO_LED_PIN, true);
+}
+
+/****************************************************************************
+ * Name: rp2040_boardinitialize
+ *
+ * Description:
+ *
+ ****************************************************************************/
+
+void rp2040_boardinitialize(void)
+{
+  #ifdef CONFIG_ARCH_BOARD_COMMON
+  rp2040_common_initialize();
+  #endif
+
+  /* --- Place any board specific initialization here --- */
+}
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c
new file mode 100644
index 0000000000..7a5daef610
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_bringup.c
@@ -0,0 +1,63 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_bringup.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 <debug.h>
+#include <stddef.h>
+
+#include <nuttx/fs/fs.h>
+
+#include <arch/board/board.h>
+
+#include "rp2040_pico.h"
+
+#ifdef CONFIG_ARCH_BOARD_COMMON
+#include "rp2040_common_bringup.h"
+#endif /* CONFIG_ARCH_BOARD_COMMON */
+
+/****************************************************************************
+ * Public Functions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Name: rp2040_bringup
+ ****************************************************************************/
+
+int rp2040_bringup(void)
+{
+#ifdef CONFIG_ARCH_BOARD_COMMON
+
+  int ret = rp2040_common_bringup();
+  if (ret < 0)
+    {
+      return ret;
+    }
+
+#endif /* CONFIG_ARCH_BOARD_COMMON */
+
+  /* --- Place any board specific bringup code here --- */
+
+  return OK;
+}
diff --git a/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c
new file mode 100644
index 0000000000..12c200319a
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_gpio.c
@@ -0,0 +1,392 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/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  14
+
+/****************************************************************************
+ * 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/waveshare-rp2040-lcd-1.28/src/rp2040_pico.h b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_pico.h
new file mode 100644
index 0000000000..ab96d00c91
--- /dev/null
+++ b/boards/arm/rp2040/waveshare-rp2040-lcd-1.28/src/rp2040_pico.h
@@ -0,0 +1,36 @@
+/****************************************************************************
+ * boards/arm/rp2040/waveshare-rp2040-lcd-1.28/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_WAVESHARE_RP2040_LCD_1_28_SRC_RP2040_PICO_H
+#define __BOARDS_ARM_WAVESHARE_RP2040_LCD_1_28_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_WAVESHARE_RP2040_LCD_1_28_SRC_RP2040_PICO_H */