Linux Audio

Check our new training course

Embedded Linux Audio

Check our new training course
with Creative Commons CC-BY-SA
lecture materials

Bootlin logo

Elixir Cross Referencer

Loading...
# 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