#
# 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
	depends on !SPI_LEGACY_API
	default n
	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_NAME
	string "Driver name"
	default "ws2812_strip"
	help
		Device name for WS2812 LED strip.

config WS2812_STRIP_SPI_DEV_NAME
	string "SPI master to use to drive the strip"
	default ""
	help
		Specify the device name of the SPI master which the
		WS2812 driver should use to control the LED strip.
		The MOSI pin of this SPI peripheral should be connected
		to the signal pin for the first chip in the strip.
		Examples: SPI_0, SPI_1, etc.

config WS2812_STRIP_SPI_BAUD_RATE
	int "Baud rate to use to drive LED strip"
	default 5250000
	help
		SPI clock rate, in Hz, to use while driving the strip.
		The baud rate must be chosen carefully together with the
		WS2812_STRIP_SPI_ONE_FRAME and WS2812_STRIP_SPI_ZERO_FRAME
		values so that the transmitted frames meet the chipset
		pulse widths for one and zero bits. If unsure, keep the default,
		but enable SPI debug logging for your device and make sure the
		configuration is matched exactly at runtime.

config WS2812_STRIP_ONE_FRAME
	hex "SPI frame to shift out to signal a one bit"
	default 0x7c
	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
	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
