# SPDX-License-Identifier: GPL-2.0
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.rst.
#
# Auxiliary display drivers configuration.
#

menuconfig AUXDISPLAY
	bool "Auxiliary Display support"
	help
	  Say Y here to get to see options for auxiliary display drivers.
	  This option alone does not add any kernel code.

	  If you say N, all options in this submenu will be skipped and disabled.

if AUXDISPLAY

config CHARLCD
	tristate "Character LCD core support" if COMPILE_TEST
	help
	  This is the base system for character-based LCD displays.
	  It makes no sense to have this alone, you select your display driver
	  and if it needs the charlcd core, it will select it automatically.
	  This is some character LCD core interface that multiple drivers can
	  use.

config LINEDISP
	tristate "Character line display core support" if COMPILE_TEST
	help
	  This is the core support for single-line character displays, to be
	  selected by drivers that use it.

config HD44780_COMMON
	tristate "Common functions for HD44780 (and compatibles) LCD displays" if COMPILE_TEST
	select CHARLCD
	help
	  This is a module with the common symbols for HD44780 (and compatibles)
	  displays. This is the code that multiple other modules use. It is not
	  useful alone. If you have some sort of HD44780 compatible display,
	  you very likely use this. It is selected automatically by selecting
	  your concrete display.

config HD44780
	tristate "HD44780 Character LCD support"
	depends on GPIOLIB || COMPILE_TEST
	select HD44780_COMMON
	help
	  Enable support for Character LCDs using a HD44780 controller.
	  The LCD is accessible through the /dev/lcd char device (10, 156).
	  This code can either be compiled as a module, or linked into the
	  kernel and started at boot.
	  If you don't understand what all this is about, say N.

config KS0108
	tristate "KS0108 LCD Controller"
	depends on PARPORT_PC
	default n
	help
	  If you have a LCD controlled by one or more KS0108
	  controllers, say Y. You will need also another more specific
	  driver for your LCD.

	  Depends on Parallel Port support. If you say Y at
	  parport, you will be able to compile this as a module (M)
	  and built-in as well (Y).

	  To compile this as a module, choose M here:
	  the module will be called ks0108.

	  If unsure, say N.

config KS0108_PORT
	hex "Parallel port where the LCD is connected"
	depends on KS0108
	default 0x378
	help
	  The address of the parallel port where the LCD is connected.

	  The first  standard parallel port address is 0x378.
	  The second standard parallel port address is 0x278.
	  The third  standard parallel port address is 0x3BC.

	  You can specify a different address if you need.

	  If you don't know what I'm talking about, load the parport module,
	  and execute "dmesg" or "cat /proc/ioports". You can see there how
	  many parallel ports are present and which address each one has.

	  Usually you only need to use 0x378.

	  If you compile this as a module, you can still override this
	  using the module parameters.

config KS0108_DELAY
	int "Delay between each control writing (microseconds)"
	depends on KS0108
	default "2"
	help
	  Amount of time the ks0108 should wait between each control write
	  to the parallel port.

	  If your LCD seems to miss random writings, increment this.

	  If you don't know what I'm talking about, ignore it.

	  If you compile this as a module, you can still override this
	  value using the module parameters.

config CFAG12864B
	tristate "CFAG12864B LCD"
	depends on X86
	depends on FB
	depends on KS0108
	select FB_SYSMEM_HELPERS
	default n
	help
	  If you have a Crystalfontz 128x64 2-color LCD, cfag12864b Series,
	  say Y. You also need the ks0108 LCD Controller driver.

	  For help about how to wire your LCD to the parallel port,
	  check Documentation/admin-guide/auxdisplay/cfag12864b.rst

	  Depends on the x86 arch and the framebuffer support.

	  The LCD framebuffer driver can be attached to a console.
	  It will work fine. However, you can't attach it to the fbdev driver
	  of the xorg server.

	  To compile this as a module, choose M here:
	  the modules will be called cfag12864b and cfag12864bfb.

	  If unsure, say N.

