From 286e2e9e02556a2d5715b1418e750ce3af311db2 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 13:33:21 -0400 Subject: [PATCH 1/6] zephyr-cp: sort board_aliases.cmake by board name Co-Authored-By: Claude Opus 5.5 --- ports/zephyr-cp/boards/board_aliases.cmake | 26 +++++++++++----------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/ports/zephyr-cp/boards/board_aliases.cmake b/ports/zephyr-cp/boards/board_aliases.cmake index a13e2031f7c..8e39f2e99bc 100644 --- a/ports/zephyr-cp/boards/board_aliases.cmake +++ b/ports/zephyr-cp/boards/board_aliases.cmake @@ -26,35 +26,35 @@ macro(cp_board_alias alias target) endif() endmacro() -cp_board_alias(pca10056 nrf52840dk/nrf52840) -cp_board_alias(adafruit_feather_nrf52840_zephyr adafruit_feather_nrf52840/nrf52840/uf2) cp_board_alias(adafruit_clue_nrf52840_zephyr adafruit_clue_nrf52840/nrf52840/uf2) +cp_board_alias(adafruit_feather_nrf52840_zephyr adafruit_feather_nrf52840/nrf52840/uf2) cp_board_alias(adafruit_feather_nrf52840_sense_zephyr adafruit_feather_nrf52840/nrf52840/sense/uf2) -cp_board_alias(adafruit_itsybitsy_nrf52840_zephyr adafruit_itsybitsy/nrf52840) cp_board_alias(adafruit_feather_rp2040_zephyr adafruit_feather_rp2040/rp2040) -cp_board_alias(renesas_ek_ra6m5 ek_ra6m5) -cp_board_alias(renesas_ek_ra8d1 ek_ra8d1) -cp_board_alias(renesas_da14695_dk_usb da14695_dk_usb) +cp_board_alias(adafruit_itsybitsy_nrf52840_zephyr adafruit_itsybitsy/nrf52840) cp_board_alias(native_native_sim native_sim/native) cp_board_alias(native_native_sim_asan native_sim/native) cp_board_alias(native_native_sim_lfs native_sim/native) cp_board_alias(native_nrf5340bsim nrf5340bsim/nrf5340/cpuapp) cp_board_alias(native_nrf54lm20bsim nrf54lm20bsim/nrf54lm20a/cpuapp) +cp_board_alias(nordic_nrf5340dk nrf5340dk/nrf5340/cpuapp) +cp_board_alias(nordic_nrf54h20dk nrf54h20dk/nrf54h20/cpuapp) cp_board_alias(nordic_nrf54l15dk nrf54l15dk/nrf54l15/cpuapp) cp_board_alias(nordic_nrf54l15tag nrf54l15tag/nrf54l15/cpuapp) cp_board_alias(nordic_nrf54lm20dk nrf54lm20dk/nrf54lm20a/cpuapp) -cp_board_alias(nordic_nrf54h20dk nrf54h20dk/nrf54h20/cpuapp) -cp_board_alias(nordic_nrf5340dk nrf5340dk/nrf5340/cpuapp) cp_board_alias(nxp_frdm_mcxn947 frdm_mcxn947/mcxn947/cpu0) cp_board_alias(nxp_frdm_rw612 frdm_rw612) cp_board_alias(nxp_mimxrt1170_evk mimxrt1170_evk@A/mimxrt1176/cm7) -cp_board_alias(st_stm32h7b3i_dk stm32h7b3i_dk) -cp_board_alias(st_stm32h750b_dk stm32h750b_dk/stm32h750xx/ext_flash_app) -cp_board_alias(st_stm32wba65i_dk1 stm32wba65i_dk1) -cp_board_alias(st_nucleo_u575zi_q nucleo_u575zi_q/stm32u575xx) +cp_board_alias(pca10056 nrf52840dk/nrf52840) cp_board_alias(raspberrypi_rpi_pico_zephyr rpi_pico/rp2040) cp_board_alias(raspberrypi_rpi_pico_w_zephyr rpi_pico/rp2040/w) cp_board_alias(raspberrypi_rpi_pico2_zephyr rpi_pico2/rp2350a/m33) cp_board_alias(raspberrypi_rpi_pico2_w_zephyr rpi_pico2/rp2350a/m33/w) -cp_board_alias(st_nucleo_n657x0_q nucleo_n657x0_q/stm32n657xx) +cp_board_alias(renesas_da14695_dk_usb da14695_dk_usb) +cp_board_alias(renesas_ek_ra6m5 ek_ra6m5) +cp_board_alias(renesas_ek_ra8d1 ek_ra8d1) cp_board_alias(silabs_siwx917_dk2605a siwx917_dk2605a) +cp_board_alias(st_nucleo_n657x0_q nucleo_n657x0_q/stm32n657xx) +cp_board_alias(st_nucleo_u575zi_q nucleo_u575zi_q/stm32u575xx) +cp_board_alias(st_stm32h750b_dk stm32h750b_dk/stm32h750xx/ext_flash_app) +cp_board_alias(st_stm32h7b3i_dk stm32h7b3i_dk) +cp_board_alias(st_stm32wba65i_dk1 stm32wba65i_dk1) From a37a9f38a52f618ab4f5783a71be9da8cb7494e5 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 14:22:46 -0400 Subject: [PATCH 2/6] zephyr-cp: update adaboot for the MacroPad RP2040 layout Also brings in adaboot #10: RP2 boards get boot-mode retention from a per-SoC overlay instead of their layout dtsi. The settings are unchanged. Co-Authored-By: Claude Opus 5.5 --- ports/zephyr-cp/zephyr-config/west.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/ports/zephyr-cp/zephyr-config/west.yml b/ports/zephyr-cp/zephyr-config/west.yml index 1d412bd8d5e..8f58a697aad 100644 --- a/ports/zephyr-cp/zephyr-config/west.yml +++ b/ports/zephyr-cp/zephyr-config/west.yml @@ -10,7 +10,7 @@ manifest: path: modules/bsim_hw_models/nrf_hw_models - name: mcuboot url: https://github.com/adafruit/adaboot - revision: a6f8f35a36f6363b3c24b1b3d89b7f7846983c4e + revision: 298d868d9534a705605744dea5899a4d35fdd70e path: bootloader/mcuboot - name: zephyr url: https://github.com/adafruit/zephyr From 8aa2c544c71f2724e3631f3d038bb7db5b450a46 Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 14:22:47 -0400 Subject: [PATCH 3/6] zephyr-cp: add the MacroPad RP2040 Pin names come from the raspberrypi port board. The partition layout, the same as the Feather RP2040, comes from adaboot. Changes from the upstream board: - The keys (gpio-keys) and encoder (gpio-qdec) nodes are disabled so keypad and rotaryio can claim their pins. - CONFIG_DISPLAY turns on the SH1106 OLED as board.DISPLAY. Co-Authored-By: Claude Opus 5.5 --- .../macropad_rp2040_zephyr/board.conf | 7 ++++ .../macropad_rp2040_zephyr/board.overlay | 14 +++++++ .../macropad_rp2040_zephyr/circuitpython.toml | 39 +++++++++++++++++++ ports/zephyr-cp/boards/board_aliases.cmake | 1 + 4 files changed, 61 insertions(+) create mode 100644 ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf create mode 100644 ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay create mode 100644 ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/circuitpython.toml diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf new file mode 100644 index 00000000000..36c064e7d23 --- /dev/null +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf @@ -0,0 +1,7 @@ +CONFIG_GPIO=y + +# Package pin map for the RP2040 QFN-56 used by this board. +CONFIG_IOBROKER_PACKAGE_RP2040_QFN56=y + +# Enable the SH1106 OLED via the Zephyr display subsystem +CONFIG_DISPLAY=y diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay new file mode 100644 index 00000000000..b58aab560e6 --- /dev/null +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay @@ -0,0 +1,14 @@ +/* Partition layout is owned by the mcuboot fork (dts/adafruit/adafruit_macropad_rp2040.dtsi) + * and applied to this image by sysbuild. This overlay only adds board/app config. */ +#include "../../../app.overlay" + +/* Free the key and encoder pins for keypad and rotaryio. */ +/ { + keys { + status = "disabled"; + }; + + encoder { + status = "disabled"; + }; +}; diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/circuitpython.toml b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/circuitpython.toml new file mode 100644 index 00000000000..6465776c0b5 --- /dev/null +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/circuitpython.toml @@ -0,0 +1,39 @@ +CIRCUITPY_BUILD_EXTENSIONS = ["uf2"] + +# Non-Zephyr build of the same board; nvm and CIRCUITPY must sit where it puts them. +counterpart = "raspberrypi/adafruit_macropad_rp2040" + + +# Pin names from the ports/ counterpart board's pins.c, as RP2040 QFN-56 +# package pin numbers. +[pins] +KEY1 = 3 +KEY2 = 4 +KEY3 = 5 +KEY4 = 6 +KEY5 = 7 +KEY6 = 8 +KEY7 = 9 +KEY8 = 11 +KEY9 = 12 +KEY10 = 13 +KEY11 = 14 +KEY12 = 15 +LED = 16 +SPEAKER_ENABLE = 17 +SPEAKER = 27 +ENCODER_SWITCH = 2 +BUTTON = 2 +ENCODER_A = 28 +ROTA = 28 +ENCODER_B = 29 +ROTB = 29 +NEOPIXEL = 30 +SDA = 31 +SCL = 32 +OLED_CS = 34 +OLED_RESET = 35 +OLED_DC = 36 +SCK = 38 +MOSI = 39 +MISO = 40 diff --git a/ports/zephyr-cp/boards/board_aliases.cmake b/ports/zephyr-cp/boards/board_aliases.cmake index 8e39f2e99bc..d636b047aab 100644 --- a/ports/zephyr-cp/boards/board_aliases.cmake +++ b/ports/zephyr-cp/boards/board_aliases.cmake @@ -31,6 +31,7 @@ cp_board_alias(adafruit_feather_nrf52840_zephyr adafruit_feather_nrf52840/nrf528 cp_board_alias(adafruit_feather_nrf52840_sense_zephyr adafruit_feather_nrf52840/nrf52840/sense/uf2) cp_board_alias(adafruit_feather_rp2040_zephyr adafruit_feather_rp2040/rp2040) cp_board_alias(adafruit_itsybitsy_nrf52840_zephyr adafruit_itsybitsy/nrf52840) +cp_board_alias(adafruit_macropad_rp2040_zephyr adafruit_macropad_rp2040/rp2040) cp_board_alias(native_native_sim native_sim/native) cp_board_alias(native_native_sim_asan native_sim/native) cp_board_alias(native_native_sim_lfs native_sim/native) From 600830f1ed374f880df516df35f52e85bb3c28db Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 15:23:12 -0400 Subject: [PATCH 4/6] zephyr-cp: add autogen_board_info.toml for the MacroPad RP2040 docs/shared_bindings_matrix.py needs it for every zephyr-cp board. Co-Authored-By: Claude Opus 5.5 --- .../autogen_board_info.toml | 136 ++++++++++++++++++ 1 file changed, 136 insertions(+) create mode 100644 ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/autogen_board_info.toml diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/autogen_board_info.toml b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/autogen_board_info.toml new file mode 100644 index 00000000000..6d769d78f3c --- /dev/null +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/autogen_board_info.toml @@ -0,0 +1,136 @@ +# This file is autogenerated when a board is built. Do not edit. Do commit it to git. Other scripts use its info. +name = "Adafruit Industries LLC Adafruit MacroPad RP2040" + +[modules] +__future__ = true +_bleio = false +_eve = false +_pew = false +_pixelmap = false +_stage = false +adafruit_bus_device = true +adafruit_pixelbuf = false +aesio = true +alarm = false +analogbufio = false +analogio = false +atexit = false +audiobusio = false +audiocore = false +audiodelays = false +audiofilewriter = false +audiofilters = false +audiofreeverb = false +audioi2sin = false +audioio = false +audiomixer = false +audiomp3 = false +audiopwmio = false +audiospeed = false +aurora_epaper = false +bitbangio = true +bitmapfilter = true # Zephyr board has busio +bitmaptools = true # Zephyr board has busio +bitops = false +board = true # Always enabled +busdisplay = true # Zephyr board has busio +busio = true # Zephyr board has busio +camera = false +canio = false +codeop = false +countio = false +digitalio = true +displayio = true # Zephyr board has displayio +dotclockframebuffer = false +dualbank = false +emmcio = false +epaperdisplay = true # Zephyr board has busio +floppyio = false +fontio = true # Zephyr board has busio +fourwire = true # Zephyr board has busio +framebufferio = true # Zephyr board has busio +frequencyio = false +getpass = true +gifio = true # Zephyr board has busio +gnss = false +hardwarekey = false +hashlib = true +hmac = false +hostnetwork = false +i2cdisplaybus = true # Zephyr board has busio +i2cioexpander = false +i2ctarget = false +imagecapture = false +ipaddress = false +is31fl3741 = false +jpegio = true # Zephyr board has busio +keypad = false +keypad_demux = false +locale = false +lvfontio = true # Zephyr board has busio +math = true +max3421e = false +mcp4822 = false +mdns = false +memorymap = false +memorymonitor = false +microcontroller = true +mii = false +mipidsi = false +msgpack = true +neopixel_write = false +nvm = true # Board has NVM partition +onewireio = false +os = true +paralleldisplaybus = false +picogame = false +ps2io = false +pulseio = false +pwmio = false +qrio = false +qspibus = false +rainbowio = true +random = true +rclcpy = false +rgbmatrix = false +rotaryio = true # Zephyr board has rotaryio +rtc = false +sdcardio = true # Zephyr board has busio +sdioio = false +sharpdisplay = true # Zephyr board has busio +socketpool = false +spitarget = false +ssl = false +storage = true +struct = true +supervisor = true +synthio = false +terminalio = true # Zephyr board has busio +tilepalettemapper = true # Zephyr board has busio +time = true +touchio = false +traceback = true +uheap = false +usb = false +usb_audio = false +usb_cdc = true +usb_hid = true +usb_host = false +usb_host_audio = false +usb_host_bulk = false +usb_midi = false +usb_video = false +ustack = false +vectorio = true # Zephyr board has busio +warnings = true +watchdog = true # Zephyr board has watchdog +wifi = false +zephyr_display = true # Zephyr board has zephyr_display +zephyr_kernel = false +zlib = true +# extmod modules shared with MicroPython +asyncio = true +binascii = true +json = true +re = true +select = true From 16a5cf9b757e14f21cfa2fbe6127fe6b75b6cc1d Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 18:22:35 -0400 Subject: [PATCH 5/6] zephyr-cp: MacroPad RP2040: I2C on the STEMMA QT connector Upstream puts the Zephyr console on uart1, on GPIO20/21, which are the STEMMA QT SDA/SCL pins. Remove the console, as the nRF52840 boards do, and enable i2c0. The zephyr_i2c label makes it board.STEMMA_I2C as well as board.I2C. Co-Authored-By: Mikey Sklar Co-Authored-By: Claude Opus 5.5 --- .../adafruit/macropad_rp2040_zephyr/board.conf | 4 ++++ .../macropad_rp2040_zephyr/board.overlay | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf index 36c064e7d23..eacb7c048d0 100644 --- a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf @@ -5,3 +5,7 @@ CONFIG_IOBROKER_PACKAGE_RP2040_QFN56=y # Enable the SH1106 OLED via the Zephyr display subsystem CONFIG_DISPLAY=y + +# No Zephyr UART console (see board.overlay), so SCL/SDA are free for I2C. +CONFIG_UART_CONSOLE=n +CONFIG_LOG_BACKEND_UART=n diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay index b58aab560e6..2c803566139 100644 --- a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay @@ -12,3 +12,20 @@ status = "disabled"; }; }; + +/* No Zephyr console, so SCL/SDA (GPIO21/20) are free for I2C0. */ +/ { + chosen { + /delete-property/ zephyr,console; + /delete-property/ zephyr,shell-uart; + }; +}; + +&uart1 { + status = "disabled"; +}; + +/* The zephyr_i2c label makes this board.STEMMA_I2C as well as board.I2C. */ +zephyr_i2c: &i2c0 { + status = "okay"; +}; From bb660f7c12f49aac28f6466004a46f9cb0a99c5d Mon Sep 17 00:00:00 2001 From: Dan Halbert Date: Thu, 22 Oct 2026 18:26:45 -0400 Subject: [PATCH 6/6] zephyr-cp: MacroPad RP2040: CONSOLE=1 console on the STEMMA QT pins A CONSOLE=1 or DEBUG=1 build puts the Zephyr console back on uart1, on the STEMMA QT pins (TX on SDA/GPIO20, RX on SCL/GPIO21), and disables i2c0, so board.I2C() and board.STEMMA_I2C are not available. Co-Authored-By: Claude Opus 5.5 --- .../adafruit/macropad_rp2040_zephyr/board.conf | 3 ++- .../macropad_rp2040_zephyr/board.overlay | 3 ++- .../macropad_rp2040_zephyr/console.overlay | 17 +++++++++++++++++ 3 files changed, 21 insertions(+), 2 deletions(-) create mode 100644 ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/console.overlay diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf index eacb7c048d0..cdf74780abb 100644 --- a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.conf @@ -6,6 +6,7 @@ CONFIG_IOBROKER_PACKAGE_RP2040_QFN56=y # Enable the SH1106 OLED via the Zephyr display subsystem CONFIG_DISPLAY=y -# No Zephyr UART console (see board.overlay), so SCL/SDA are free for I2C. +# No Zephyr UART console by default (see board.overlay), so SCL/SDA are free +# for I2C. A CONSOLE=1 build turns it back on in console.conf. CONFIG_UART_CONSOLE=n CONFIG_LOG_BACKEND_UART=n diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay index 2c803566139..4ab09025a06 100644 --- a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/board.overlay @@ -13,7 +13,8 @@ }; }; -/* No Zephyr console, so SCL/SDA (GPIO21/20) are free for I2C0. */ +/* No Zephyr console by default, so SCL/SDA (GPIO21/20) are free for I2C0. A + * CONSOLE=1 build puts the console back on UART1 (console.overlay). */ / { chosen { /delete-property/ zephyr,console; diff --git a/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/console.overlay b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/console.overlay new file mode 100644 index 00000000000..cc66afa94b8 --- /dev/null +++ b/ports/zephyr-cp/boards/adafruit/macropad_rp2040_zephyr/console.overlay @@ -0,0 +1,17 @@ +/* Applied after board.overlay in CONSOLE=1 and DEBUG=1 builds: the Zephyr + * console on UART1, on the STEMMA QT pins (TX on SDA/GPIO20, RX on SCL/GPIO21). + * board.I2C() and board.STEMMA_I2C are then not available. */ +/ { + chosen { + zephyr,console = &uart1; + zephyr,shell-uart = &uart1; + }; +}; + +&uart1 { + status = "okay"; +}; + +&i2c0 { + status = "disabled"; +};