Implement trivial WSDISPLAYIO_SVIDEO that flips DON bit in LCDLDR1.
This only turns off the display in the LCD controller. TODO: Need to add a platform specific way to turn the screen on and off as well (e.g. on Jornada 680 this is bit 0 in hd64461 GPIO port B).
This commit is contained in:
parent
680e83de11
commit
9df7e01734
|
@ -1,4 +1,4 @@
|
||||||
/* $NetBSD: hd64461video.c,v 1.20 2003/11/01 03:45:52 uwe Exp $ */
|
/* $NetBSD: hd64461video.c,v 1.21 2003/11/09 02:05:42 uwe Exp $ */
|
||||||
|
|
||||||
/*-
|
/*-
|
||||||
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
|
* Copyright (c) 2001, 2002 The NetBSD Foundation, Inc.
|
||||||
|
@ -37,7 +37,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
__KERNEL_RCSID(0, "$NetBSD: hd64461video.c,v 1.20 2003/11/01 03:45:52 uwe Exp $");
|
__KERNEL_RCSID(0, "$NetBSD: hd64461video.c,v 1.21 2003/11/09 02:05:42 uwe Exp $");
|
||||||
|
|
||||||
#include "debug_hpcsh.h"
|
#include "debug_hpcsh.h"
|
||||||
// #define HD64461VIDEO_HWACCEL
|
// #define HD64461VIDEO_HWACCEL
|
||||||
|
@ -111,6 +111,7 @@ STATIC struct hd64461video_chip {
|
||||||
struct hpcfb_fbconf hf;
|
struct hpcfb_fbconf hf;
|
||||||
u_int8_t *off_screen_addr;
|
u_int8_t *off_screen_addr;
|
||||||
size_t off_screen_size;
|
size_t off_screen_size;
|
||||||
|
int blanked;
|
||||||
|
|
||||||
int console;
|
int console;
|
||||||
} hd64461video_chip;
|
} hd64461video_chip;
|
||||||
|
@ -130,6 +131,9 @@ STATIC void hd64461video_set_clut(struct hd64461video_chip *, int, int,
|
||||||
u_int8_t *, u_int8_t *, u_int8_t *);
|
u_int8_t *, u_int8_t *, u_int8_t *);
|
||||||
STATIC void hd64461video_get_clut(struct hd64461video_chip *, int, int,
|
STATIC void hd64461video_get_clut(struct hd64461video_chip *, int, int,
|
||||||
u_int8_t *, u_int8_t *, u_int8_t *);
|
u_int8_t *, u_int8_t *, u_int8_t *);
|
||||||
|
STATIC void hd64461video_off(struct hd64461video_chip *vc);
|
||||||
|
STATIC void hd64461video_on(struct hd64461video_chip *vc);
|
||||||
|
|
||||||
#if notyet
|
#if notyet
|
||||||
STATIC void hd64461video_set_display_mode(struct hd64461video_chip *);
|
STATIC void hd64461video_set_display_mode(struct hd64461video_chip *);
|
||||||
STATIC void hd64461video_set_display_mode_lcdc(struct hd64461video_chip *);
|
STATIC void hd64461video_set_display_mode_lcdc(struct hd64461video_chip *);
|
||||||
|
@ -403,11 +407,29 @@ hd64461video_ioctl(void *v, u_long cmd, caddr_t data, int flag, struct proc *p)
|
||||||
struct hpcfb_fbconf *fbconf;
|
struct hpcfb_fbconf *fbconf;
|
||||||
struct hpcfb_dspconf *dspconf;
|
struct hpcfb_dspconf *dspconf;
|
||||||
struct wsdisplay_cmap *cmap;
|
struct wsdisplay_cmap *cmap;
|
||||||
|
int turnoff;
|
||||||
u_int8_t *r, *g, *b;
|
u_int8_t *r, *g, *b;
|
||||||
int error;
|
int error;
|
||||||
size_t idx, cnt;
|
size_t idx, cnt;
|
||||||
|
|
||||||
switch (cmd) {
|
switch (cmd) {
|
||||||
|
case WSDISPLAYIO_GVIDEO:
|
||||||
|
*(u_int *)data = sc->sc_vc->blanked ?
|
||||||
|
WSDISPLAYIO_VIDEO_OFF : WSDISPLAYIO_VIDEO_ON;
|
||||||
|
return (0);
|
||||||
|
|
||||||
|
case WSDISPLAYIO_SVIDEO:
|
||||||
|
turnoff = (*(u_int *)data == WSDISPLAYIO_VIDEO_OFF);
|
||||||
|
if (sc->sc_vc->blanked != turnoff) {
|
||||||
|
sc->sc_vc->blanked = turnoff;
|
||||||
|
if (turnoff)
|
||||||
|
hd64461video_off(sc->sc_vc);
|
||||||
|
else
|
||||||
|
hd64461video_on(sc->sc_vc);
|
||||||
|
}
|
||||||
|
|
||||||
|
return (0);
|
||||||
|
|
||||||
case WSDISPLAYIO_GETCMAP:
|
case WSDISPLAYIO_GETCMAP:
|
||||||
cmap = (struct wsdisplay_cmap*)data;
|
cmap = (struct wsdisplay_cmap*)data;
|
||||||
cnt = cmap->count;
|
cnt = cmap->count;
|
||||||
|
@ -907,6 +929,8 @@ hd64461video_update_videochip_status(struct hd64461video_chip *hvc)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
hvc->blanked = 0; /* XXX */
|
||||||
|
|
||||||
width = bootinfo->fb_width;
|
width = bootinfo->fb_width;
|
||||||
height = bootinfo->fb_height;
|
height = bootinfo->fb_height;
|
||||||
|
|
||||||
|
@ -1060,6 +1084,27 @@ hd64461video_get_clut(struct hd64461video_chip *vc, int idx, int cnt,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hd64461video_off(struct hd64461video_chip *vc)
|
||||||
|
{
|
||||||
|
u_int16_t r;
|
||||||
|
|
||||||
|
r = hd64461_reg_read_2(HD64461_LCDLDR1_REG16);
|
||||||
|
r &= ~HD64461_LCDLDR1_DON;
|
||||||
|
hd64461_reg_write_2(HD64461_LCDLDR1_REG16, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
hd64461video_on(struct hd64461video_chip *vc)
|
||||||
|
{
|
||||||
|
u_int16_t r;
|
||||||
|
|
||||||
|
r = hd64461_reg_read_2(HD64461_LCDLDR1_REG16);
|
||||||
|
r |= HD64461_LCDLDR1_DON;
|
||||||
|
hd64461_reg_write_2(HD64461_LCDLDR1_REG16, r);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
#ifdef HD64461VIDEO_DEBUG
|
#ifdef HD64461VIDEO_DEBUG
|
||||||
void
|
void
|
||||||
hd64461video_info(struct hd64461video_softc *sc)
|
hd64461video_info(struct hd64461video_softc *sc)
|
||||||
|
|
Loading…
Reference in New Issue