1.1.2 release
diff --git a/pico_sdk_version.cmake b/pico_sdk_version.cmake
index db48268..6481637 100644
--- a/pico_sdk_version.cmake
+++ b/pico_sdk_version.cmake
@@ -6,7 +6,7 @@
 set(PICO_SDK_VERSION_MINOR 1)
 # PICO_BUILD_DEFINE: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base
 # PICO_CONFIG: PICO_SDK_VERSION_REVISION, SDK version revision, type=int, group=pico_base
-set(PICO_SDK_VERSION_REVISION 1)
+set(PICO_SDK_VERSION_REVISION 2)
 # PICO_BUILD_DEFINE: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base
 # PICO_CONFIG: PICO_SDK_VERSION_PRE_RELEASE_ID, optional SDK pre-release version identifier, type=string, group=pico_base
 #set(PICO_SDK_VERSION_PRE_RELEASE_ID develop)
diff --git a/src/rp2_common/boot_stage2/CMakeLists.txt b/src/rp2_common/boot_stage2/CMakeLists.txt
index 99adf40..73c3e3e 100644
--- a/src/rp2_common/boot_stage2/CMakeLists.txt
+++ b/src/rp2_common/boot_stage2/CMakeLists.txt
@@ -1,10 +1,13 @@
-# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default stage2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build
-# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/boards/{PICO_DEFAULT_BOOT_STAGE2_FILE}.S, default=compile_time_choice, group=build
+# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2_FILE, Default boot stage 2 file to use unless overridden by pico_set_boot_stage2 on the TARGET; this setting is useful when explicitly setting the default build from a per board CMake file, group=build
+# PICO_CMAKE_CONFIG: PICO_DEFAULT_BOOT_STAGE2, Simpler alternative to specifying PICO_DEFAULT_BOOT_STAGE2_FILE where the file is src/rp2_common/boot_stage2/{PICO_DEFAULT_BOOT_STAGE2}.S, default=compile_time_choice, group=build
+
 if (DEFINED ENV{PICO_DEFAULT_BOOT_STAGE2_FILE})
     set(PICO_DEFAULT_BOOT_STAGE2_FILE $ENV{PICO_DEFAULT_BOOT_STAGE2_FILE})
     message("Using PICO_DEFAULT_BOOT_STAGE2_FILE from environment ('${PICO_DEFAULT_BOOT_STAGE2_FILE}')")
+elif (PICO_DEFAULT_BOOT_STAGE2_FILE)
+    # explicitly set, so cache it
+    set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot stage 2 source file" FORCE)
 endif()
-set(PICO_DEFAULT_BOOT_STAGE2_FILE "${PICO_DEFAULT_BOOT_STAGE2_FILE}" CACHE STRING "boot_stage2 source file" FORCE)
 
 set(PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME compile_time_choice) # local var
 if (NOT PICO_DEFAULT_BOOT_STAGE2_FILE)
@@ -15,12 +18,12 @@
     if (NOT DEFINED PICO_DEFAULT_BOOT_STAGE2)
         set(PICO_DEFAULT_BOOT_STAGE2 ${PICO_BOOT_STAGE2_COMPILE_TIME_CHOICE_NAME})
     endif()
-    set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot_stage2 short name" FORCE)
+    set(PICO_DEFAULT_BOOT_STAGE2 "${PICO_DEFAULT_BOOT_STAGE2}" CACHE STRING "boot stage 2 short name" FORCE)
     set(PICO_DEFAULT_BOOT_STAGE2_FILE "${CMAKE_CURRENT_LIST_DIR}/${PICO_DEFAULT_BOOT_STAGE2}.S")
 endif()
 
 if (NOT EXISTS ${PICO_DEFAULT_BOOT_STAGE2_FILE})
-    message(FATAL_ERROR "Specified boot_stage2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.")
+    message(FATAL_ERROR "Specified boot stage 2 source '${PICO_DEFAULT_BOOT_STAGE2_FILE}' does not exist.")
 endif()
 
 # needed by function below
@@ -52,7 +55,7 @@
 
     pico_add_dis_output(${NAME})
     pico_add_map_output(${NAME})
