Staging: add lcd-panel driver
This adds the lcd-panel parallel port driver to the staging tree. See the file, drivers/staging/panel/TODO for what needs to be fixed up in order for this to be properly merged into the rest of the kernel tree. Cc: Willy Tarreau <w@1wt.eu> Cc: Frank Menne <frank.menne@hsm.de> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
18223a99e6
commit
7005b58458
@@ -77,5 +77,7 @@ source "drivers/staging/comedi/Kconfig"
|
|||||||
|
|
||||||
source "drivers/staging/asus_oled/Kconfig"
|
source "drivers/staging/asus_oled/Kconfig"
|
||||||
|
|
||||||
|
source "drivers/staging/panel/Kconfig"
|
||||||
|
|
||||||
endif # !STAGING_EXCLUDE_BUILD
|
endif # !STAGING_EXCLUDE_BUILD
|
||||||
endif # STAGING
|
endif # STAGING
|
||||||
|
@@ -21,3 +21,4 @@ obj-$(CONFIG_RT2860) += rt2860/
|
|||||||
obj-$(CONFIG_BENET) += benet/
|
obj-$(CONFIG_BENET) += benet/
|
||||||
obj-$(CONFIG_COMEDI) += comedi/
|
obj-$(CONFIG_COMEDI) += comedi/
|
||||||
obj-$(CONFIG_ASUS_OLED) += asus_oled/
|
obj-$(CONFIG_ASUS_OLED) += asus_oled/
|
||||||
|
obj-$(CONFIG_PANEL) += panel/
|
||||||
|
290
drivers/staging/panel/Kconfig
Normal file
290
drivers/staging/panel/Kconfig
Normal file
@@ -0,0 +1,290 @@
|
|||||||
|
config PANEL
|
||||||
|
tristate "Parallel port LCD/Keypad Panel support"
|
||||||
|
depends on PARPORT
|
||||||
|
---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, and a
|
||||||
|
'smartcard' reader. The LCD is accessible through the /dev/lcd char
|
||||||
|
device (10, 156), the keypad through /dev/keypad (10, 185), and the
|
||||||
|
smartcard through /dev/smartcard (10, 186). Both require misc device
|
||||||
|
to be enabled. 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 PANEL_PARPORT
|
||||||
|
int "Default parallel port number (0=LPT1)"
|
||||||
|
depends on PANEL
|
||||||
|
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)"
|
||||||
|
depends on PANEL
|
||||||
|
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_SMARTCARD
|
||||||
|
depends on PANEL && PANEL_PROFILE="0"
|
||||||
|
bool "Enable smartcard reader (read help!)"
|
||||||
|
default "n"
|
||||||
|
---help---
|
||||||
|
This enables the 'smartcard' reader as installed on the server at
|
||||||
|
'www.ant-computing.com'. It was not really a smartcard reader, just
|
||||||
|
a telephone-card reader. It is left here for demonstration and
|
||||||
|
experimentation. If you enable this driver, it will be accessible
|
||||||
|
through character device 10,186.
|
||||||
|
|
||||||
|
config PANEL_KEYPAD
|
||||||
|
depends on PANEL && PANEL_PROFILE="0"
|
||||||
|
int "Keypad type (0=none, 1=old 6 keys, 2=new 6 keys, 3=Nexcom 4 keys)"
|
||||||
|
range 0 4
|
||||||
|
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 && 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 && 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 && 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 && 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 adressable 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 && 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 && 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 && 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 && 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 && 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 && 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 && 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 && 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 && 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).
|
||||||
|
|
||||||
|
config PANEL_CHANGE_MESSAGE
|
||||||
|
depends on PANEL
|
||||||
|
bool "Change LCD initialization message ?"
|
||||||
|
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 && 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.
|
1
drivers/staging/panel/Makefile
Normal file
1
drivers/staging/panel/Makefile
Normal file
@@ -0,0 +1 @@
|
|||||||
|
obj-$(CONFIG_PANEL) += panel.o
|
9
drivers/staging/panel/TODO
Normal file
9
drivers/staging/panel/TODO
Normal file
@@ -0,0 +1,9 @@
|
|||||||
|
TODO:
|
||||||
|
- checkpatch.pl cleanups
|
||||||
|
- Lindent
|
||||||
|
- review major/minor usages
|
||||||
|
- review userspace api
|
||||||
|
- see if all of this could be easier done in userspace instead.
|
||||||
|
|
||||||
|
Please send patches to Greg Kroah-Hartman <greg@kroah.com> and
|
||||||
|
Willy Tarreau <willy@meta-x.org>
|
24
drivers/staging/panel/lcd-panel-cgram.txt
Normal file
24
drivers/staging/panel/lcd-panel-cgram.txt
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
Some LCDs allow you to define up to 8 characters, mapped to ASCII
|
||||||
|
characters 0 to 7. The escape code to define a new character is
|
||||||
|
'\e[LG' followed by one digit from 0 to 7, representing the character
|
||||||
|
number, and up to 8 couples of hex digits terminated by a semi-colon
|
||||||
|
(';'). Each couple of digits represents a line, with 1-bits for each
|
||||||
|
illuminated pixel with LSB on the right. Lines are numberred from the
|
||||||
|
top of the character to the bottom. On a 5x7 matrix, only the 5 lower
|
||||||
|
bits of the 7 first bytes are used for each character. If the string
|
||||||
|
is incomplete, only complete lines will be redefined. Here are some
|
||||||
|
examples :
|
||||||
|
|
||||||
|
printf "\e[LG0010101050D1F0C04;" => 0 = [enter]
|
||||||
|
printf "\e[LG1040E1F0000000000;" => 1 = [up]
|
||||||
|
printf "\e[LG2000000001F0E0400;" => 2 = [down]
|
||||||
|
printf "\e[LG3040E1F001F0E0400;" => 3 = [up-down]
|
||||||
|
printf "\e[LG40002060E1E0E0602;" => 4 = [left]
|
||||||
|
printf "\e[LG500080C0E0F0E0C08;" => 5 = [right]
|
||||||
|
printf "\e[LG60016051516141400;" => 6 = "IP"
|
||||||
|
|
||||||
|
printf "\e[LG00103071F1F070301;" => big speaker
|
||||||
|
printf "\e[LG00002061E1E060200;" => small speaker
|
||||||
|
|
||||||
|
Willy
|
||||||
|
|
2343
drivers/staging/panel/panel.c
Normal file
2343
drivers/staging/panel/panel.c
Normal file
File diff suppressed because it is too large
Load Diff
Reference in New Issue
Block a user