# Kconfig - Display drivers

#
# Copyright (c) 2017 Intel Corporation
#
# SPDX-License-Identifier: Apache-2.0
#

config MICROBIT_DISPLAY
	bool "BBC micro:bit 5x5 LED Display support"
	depends on BOARD_BBC_MICROBIT
	depends on PRINTK
	depends on GPIO
	help
	  Enable this to be able to display images and text on the 5x5
	  LED matrix display on the BBC micro:bit.

if MICROBIT_DISPLAY

config MICROBIT_DISPLAY_PIN_GRANULARITY
	bool "Access the GPIO on a per-pin instead of per-port basis"
	help
	  By default, the micro:bit display driver will update the GPIO
	  pins of the display (pins 4 through 15) by accessing the entire
	  GPIO port. This is done for efficiency, however it may interfere
	  with other peripherals connected to the same GPIO port. Select
	  this option if other peripherals are connected to the same GPIO
	  port.

config MICROBIT_DISPLAY_STR_MAX
	int "Maximum length of strings that can be shown on the display"
	range 3 255
	default 40
	help
	  This value specifies the maximum length of strings that can
	  be displayed using the mb_display_string() and mb_display_print()
	  APIs.

endif # MICROBIT_DISPLAY
