Support a wsdisplay(4) attachment on a tslcd

This commit is contained in:
joff 2005-02-04 06:02:36 +00:00
parent 89f2c62a84
commit 32262aa8f2
3 changed files with 94 additions and 21 deletions

View File

@ -1,4 +1,4 @@
# $NetBSD: TS7200,v 1.10 2005/01/31 16:54:33 hannken Exp $
# $NetBSD: TS7200,v 1.11 2005/02/04 06:02:36 joff Exp $
#
# GENERIC -- Generic kernel
#
@ -169,6 +169,7 @@ wdc0 at tspld?
tsrtc* at tspld?
# HD44780 LCD on LCD header
tslcd* at tspld?
wsdisplay* at tslcd? console ?
# 4x4 Matrix Keypad on DIO header
tskp* at tspld?
wskbd* at tskp? console ? mux 1
@ -272,8 +273,8 @@ uhidev* at uhub? port ? configuration ? interface ?
# wsmouse* at uep? mux 0
# USB Keyboards
#ukbd* at uhidev? reportid ?
# wskbd* at ukbd? console ? mux 1
ukbd* at uhidev? reportid ?
wskbd* at ukbd? console ? mux 1
# USB Generic HID devices
uhid* at uhidev? reportid ?
@ -425,6 +426,49 @@ pseudo-device ksyms # /dev/ksyms
#pseudo-device swdmover # softare dmover(9) back-end
#pseudo-device dmoverio # /dev/dmover dmover(9) interface
#
# wscons options
#
# builtin terminal emulations
#options WSEMUL_SUN # sun terminal emulation
options WSEMUL_VT100 # VT100 / VT220 emulation
# customization of console and kernel output - see dev/wscons/wsdisplayvar.h
#options WSDISPLAY_CUSTOM_OUTPUT # color customization from wsconsctl(8)
#options WS_DEFAULT_FG=WSCOL_WHITE
#options WS_DEFAULT_BG=WSCOL_BLACK
#options WS_DEFAULT_COLATTR="(0)"
#options WS_DEFAULT_MONOATTR="(0)"
#options WS_KERNEL_FG=WSCOL_GREEN
#options WS_KERNEL_BG=WSCOL_BLACK
#options WS_KERNEL_COLATTR=""
#options WS_KERNEL_MONOATTR=""
# customization of console border color
#options WSDISPLAY_CUSTOM_BORDER # border customization from wsconsctl(8)
#options WSDISPLAY_BORDER_COLOR=WSCOL_BLUE # default color
# compatibility to other console drivers
#options WSDISPLAY_COMPAT_PCVT # emulate some ioctls
#options WSDISPLAY_COMPAT_SYSCONS # emulate some ioctls
#options WSDISPLAY_COMPAT_USL # VT handling
#options WSDISPLAY_COMPAT_RAWKBD # can get raw scancodes
# see dev/pckbc/wskbdmap_mfii.c for implemented layouts
#options PCKBD_LAYOUT="(KB_DE | KB_NODEAD)"
# allocate a number of virtual screens at autoconfiguration time
#options WSDISPLAY_DEFAULTSCREENS=4
# use a large software cursor that doesn't blink
#options PCDISPLAY_SOFTCURSOR
# modify the screen type of the console; defaults to "80x25"
#options VGA_CONSOLE_SCREENTYPE="\"80x24\""
# work around a hardware bug that loaded fonts don't work; found on ATI cards
#options VGA_CONSOLE_ATI_BROKEN_FONTSEL
# the following enables some functions to get mouse console support.
# if you want a really secure system, it may be better not to enable them,
# see wsmoused(8), section SECURITY CONSIDERATIONS for more info.
#options WSDISPLAY_CHARFUNCS # mouse console support
# console scrolling support.
#options WSDISPLAY_SCROLLSUPPORT
# enable VGA raster mode capable of displaying multilingual text on console
#options VGA_RASTERCONSOLE
# wscons pseudo-devices
pseudo-device wsmux # mouse & keyboard multiplexor
#pseudo-device wsfont

View File

@ -1,4 +1,4 @@
# $NetBSD: files.tsarm,v 1.6 2005/01/31 06:12:35 joff Exp $
# $NetBSD: files.tsarm,v 1.7 2005/02/04 06:02:36 joff Exp $
#
# First try for arm-specific configuration info
#
@ -31,7 +31,7 @@ device tsrtc: mc146818
attach tsrtc at tspldbus
file arch/evbarm/tsarm/tsrtc.c tsrtc
device tslcd: hd44780
device tslcd: hd44780, wsemuldisplaydev
attach tslcd at tspldbus
file arch/evbarm/tsarm/tslcd.c tslcd

View File