config CFAG12864B_RATE
	int "Refresh rate (hertz)"
	depends on CFAG12864B
	default "20"
	help
	  Refresh rate of the LCD.

	  As the LCD is not memory mapped, the driver has to make the work by
	  software. This means you should be careful setting this value higher.
	  If your CPUs are really slow or you feel the system is slowed down,
	  decrease the value.

	  Be careful modifying this value to a very high value:
	  You can freeze the computer, or the LCD maybe can't draw as fast as you
	  are requesting.

	  If you don't know what I'm talking about, ignore it.

	  If you compile this as a module, you can still override this
	  value using the module parameters.

config IMG_ASCII_LCD
	tristate "Imagination Technologies ASCII LCD Display"
	depends on HAS_IOMEM
	default y if MIPS_MALTA
	select MFD_SYSCON
	select LINEDISP
	help
	  Enable this to support the simple ASCII LCD displays found on
	  development boards such as the MIPS Boston, MIPS Malta & MIPS SEAD3
	  from Imagination Technologies.

config HT16K33
	tristate "Holtek Ht16K33 LED controller with keyscan"
	depends on FB && I2C && INPUT
	select FB_SYSMEM_HELPERS
	select INPUT_MATRIXKMAP
	select FB_BACKLIGHT
	select NEW_LEDS
	select LEDS_CLASS
	select LINEDISP
	help
	  Say yes here to add support for Holtek HT16K33, RAM mapping 16*8
	  LED controller driver with keyscan.

config LCD2S
	tristate "lcd2s 20x4 character display over I2C console"
	depends on I2C
	select CHARLCD
	help
	  This is a driver that lets you use the lcd2s 20x4 character display
	  from Modtronix engineering as a console output device. The display
	  is a simple single color character display. You have to connect it
	  to an I2C bus.

config ARM_CHARLCD
	bool "ARM Ltd. Character LCD Driver"
	depends on PLAT_VERSATILE
	help
	  This is a driver for the character LCD found on the ARM Ltd.
	  Versatile and RealView Platform Baseboards. It doesn't do
	  very much more than display the text "ARM Linux" on the first
	  line and the Linux version on the second line, but that's
	  still useful.

menuconfig PARPORT_PANEL
	tristate "Parallel port LCD/Keypad Panel support"
	depends on PARPORT
	select HD44780_COMMON
	help
	  Say Y here if you have an HD44780 or KS-0074 LCD connected to your
	  parallel port. This driver also features 4 and 6-key keypads. The LCD
	  is accessible through the /dev/lcd char device (10, 156), and the
	  keypad through /dev/keypad (10, 185). This code can either be
	  compiled as a module, or linked into the kernel and started at boot.
	  If you don't understand what all this is about, say N.

if PARPORT_PANEL

config PANEL_PARPORT
	int "Default parallel port number (0=LPT1)"
	range 0 255
	default "0"
	help
	  This is the index of the parallel port the panel is connected to. One
	  driver instance only supports one parallel port, so if your keypad
	  and LCD are connected to two separate ports, you have to start two
	  modules with different arguments. Numbering starts with '0' for LPT1,
	  and so on.

config PANEL_PROFILE
	int "Default panel profile (0-5, 0=custom)"
	range 0 5
	default "5"
	help
	  To ease configuration, the driver supports different configuration
	  profiles for past and recent wirings. These profiles can also be
	  used to define an approximative configuration, completed by a few
	  other options. Here are the profiles :

	    0 = custom (see further)
	    1 = 2x16 parallel LCD, old keypad
	    2 = 2x16 serial LCD (KS-0074), new keypad
	    3 = 2x16 parallel LCD (Hantronix), no keypad
	    4 = 2x16 parallel LCD (Nexcom NSA1045) with Nexcom's keypad
	    5 = 2x40 parallel LCD (old one), with old keypad

	  Custom configurations allow you to define how your display is
	  wired to the parallel port, and how it works. This is only intended
	  for experts.

