Skip to content

Commit 1545dfd

Browse files
authored
WS2812: Support more than 5 pins in parallel mode (#455)
ws2812_parallel_program_init() contained an unneeded call to sm_config_set_set_pins(). When this is called with the pin_count parameter set to a value larger than 5, the set pin count value in the pinctrl register overflows into the side-set pin count. This can result in hard to diagnose issues where low numbered GPIO pins don't work as expected. There is an existing valid_params_if() check in sm_config_set_set_pins() which would catch this error but it is ignored in Release builds. This commit just removes this sm_config_set_set_pins() call as SET commands aren't even used by the associated PIO code. Discovered when trying to explain symptoms noted in this forum thread: https://forums.raspberrypi.com/viewtopic.php?t=362071 Co-authored-by: Adam Green <[email protected]>
1 parent b6303d8 commit 1545dfd

File tree

1 file changed

+0
-1
lines changed

1 file changed

+0
-1
lines changed

pio/ws2812/ws2812.pio

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,6 @@ static inline void ws2812_parallel_program_init(PIO pio, uint sm, uint offset, u
7777
pio_sm_config c = ws2812_parallel_program_get_default_config(offset);
7878
sm_config_set_out_shift(&c, true, true, 32);
7979
sm_config_set_out_pins(&c, pin_base, pin_count);
80-
sm_config_set_set_pins(&c, pin_base, pin_count);
8180
sm_config_set_fifo_join(&c, PIO_FIFO_JOIN_TX);
8281

8382
int cycles_per_bit = ws2812_parallel_T1 + ws2812_parallel_T2 + ws2812_parallel_T3;

0 commit comments

Comments
 (0)