-    
+
     set(ORIGINAL_BIN ${CMAKE_CURRENT_BINARY_DIR}/${NAME}.bin)
     set(PADDED_CHECKSUMMED_ASM ${CMAKE_CURRENT_BINARY_DIR}/${NAME}_padded_checksummed.S)
 
@@ -60,7 +63,7 @@
 
     add_custom_target(${NAME}_bin DEPENDS ${ORIGINAL_BIN})
     add_custom_command(OUTPUT ${ORIGINAL_BIN} DEPENDS ${NAME} COMMAND ${CMAKE_OBJCOPY} -Obinary $<TARGET_FILE:${NAME}> ${ORIGINAL_BIN})
-    
+
     add_custom_target(${NAME}_padded_checksummed_asm DEPENDS ${PADDED_CHECKSUMMED_ASM})
     add_custom_command(OUTPUT ${PADDED_CHECKSUMMED_ASM} DEPENDS ${ORIGINAL_BIN}
             COMMAND ${Python3_EXECUTABLE} ${PICO_BOOT_STAGE2_DIR}/pad_checksum -s 0xffffffff ${ORIGINAL_BIN} ${PADDED_CHECKSUMMED_ASM}
@@ -89,7 +92,7 @@
     if ("EXECUTABLE" STREQUAL "${target_type}")
         set_target_properties(${TARGET} PROPERTIES PICO_TARGET_BOOT_STAGE2 "${NAME}")
     else()
-        message(FATAL_ERROR "boot stage2 implementation must be set on executable not library")
+        message(FATAL_ERROR "boot stage 2 implementation must be set on executable not library")
     endif()
 endmacro()
 
diff --git a/src/rp2_common/boot_stage2/compile_time_choice.S b/src/rp2_common/boot_stage2/compile_time_choice.S
index cacb9aa..5aa2b96 100644
--- a/src/rp2_common/boot_stage2/compile_time_choice.S
+++ b/src/rp2_common/boot_stage2/compile_time_choice.S
@@ -11,19 +11,9 @@
 #include "boot_stage2/config.h"
 
 #ifdef PICO_BUILD_BOOT_STAGE2_NAME
-    // boot stage2 is configured by cmake, so use the name specified there
+    // boot stage 2 is configured by cmake, so use the name specified there
     #error PICO_BUILD_BOOT_STAGE2_NAME should not be defined for compile_time_choice builds
 #else
-    // boot stage2 is selected by board configu header, so we have to do some work
-    #if PICO_BOOT_STAGE2_CHOOSE_IS25LP080
-        #include "boot2_is25lp080.S"
-    #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
-        #include "boot2_w28q080.S"
-    #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
-        #include "boot2_w25x10cl.S"
-    #elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
-        #include "boot2_generic_03h.S"
-    #else
-        #error unknown boot stage2 choice
-    #endif
+    // boot stage 2 is selected by board config header, and PICO_BOOT_STAGE2_ASM is set in boot_stage2/config.h
+    #include PICO_BOOT_STAGE2_ASM
 #endif
diff --git a/src/rp2_common/boot_stage2/include/boot_stage2/config.h b/src/rp2_common/boot_stage2/include/boot_stage2/config.h
index f6fdb9f..a8179b9 100644
--- a/src/rp2_common/boot_stage2/include/boot_stage2/config.h
+++ b/src/rp2_common/boot_stage2/include/boot_stage2/config.h
@@ -9,30 +9,74 @@
 
 // NOTE THIS HEADER IS INCLUDED FROM ASSEMBLY
 
+#include "pico/config.h"
+
 // PICO_CONFIG: PICO_BUILD_BOOT_STAGE2_NAME, The name of the boot stage 2 if selected by the build, group=boot_stage2
-// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
-// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w28q080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
-// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_is25lp080 as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=false, group=boot_stage2
-// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage2 selection is made by the CMake build, type=bool, default=true, group=boot_stage2
+#ifdef PICO_BUILD_BOOT_STAGE2_NAME
+    #define _BOOT_STAGE2_SELECTED
+#else
+    // check that multiple boot stage 2 options haven't been set...
+
+// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_IS25LP080, Select boot2_is25lp080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
+#ifndef PICO_BOOT_STAGE2_CHOOSE_IS25LP080
+    #define PICO_BOOT_STAGE2_CHOOSE_IS25LP080 0
+#elif PICO_BOOT_STAGE2_CHOOSE_IS25LP080
+    #ifdef _BOOT_STAGE2_SELECTED
+        #error multiple boot stage 2 options chosen
+    #endif
+    #define _BOOT_STAGE2_SELECTED
+#endif
+// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25Q080, Select boot2_w25q080 as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
+#ifndef PICO_BOOT_STAGE2_CHOOSE_W25Q080
+    #define PICO_BOOT_STAGE2_CHOOSE_W25Q080 0
+#elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
+    #ifdef _BOOT_STAGE2_SELECTED
+        #error multiple boot stage 2 options chosen
+    #endif
+    #define _BOOT_STAGE2_SELECTED
+#endif
+// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_W25X10CL, Select boot2_w25x10cl as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=0, group=boot_stage2
+#ifndef PICO_BOOT_STAGE2_CHOOSE_W25X10CL
+    #define PICO_BOOT_STAGE2_CHOOSE_W25X10CL 0
+#elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
+    #ifdef _BOOT_STAGE2_SELECTED
+        #error multiple boot stage 2 options chosen
+    #endif
+    #define _BOOT_STAGE2_SELECTED
+#endif
+// PICO_CONFIG: PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H, Select boot2_generic_03h as the boot stage 2 when no boot stage 2 selection is made by the CMake build, type=bool, default=1, group=boot_stage2
+#if defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) && PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
+    #ifdef _BOOT_STAGE2_SELECTED
+        #error multiple boot stage 2 options chosen
+    #endif
+    #define _BOOT_STAGE2_SELECTED
+#endif
+
+#endif // PICO_BUILD_BOOT_STAGE2_NAME
 
 #ifdef PICO_BUILD_BOOT_STAGE2_NAME
-    // boot stage2 is configured by cmake, so use the name specified there
+    // boot stage 2 is configured by cmake, so use the name specified there
     #define PICO_BOOT_STAGE2_NAME PICO_BUILD_BOOT_STAGE2_NAME
 #else
-    // boot stage2 is selected by board configu header, so we have to do some work
-    // NOTE: this switch is mirrored in compile_time_choice.S
+    // boot stage 2 is selected by board config header, so we have to do some work
     #if PICO_BOOT_STAGE2_CHOOSE_IS25LP080
-        #define PICO_BOOT_STAGE2_NAME "boot2_is25lp080"
+        #define _BOOT_STAGE2 boot2_is25lp080
     #elif PICO_BOOT_STAGE2_CHOOSE_W25Q080
-        #define PICO_BOOT_STAGE2_NAME "boot2_w28q080"
+        #define _BOOT_STAGE2 boot2_w25q080
     #elif PICO_BOOT_STAGE2_CHOOSE_W25X10CL
-        #define PICO_BOOT_STAGE2_NAME "boot2_w25x10cl"
-    #elif PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H || !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H)
+        #define _BOOT_STAGE2 boot2_w25x10cl
+    #elif !defined(PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H) || PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
         #undef PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H
         #define PICO_BOOT_STAGE2_CHOOSE_GENERIC_03H 1
-        #define PICO_BOOT_STAGE2_NAME "boot2_generic_03h"
+        #define _BOOT_STAGE2 boot2_generic_03h
     #else
-        #error no bootstage2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro
+        #error no boot stage 2 is defined by PICO_BOOT_STAGE2_CHOOSE_ macro
     #endif
+    // we can't include cdefs in assembly, so define our own, but avoid conflict with real ones for c inclusion
+    #define _PICO__STRING(x) #x
+    #define _PICO__XSTRING(x) _PICO__STRING(x)
+    #define _PICO__CONCAT1(x, y) x ## y
+    #define PICO_BOOT_STAGE2_NAME _PICO__XSTRING(_BOOT_STAGE2)
+    #define PICO_BOOT_STAGE2_ASM _PICO__XSTRING(_PICO__CONCAT1(_BOOT_STAGE2,.S))
 #endif
-#endif
\ No newline at end of file
+#endif
diff --git a/src/rp2_common/hardware_dma/dma.c b/src/rp2_common/hardware_dma/dma.c
index c912e7f..d648bfb 100644
--- a/src/rp2_common/hardware_dma/dma.c
+++ b/src/rp2_common/hardware_dma/dma.c
@@ -60,9 +60,10 @@
            ctrl & DMA_CH0_CTRL_TRIG_HIGH_PRIORITY_BITS ? 1 : 0,
            ctrl & DMA_CH0_CTRL_TRIG_EN_BITS ? 1 : 0);
 }
