# SPDX-License-Identifier: GPL-2.0
#
# For a description of the syntax of this configuration file,
# see Documentation/kbuild/kconfig-language.txt.
#
# 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 HD44780
	tristate "HD44780 Character LCD support"
	depends on GPIOLIB || COMPILE_TEST
	select CHARLCD
	---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_SYS_FILLRECT
	select FB_SYS_COPYAREA
	select FB_SYS_IMAGEBLIT
	select FB_SYS_FOPS
	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/auxdisplay/cfag12864b

	  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
	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 && OF && I2C && INPUT
	select FB_SYS_FOPS
	select FB_SYS_FILLRECT
	select FB_SYS_COPYAREA
	select FB_SYS_IMAGEBLIT
	select INPUT_MATRIXKMAP
	select FB_BACKLIGHT
	help
	  Say yes here to add support for Holtek HT16K33, RAM mapping 16*8
	  LED controller driver with keyscan.

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 CHARLCD
	---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

	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

config CHARLCD
	tristate "Character LCD core support" if COMPILE_TEST