@ -1,4 +1,4 @@
/* $NetBSD: tslcd.c,v 1.3 2005/01/11 00:59:06 joff Exp $ */
/* $NetBSD: tslcd.c,v 1.4 2005/02/04 06:02:36 joff Exp $ */
/*-
* Copyright (c) 1998 The NetBSD Foundation, Inc.
@ -36,7 +36,7 @@
* POSSIBILITY OF SUCH DAMAGE.
*/
#include <sys/cdefs.h>
__KERNEL_RCSID(0, "$NetBSD: tslcd.c,v 1.3 2005/01/11 00:59:06 joff Exp $");
__KERNEL_RCSID(0, "$NetBSD: tslcd.c,v 1.4 2005/02/04 06:02:36 joff Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@ -54,6 +54,10 @@ __KERNEL_RCSID(0, "$NetBSD: tslcd.c,v 1.3 2005/01/11 00:59:06 joff Exp $");
#include <machine/bus.h>
#include <machine/autoconf.h>
#include <dev/wscons/wsdisplayvar.h>
#include <dev/wscons/wsconsio.h>
#include <dev/wscons/wscons_callbacks.h>
#include <arm/ep93xx/ep93xxreg.h>
#include <dev/ic/hd44780reg.h>
#include <dev/ic/hd44780var.h>
@ -62,7 +66,7 @@ __KERNEL_RCSID(0, "$NetBSD: tslcd.c,v 1.3 2005/01/11 00:59:06 joff Exp $");
struct tslcd_softc {
struct device sc_dev;
struct hd44780_chip sc_lcd;
struct hd44780_chip sc_hlcd;
bus_space_tag_t sc_iot;
bus_space_handle_t sc_gpioh;
};
@ -85,11 +89,29 @@ const struct cdevsw tslcd_cdevsw = {
nostop, notty, tslcdpoll, nommap,
};
extern const struct wsdisplay_emulops hlcd_emulops;
extern const struct wsdisplay_accessops hlcd_accessops;
extern struct cfdriver tslcd_cd;
CFATTACH_DECL(tslcd, sizeof(struct tslcd_softc),
tslcd_match, tslcd_attach, NULL, NULL);
static const struct wsscreen_descr tslcd_stdscreen = {
"std_tslcd", 24, 2,
&hlcd_emulops,
5, 7,
0,
};
static const struct wsscreen_descr *_tslcd_scrlist[] = {
&tslcd_stdscreen,
};
static const struct wsscreen_list tslcd_screenlist = {
sizeof(_tslcd_scrlist) / sizeof(struct wsscreen_descr *),
_tslcd_scrlist,
};
static int
tslcd_match(parent, match, aux)
struct device *parent;
@ -119,20 +141,21 @@ tslcd_attach(parent, self, aux)
{
struct tslcd_softc *sc = (void *)self;
struct tspld_attach_args *taa = aux;
struct wsemuldisplaydev_attach_args waa;
sc->sc_iot = taa->ta_iot;
if (bus_space_map(sc->sc_iot, EP93XX_APB_HWBASE + EP93XX_APB_GPIO,
EP93XX_APB_GPIO_SIZE, 0, &sc->sc_gpioh))
panic("tslcd_attach: couldn't map GPIO registers");
sc->sc_lcd.sc_dev_ok = 1;
sc->sc_lcd.sc_rows = 24;
sc->sc_lcd.sc_vrows = 40;
sc->sc_lcd.sc_flags = HD_8BIT | HD_MULTILINE;
sc->sc_lcd.sc_dev = self;
sc->sc_hlcd.sc_dev_ok = 1;
sc->sc_hlcd.sc_cols = 24;
sc->sc_hlcd.sc_vcols = 40;
sc->sc_hlcd.sc_flags = HD_8BIT | HD_MULTILINE;
sc->sc_hlcd.sc_dev = self;
sc->sc_lcd.sc_writereg = tslcd_writereg;
sc->sc_lcd.sc_readreg = tslcd_readreg;
sc->sc_hlcd.sc_writereg = tslcd_writereg;
sc->sc_hlcd.sc_readreg = tslcd_readreg;
GPIO_SET(PADDR, 0); /* Port A to inputs */
GPIO_SETBITS(PHDDR, 0x38); /* Bits 3:5 of Port H to outputs */
@ -140,7 +163,13 @@ tslcd_attach(parent, self, aux)
printf("\n");
hd44780_attach_subr(&sc->sc_lcd);
hd44780_attach_subr(&sc->sc_hlcd);
waa.console = 0;
waa.scrdata = &tslcd_screenlist;
waa.accessops = &hlcd_accessops;
waa.accesscookie = &sc->sc_hlcd.sc_screen;
config_found(self, &waa, wsemuldisplaydevprint);
}
static void
@ -242,8 +271,8 @@ tslcdopen(dev, flag, mode, p)
{
struct tslcd_softc *sc = device_lookup(&tslcd_cd, minor(dev));
if (sc->sc_lcd.sc_dev_ok == 0)
return hd44780_init(&sc->sc_lcd);
if (sc->sc_hlcd.sc_dev_ok == 0)
return hd44780_init(&sc->sc_hlcd);
else
return 0;
}
@ -276,7 +305,7 @@ tslcdwrite(dev, uio, flag)
struct hd44780_io io;
struct tslcd_softc *sc = device_lookup(&tslcd_cd, minor(dev));
if (sc->sc_lcd.sc_dev_ok == 0)
if (sc->sc_hlcd.sc_dev_ok == 0)
return EIO;
io.dat = 0;
@ -287,7 +316,7 @@ tslcdwrite(dev, uio, flag)
if ((error = uiomove((void*)io.buf, io.len, uio)) != 0)
return error;
hd44780_ddram_redraw(&sc->sc_lcd, &io);
hd44780_ddram_redraw(&sc->sc_hlcd, &io);
return 0;
}
@ -300,7 +329,7 @@ tslcdioctl(dev, cmd, data, flag, p)
struct proc *p;
{
struct tslcd_softc *sc = device_lookup(&tslcd_cd, minor(dev));
return hd44780_ioctl_subr(&sc->sc_lcd, cmd, data);
return hd44780_ioctl_subr(&sc->sc_hlcd, cmd, data);
}
int