+#endif
 
-void check_dma_channel_param_impl(uint channel) {
+#if PARAM_ASSERTIONS_ENABLED(DMA)
+void check_dma_channel_param_impl(uint __unused channel) {
     valid_params_if(DMA, channel < NUM_DMA_CHANNELS);
 }
-
 #endif
diff --git a/src/rp2_common/hardware_gpio/gpio.c b/src/rp2_common/hardware_gpio/gpio.c
index b6335d0..a9b953b 100644
--- a/src/rp2_common/hardware_gpio/gpio.c
+++ b/src/rp2_common/hardware_gpio/gpio.c
@@ -27,7 +27,7 @@
 // This also clears the input/output/irq override bits.
 void gpio_set_function(uint gpio, enum gpio_function fn) {
     invalid_params_if(GPIO, gpio >= NUM_BANK0_GPIOS);
-    invalid_params_if(GPIO, fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS);
+    invalid_params_if(GPIO, ((uint32_t)fn << IO_BANK0_GPIO0_CTRL_FUNCSEL_LSB) & ~IO_BANK0_GPIO0_CTRL_FUNCSEL_BITS);
     // Set input enable on, output disable off
     hw_write_masked(&padsbank0_hw->io[gpio],
                    PADS_BANK0_GPIO0_IE_BITS,
diff --git a/src/rp2_common/hardware_pio/include/hardware/pio.h b/src/rp2_common/hardware_pio/include/hardware/pio.h
index 36194b8..1fc00f1 100644
--- a/src/rp2_common/hardware_pio/include/hardware/pio.h
+++ b/src/rp2_common/hardware_pio/include/hardware/pio.h
@@ -320,7 +320,7 @@
  * \param join Specifies the join type. \see enum pio_fifo_join
  */
 static inline void sm_config_set_fifo_join(pio_sm_config *c, enum pio_fifo_join join) {
-    valid_params_if(PIO, join >= PIO_FIFO_JOIN_NONE && join <= PIO_FIFO_JOIN_RX);
+    valid_params_if(PIO, join == PIO_FIFO_JOIN_NONE || join == PIO_FIFO_JOIN_TX || join == PIO_FIFO_JOIN_RX);
     c->shiftctrl = (c->shiftctrl & (uint)~(PIO_SM0_SHIFTCTRL_FJOIN_TX_BITS | PIO_SM0_SHIFTCTRL_FJOIN_RX_BITS)) |
                    (((uint)join) << PIO_SM0_SHIFTCTRL_FJOIN_TX_LSB);
 }
@@ -350,7 +350,7 @@
  * \param status_n parameter for the mov status operation (currently a bit count)
  */
 static inline void sm_config_set_mov_status(pio_sm_config *c, enum pio_mov_status_type status_sel, uint status_n) {
-    valid_params_if(PIO, status_sel >= STATUS_TX_LESSTHAN && status_sel <= STATUS_RX_LESSTHAN);
+    valid_params_if(PIO, status_sel == STATUS_TX_LESSTHAN || status_sel == STATUS_RX_LESSTHAN);
     c->execctrl = (c->execctrl
                    & ~(PIO_SM0_EXECCTRL_STATUS_SEL_BITS | PIO_SM0_EXECCTRL_STATUS_N_BITS))
                   | ((((uint)status_sel) << PIO_SM0_EXECCTRL_STATUS_SEL_LSB) & PIO_SM0_EXECCTRL_STATUS_SEL_BITS)
diff --git a/src/rp2_common/hardware_pwm/include/hardware/pwm.h b/src/rp2_common/hardware_pwm/include/hardware/pwm.h
index 768dae5..e071b72 100644
--- a/src/rp2_common/hardware_pwm/include/hardware/pwm.h
+++ b/src/rp2_common/hardware_pwm/include/hardware/pwm.h
@@ -47,10 +47,10 @@
  */
 enum pwm_clkdiv_mode
 {
-    PWM_DIV_FREE_RUNNING, ///< Free-running counting at rate dictated by fractional divider
-    PWM_DIV_B_HIGH,       ///< Fractional divider is gated by the PWM B pin
-    PWM_DIV_B_RISING,     ///< Fractional divider advances with each rising edge of the PWM B pin
-    PWM_DIV_B_FALLING     ///< Fractional divider advances with each falling edge of the PWM B pin
+    PWM_DIV_FREE_RUNNING = 0, ///< Free-running counting at rate dictated by fractional divider
+    PWM_DIV_B_HIGH = 1,       ///< Fractional divider is gated by the PWM B pin
+    PWM_DIV_B_RISING = 2,     ///< Fractional divider advances with each rising edge of the PWM B pin
+    PWM_DIV_B_FALLING = 3    ///< Fractional divider advances with each falling edge of the PWM B pin
 };
 
 enum pwm_chan
@@ -144,7 +144,10 @@
  * high level, rising edge or falling edge of the B pin input.
  */
 static inline void pwm_config_set_clkdiv_mode(pwm_config *c, enum pwm_clkdiv_mode mode) {
-    valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING);
+    valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING ||
+            mode == PWM_DIV_B_RISING ||
+            mode == PWM_DIV_B_HIGH ||
+            mode == PWM_DIV_B_FALLING);
     c->csr = (c->csr & ~PWM_CH0_CSR_DIVMODE_BITS)
         | (((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB);
 }
@@ -414,7 +417,10 @@
  */
 static inline void pwm_set_clkdiv_mode(uint slice_num, enum pwm_clkdiv_mode mode) {
     check_slice_num_param(slice_num);
-    valid_params_if(PWM, mode >= PWM_DIV_FREE_RUNNING && mode <= PWM_DIV_B_FALLING);
+    valid_params_if(PWM, mode == PWM_DIV_FREE_RUNNING ||
+                         mode == PWM_DIV_B_RISING ||
+                         mode == PWM_DIV_B_HIGH ||
+                         mode == PWM_DIV_B_FALLING);
     hw_write_masked(&pwm_hw->slice[slice_num].csr, ((uint)mode) << PWM_CH0_CSR_DIVMODE_LSB, PWM_CH0_CSR_DIVMODE_BITS);
 }
 
diff --git a/src/rp2_common/hardware_sync/include/hardware/sync.h b/src/rp2_common/hardware_sync/include/hardware/sync.h
index 3131375..b206346 100644
--- a/src/rp2_common/hardware_sync/include/hardware/sync.h
+++ b/src/rp2_common/hardware_sync/include/hardware/sync.h
@@ -204,9 +204,10 @@
  * \return The Spinlock ID
  */
 inline static uint spin_lock_get_num(spin_lock_t *lock) {
-    int lock_num = lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET);
-    invalid_params_if(SYNC, lock_num < 0 || lock_num >= NUM_SPIN_LOCKS);
-    return (uint) lock_num;
+    invalid_params_if(SYNC, (uint) lock < SIO_BASE + SIO_SPINLOCK0_OFFSET ||
+                            (uint) lock >= NUM_SPIN_LOCKS * sizeof(spin_lock_t) + SIO_BASE + SIO_SPINLOCK0_OFFSET ||
+                            ((uint) lock - SIO_BASE + SIO_SPINLOCK0_OFFSET) % sizeof(spin_lock_t) != 0);
+    return (uint) (lock - (spin_lock_t *) (SIO_BASE + SIO_SPINLOCK0_OFFSET));
 }
 
 /*! \brief Acquire a spin lock without disabling interrupts (hence unsafe)
diff --git a/src/rp2_common/pico_standard_link/binary_info.c b/src/rp2_common/pico_standard_link/binary_info.c
index bde2027..aa67ac4 100644
--- a/src/rp2_common/pico_standard_link/binary_info.c
+++ b/src/rp2_common/pico_standard_link/binary_info.c
@@ -6,7 +6,10 @@
 
 #if !PICO_NO_BINARY_INFO && !PICO_NO_PROGRAM_INFO
 #include "pico/binary_info.h"
+
+#if !PICO_NO_FLASH
 #include "boot_stage2/config.h"
+#endif
 
 // Note we put at most 4 pieces of binary info in the reset section because that's how much spare space we had
 // (picked the most common ones)... if there is a link failure because of .reset section overflow then move
@@ -89,4 +92,4 @@
 #endif
 #endif
 
-#endif
\ No newline at end of file
+#endif
diff --git a/test/kitchen_sink/CMakeLists.txt b/test/kitchen_sink/CMakeLists.txt
index 2976f76..a0bfe1a 100644
--- a/test/kitchen_sink/CMakeLists.txt
+++ b/test/kitchen_sink/CMakeLists.txt
@@ -66,6 +66,7 @@
         -Wfloat-equal
         -Wmissing-format-attribute
         -Wconversion
+        -Wsign-compare
         $<$<COMPILE_LANGUAGE:C>:-Wstrict-prototypes>
 
         -Wno-inline
@@ -85,7 +86,7 @@
         )
 
 target_compile_definitions(kitchen_sink_libs INTERFACE
-        NDEBUG
+        PARAM_ASSERTIONS_ENABLE_ALL=1 # want to check all the assertions for compilation warnings
         PICO_AUDIO_DMA_IRQ=1
 )
 
diff --git a/test/kitchen_sink/kitchen_sink.c b/test/kitchen_sink/kitchen_sink.c
index 033df3d..3fc7b53 100644
--- a/test/kitchen_sink/kitchen_sink.c
+++ b/test/kitchen_sink/kitchen_sink.c
@@ -5,18 +5,44 @@
  */
 
 #include <stdio.h>
-#include "pico/stdlib.h"
-#include "pico/time.h"
+// Include all headers to check for compiler warnings
+#include "hardware/adc.h"
+#include "hardware/claim.h"
+#include "hardware/clocks.h"
+#include "hardware/divider.h"
 #include "hardware/dma.h"
-#include "pico/bit_ops.h"
+#include "hardware/flash.h"
+#include "hardware/gpio.h"
 #include "hardware/i2c.h"
-#include "hardware/pwm.h"
-#include "hardware/pio.h"
+#include "hardware/interp.h"
 #include "hardware/irq.h"
+#include "hardware/pio.h"
+#include "hardware/pll.h"
+#include "hardware/pwm.h"
+#include "hardware/resets.h"
+#include "hardware/rtc.h"
+#include "hardware/spi.h"
+#include "hardware/sync.h"
 #include "hardware/timer.h"
-#include "pico/divider.h"
-#include "pico/critical_section.h"
+#include "hardware/uart.h"
+#include "hardware/vreg.h"
+#include "hardware/watchdog.h"
+#include "hardware/xosc.h"
 #include "pico/binary_info.h"
+#include "pico/bit_ops.h"
+#include "pico/bootrom.h"
+#include "pico/divider.h"
+#include "pico/double.h"
+#include "pico/fix/rp2040_usb_device_enumeration.h"
+#include "pico/float.h"
+#include "pico/int64_ops.h"
+#include "pico/malloc.h"
+#include "pico/multicore.h"
+#include "pico/printf.h"
+#include "pico/stdlib.h"
+#include "pico/sync.h"
+#include "pico/time.h"
+#include "pico/unique_id.h"
 
 bi_decl(bi_block_device(
                            BINARY_INFO_MAKE_TAG('K', 'S'),