| # |
| # Copyright (c) 2017 Linaro Limited |
| # |
| # SPDX-License-Identifier: Apache-2.0 |
| # |
| |
| # The following blog post is an excellent resource about pulse timing: |
| # |
| # https://wp.josh.com/2014/05/13/ws2812-neopixels-are-not-so-finicky-once-you-get-to-know-them/ |
| |
| menuconfig WS2812_STRIP |
| bool "Enable WS2812 (and compatible) LED strip driver" |
| depends on SPI |
| help |
| Enable LED strip driver for daisy chains of WS2812-ish |
| (or WS2812B, WS2813, SK6812, or compatible) devices. |
| These devices have a one-wire communications interface |
| which encodes bits using pulses. Short pulses indicate |
| zero bits, and long pulses indicate ones; refer to the |
| chip datasheets for precise specifications. To implement |
| this in a multitasking operating system, this driver |
| generates the pulses using a SPI peripheral. |
| |
| if WS2812_STRIP |
| |
| config WS2812_STRIP_MAX_PIXELS |
| int "Maximum number of pixels in a strip" |
| default 12 |
| help |
| Set this to the maximum number of pixels you need |
| to control at once. There is an 8x memory penalty associated |
| with each increment of this value, so it's worth optimizing. |
| |
| config WS2812_STRIP_ONE_FRAME |
| hex "SPI frame to shift out to signal a one bit" |
| default 0x7c if SOC_SERIES_STM32F4X |
| default 0x70 if SOC_FAMILY_NRF |
| help |
| When shifted out at the configured clock frequency, |
| this must generate a pulse whose width fits within the chipset |
| specifications for T1H, and whose interpulse timing meets low |
| times. It is recommended that the first and last bits in the |
| frame be zero; this "encourages" SPI IPs to leave MOSI low |
| between frames. |
| |
| config WS2812_STRIP_ZERO_FRAME |
| hex "SPI frame to shift out to signal a zero bit" |
| default 0x60 if SOC_SERIES_STM32F4X |
| default 0x40 if SOC_FAMILY_NRF |
| help |
| When shifted out at the configured clock frequency, |
| this must generate a pulse whose width fits within the chipset |
| specifications for T0H, and whose interpulse timing meets low |
| times. It is recommended that the first and last bits in the |
| frame be zero; this "encourages" SPI IPs to leave MOSI low |
| between frames. |
| |
| # By default, we use GRBW [sic] (and ignore W). |
| comment "The following options determine channel data order on the wire." |
| |
| config WS2812_RED_ORDER |
| int "Order in which a red pixel should be shifted out" |
| default 1 |
| range 0 3 |
| help |
| If the red channel is shifted out first, specify 0. |
| If second, specify 1, and so on. |
| |
| config WS2812_GRN_ORDER |
| int "Order in which a green pixel should be shifted out" |
| default 0 |
| range 0 3 |
| help |
| If the green channel is shifted out first, specify 0. |
| If second, specify 1, and so on. |
| |
| config WS2812_BLU_ORDER |
| int "Order in which a blue pixel should be shifted out" |
| default 2 |
| range 0 3 |
| help |
| If the blue channel is shifted out first, specify 0. |
| If second, specify 1, and so on. |
| |
| config WS2812_HAS_WHITE_CHANNEL |
| bool "Does the chip have a white channel on wire?" |
| default y |
| help |
| If the chipset has a white channel, say y. White channels |
| are not used by the driver, but must be declared if expected |
| by the chip. |
| |
| config WS2812_WHT_ORDER |
| int "Order in which a white pixel should be shifted out" |
| default 3 |
| range 0 3 |
| depends on WS2812_HAS_WHITE_CHANNEL |
| help |
| If the blue channel is shifted out first, specify 0. |
| If second, specify 1, and so on. |
| |
| endif # WS2812_STRIP |