[Core] Allow custom timings for WS2812 PIO driver
Description
Allows setting of custom WS2812 timings using the defines found in ws2812.h, it also uses these timings as it's default now. Furthermore the reset timing is now applied correctly before starting a new transfer. Due to implementation details the waiting times are rounded to 50ns intervals.
WS2812 default timings
| Period | Time |
|---|---|
| WS2812_T1H | 900ns |
| WS2812_T1L | 350ns |
| WS2812_T0H | 350ns |
| WS2812_T0L | 900ns |
| RESET | 280us |
T1H + T1L

T0H + T0L

Reset

SK6812 timings
| Period | Time |
|---|---|
| WS2812_T1H | 500ns |
| WS2812_T1L | 450ns |
| WS2812_T0H | 400ns |
| WS2812_T0L | 750ns |
| RESET | 80us |
T1H + T1L

T0H + T0L

Reset
Deviation from 80us due to the driver choosing the longer T0H + T0L or T1H + T1L period which is irregular in this case.

Types of Changes
- [x] Core
- [x] Bugfix
- [x] New feature
- [x] Enhancement/optimization
- [ ] Keyboard (addition or update)
- [ ] Keymap/layout/userspace (addition or update)
- [x] Documentation
Issues Fixed or Closed by This PR
Checklist
- [x] My code follows the code style of this project: C, Python
- [x] I have read the PR Checklist document and have made the appropriate changes.
- [x] My change requires a change to the documentation.
- [x] I have updated the documentation accordingly.
- [x] I have read the CONTRIBUTING document.
- [ ] I have added tests to cover my changes.
- [x] I have tested the changes and verified that they work and don't break anything (as well as I can manage).
CC: @xyzz @jepler
Yay ARRAY_SIZE
@sigprof If you happen to have some spare time I would like your opinion on this implementation :slightly_smiling_face:
Tested and running stable since ~2 months on my RP2040 keyboard