config PANEL_KEYPAD
	depends on PANEL_PROFILE="0"
	int "Keypad type (0=none, 1=old 6 keys, 2=new 6 keys, 3=Nexcom 4 keys)"
	range 0 3
	default 0
	help
	  This enables and configures a keypad connected to the parallel port.
	  The keys will be read from character device 10,185. Valid values are :

	    0 : do not enable this driver
	    1 : old 6 keys keypad
	    2 : new 6 keys keypad, as used on the server at www.ant-computing.com
	    3 : Nexcom NSA1045's 4 keys keypad

	  New profiles can be described in the driver source. The driver also
	  supports simultaneous keys pressed when the keypad supports them.

config PANEL_LCD
	depends on PANEL_PROFILE="0"
	int "LCD type (0=none, 1=custom, 2=old //, 3=ks0074, 4=hantronix, 5=Nexcom)"
	range 0 5
	default 0
	help
	   This enables and configures an LCD connected to the parallel port.
	   The driver includes an interpreter for escape codes starting with
	   '\e[L' which are specific to the LCD, and a few ANSI codes. The
	   driver will be registered as character device 10,156, usually
	   under the name '/dev/lcd'. There are a total of 6 supported types :

	     0 : do not enable the driver
	     1 : custom configuration and wiring (see further)
	     2 : 2x16 & 2x40 parallel LCD (old wiring)
	     3 : 2x16 serial LCD (KS-0074 based)
	     4 : 2x16 parallel LCD (Hantronix wiring)
	     5 : 2x16 parallel LCD (Nexcom wiring)

	   When type '1' is specified, other options will appear to configure
	   more precise aspects (wiring, dimensions, protocol, ...). Please note
	   that those values changed from the 2.4 driver for better consistency.

config PANEL_LCD_HEIGHT
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "Number of lines on the LCD (1-2)"
	range 1 2
	default 2
	help
	  This is the number of visible character lines on the LCD in custom profile.
	  It can either be 1 or 2.

config PANEL_LCD_WIDTH
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "Number of characters per line on the LCD (1-40)"
	range 1 40
	default 40
	help
	  This is the number of characters per line on the LCD in custom profile.
	  Common values are 16,20,24,40.

config PANEL_LCD_BWIDTH
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "Internal LCD line width (1-40, 40 by default)"
	range 1 40
	default 40
	help
	  Most LCDs use a standard controller which supports hardware lines of 40
	  characters, although sometimes only 16, 20 or 24 of them are really wired
	  to the terminal. This results in some non-visible but addressable characters,
	  and is the case for most parallel LCDs. Other LCDs, and some serial ones,
	  however, use the same line width internally as what is visible. The KS0074
	  for example, uses 16 characters per line for 16 visible characters per line.

	  This option lets you configure the value used by your LCD in 'custom' profile.
	  If you don't know, put '40' here.

config PANEL_LCD_HWIDTH
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "Hardware LCD line width (1-64, 64 by default)"
	range 1 64
	default 64
	help
	  Most LCDs use a single address bit to differentiate line 0 and line 1. Since
	  some of them need to be able to address 40 chars with the lower bits, they
	  often use the immediately superior power of 2, which is 64, to address the
	  next line.

	  If you don't know what your LCD uses, in doubt let 16 here for a 2x16, and
	  64 here for a 2x40.

config PANEL_LCD_CHARSET
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "LCD character set (0=normal, 1=KS0074)"
	range 0 1
	default 0
	help
	  Some controllers such as the KS0074 use a somewhat strange character set
	  where many symbols are at unusual places. The driver knows how to map
	  'standard' ASCII characters to the character sets used by these controllers.
	  Valid values are :

	     0 : normal (untranslated) character set
	     1 : KS0074 character set

	  If you don't know, use the normal one (0).

config PANEL_LCD_PROTO
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "LCD communication mode (0=parallel 8 bits, 1=serial)"
	range 0 1
	default 0
	help
	  This driver now supports any serial or parallel LCD wired to a parallel
	  port. But before assigning signals, the driver needs to know if it will
	  be driving a serial LCD or a parallel one. Serial LCDs only use 2 wires
	  (SDA/SCL), while parallel ones use 2 or 3 wires for the control signals
	  (E, RS, sometimes RW), and 4 or 8 for the data. Use 0 here for a 8 bits
	  parallel LCD, and 1 for a serial LCD.

