diff options
author | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-03-02 13:43:36 -0700 |
---|---|---|
committer | Luke T. Shumaker <lukeshu@lukeshu.com> | 2025-03-02 23:45:00 -0700 |
commit | c63584e6bcb934d84ef277cdc4619763a41f1bbe (patch) | |
tree | e41582ae16b317e810daab154f3fd8677028a51f /libhw | |
parent | fe6b92f8b700db5310164339e71110953a59e110 (diff) |
libhw: w5500: Add a VALIDATE_SPI toggle
Diffstat (limited to 'libhw')
-rw-r--r-- | libhw/w5500.c | 14 |
1 files changed, 12 insertions, 2 deletions
diff --git a/libhw/w5500.c b/libhw/w5500.c index fafc846..0f15785 100644 --- a/libhw/w5500.c +++ b/libhw/w5500.c @@ -96,6 +96,9 @@ #ifndef CONFIG_W5500_LOCAL_PORT_MAX #error config.h must define CONFIG_W5500_LOCAL_PORT_MAX #endif +#ifndef CONFIG_W5500_VALIDATE_SPI + #error config.h must define CONFIG_W5500_VALIDATE_SPI +#endif #ifndef CONFIG_W5500_DEBUG #error config.h must define CONFIG_W5500_DEBUG #endif @@ -312,14 +315,21 @@ void _w5500_init(struct w5500 *chip, }; } +#if CONFIG_W5500_VALIDATE_SPI /* Validate that SPI works correctly. */ + bool spi_ok = true; for (uint16_t a = 0; a < 0x100; a++) { w5500ll_write_sock_reg(chip->spidev, 0, mode, a); uint8_t b = w5500ll_read_sock_reg(chip->spidev, 0, mode); - if (b != a) - errorf("SPI to W5500 does not appear to be functional: wrote:%d != read:%d", a, b); + if (b != a) { + errorf("SPI to W5500 does not appear to be functional: wrote:0x%02"PRIx16" != read:0x%02"PRIx8, a, b); + spi_ok = false; + } } + if (!spi_ok) + __lm_abort(); w5500ll_write_sock_reg(chip->spidev, 0, mode, 0); +#endif /* Initialize the hardware. */ gpioirq_set_and_enable_exclusive_handler(pin_intr, GPIO_IRQ_EDGE_FALL, w5500_intrhandler, chip); |