config PANEL_LCD_PIN_E
	depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
	int "Parallel port pin number & polarity connected to the LCD E signal (-17...17) "
	range -17 17
	default 14
	help
	  This describes the number of the parallel port pin to which the LCD 'E'
	  signal has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'E' pin in custom profile is '14' (AUTOFEED).

config PANEL_LCD_PIN_RS
	depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
	int "Parallel port pin number & polarity connected to the LCD RS signal (-17...17) "
	range -17 17
	default 17
	help
	  This describes the number of the parallel port pin to which the LCD 'RS'
	  signal has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'RS' pin in custom profile is '17' (SELECT IN).

config PANEL_LCD_PIN_RW
	depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO="0"
	int "Parallel port pin number & polarity connected to the LCD RW signal (-17...17) "
	range -17 17
	default 16
	help
	  This describes the number of the parallel port pin to which the LCD 'RW'
	  signal has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'RW' pin in custom profile is '16' (INIT).

config PANEL_LCD_PIN_SCL
	depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
	int "Parallel port pin number & polarity connected to the LCD SCL signal (-17...17) "
	range -17 17
	default 1
	help
	  This describes the number of the parallel port pin to which the serial
	  LCD 'SCL' signal has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'SCL' pin in custom profile is '1' (STROBE).

config PANEL_LCD_PIN_SDA
	depends on PANEL_PROFILE="0" && PANEL_LCD="1" && PANEL_LCD_PROTO!="0"
	int "Parallel port pin number & polarity connected to the LCD SDA signal (-17...17) "
	range -17 17
	default 2
	help
	  This describes the number of the parallel port pin to which the serial
	  LCD 'SDA' signal has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'SDA' pin in custom profile is '2' (D0).

config PANEL_LCD_PIN_BL
	depends on PANEL_PROFILE="0" && PANEL_LCD="1"
	int "Parallel port pin number & polarity connected to the LCD backlight signal (-17...17) "
	range -17 17
	default 0
	help
	  This describes the number of the parallel port pin to which the LCD 'BL' signal
	  has been connected. It can be :

	          0 : no connection (eg: connected to ground)
	      1..17 : directly connected to any of these pins on the DB25 plug
	    -1..-17 : connected to the same pin through an inverter (eg: transistor).

	  Default for the 'BL' pin in custom profile is '0' (uncontrolled).

endif # PARPORT_PANEL

config PANEL_CHANGE_MESSAGE
	bool "Change LCD initialization message ?"
	depends on CHARLCD
	default "n"
	help
	  This allows you to replace the boot message indicating the kernel version
	  and the driver version with a custom message. This is useful on appliances
	  where a simple 'Starting system' message can be enough to stop a customer
	  from worrying.

	  If you say 'Y' here, you'll be able to choose a message yourself. Otherwise,
	  say 'N' and keep the default message with the version.

config PANEL_BOOT_MESSAGE
	depends on PANEL_CHANGE_MESSAGE="y"
	string "New initialization message"
	default ""
	help
	  This allows you to replace the boot message indicating the kernel version
	  and the driver version with a custom message. This is useful on appliances
	  where a simple 'Starting system' message can be enough to stop a customer
	  from worrying.

	  An empty message will only clear the display at driver init time. Any other
	  printf()-formatted message is valid with newline and escape codes.

choice
	prompt "Backlight initial state"
	default CHARLCD_BL_FLASH
	help
	  Select the initial backlight state on boot or module load.

	  Previously, there was no option for this: the backlight flashed
	  briefly on init. Now you can also turn it off/on.

	config CHARLCD_BL_OFF
		bool "Off"
		help
		  Backlight is initially turned off

	config CHARLCD_BL_ON
		bool "On"
		help
		  Backlight is initially turned on

	config CHARLCD_BL_FLASH
		bool "Flash"
		help
		  Backlight is flashed briefly on init

endchoice

endif # AUXDISPLAY

config PANEL
	tristate "Parallel port LCD/Keypad Panel support (OLD OPTION)"
	depends on PARPORT
	select AUXDISPLAY
	select PARPORT_PANEL
