fade_saver.c revision 230132
155682Smarkm/*-
2233294Sstas * Copyright (c) 1995-1998 S��ren Schmidt
355682Smarkm * All rights reserved.
455682Smarkm *
5233294Sstas * Redistribution and use in source and binary forms, with or without
655682Smarkm * modification, are permitted provided that the following conditions
755682Smarkm * are met:
855682Smarkm * 1. Redistributions of source code must retain the above copyright
9233294Sstas *    notice, this list of conditions and the following disclaimer,
1055682Smarkm *    without modification, immediately at the beginning of the file.
1155682Smarkm * 2. Redistributions in binary form must reproduce the above copyright
12233294Sstas *    notice, this list of conditions and the following disclaimer in the
1355682Smarkm *    documentation and/or other materials provided with the distribution.
1455682Smarkm * 3. The name of the author may not be used to endorse or promote products
1555682Smarkm *    derived from this software without specific prior written permission.
16233294Sstas *
1755682Smarkm * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
1855682Smarkm * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
1955682Smarkm * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20233294Sstas * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
2155682Smarkm * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
2255682Smarkm * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
2355682Smarkm * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
2455682Smarkm * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
2555682Smarkm * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
2655682Smarkm * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
2755682Smarkm *
2855682Smarkm * $FreeBSD: head/sys/dev/syscons/fade/fade_saver.c 230132 2012-01-15 13:23:18Z uqs $
2955682Smarkm */
3055682Smarkm
3155682Smarkm#include <sys/param.h>
3255682Smarkm#include <sys/systm.h>
3355682Smarkm#include <sys/kernel.h>
34233294Sstas#include <sys/module.h>
3555682Smarkm#include <sys/consio.h>
36233294Sstas#include <sys/fbio.h>
3755682Smarkm
3855682Smarkm#include <dev/fb/fbreg.h>
3955682Smarkm#include <dev/fb/splashreg.h>
4055682Smarkm#include <dev/syscons/syscons.h>
4155682Smarkm
4255682Smarkmstatic u_char palette[256*3];
4355682Smarkm
44233294Sstasstatic int
45233294Sstasfade_saver(video_adapter_t *adp, int blank)
46233294Sstas{
4755682Smarkm	static int count = 0;
4855682Smarkm	u_char pal[256*3];
4990926Snectar	int i;
5055682Smarkm
51178825Sdfr	if (blank) {
52103423Snectar		if (ISPALAVAIL(adp->va_flags)) {
53178825Sdfr			if (count <= 0)
5455682Smarkm				vidd_save_palette(adp, palette);
55178825Sdfr			if (count < 256) {
5655682Smarkm				pal[0] = pal[1] = pal[2] = 0;
5755682Smarkm				for (i = 3; i < 256*3; i++) {
5855682Smarkm					if (palette[i] - count > 60)
5955682Smarkm						pal[i] = palette[i] - count;
6055682Smarkm					else
61178825Sdfr						pal[i] = 60;
62178825Sdfr				}
63178825Sdfr				vidd_load_palette(adp, pal);
64178825Sdfr				count++;
65178825Sdfr			}
66178825Sdfr		} else {
67178825Sdfr	    		vidd_blank_display(adp, V_DISPLAY_BLANK);
68178825Sdfr		}
69178825Sdfr	} else {
70178825Sdfr		if (ISPALAVAIL(adp->va_flags)) {
71178825Sdfr			vidd_load_palette(adp, palette);
72178825Sdfr			count = 0;
73178825Sdfr		} else {
74178825Sdfr	    		vidd_blank_display(adp, V_DISPLAY_ON);
75178825Sdfr		}
7655682Smarkm	}
7755682Smarkm	return 0;
7855682Smarkm}
7972445Sassar
8055682Smarkmstatic int
81233294Sstasfade_init(video_adapter_t *adp)
82233294Sstas{
8355682Smarkm	if (!ISPALAVAIL(adp->va_flags) &&
8455682Smarkm	    vidd_blank_display(adp, V_DISPLAY_ON) != 0)
8555682Smarkm		return ENODEV;
8655682Smarkm	return 0;
8755682Smarkm}
8855682Smarkm
8955682Smarkmstatic int
9055682Smarkmfade_term(video_adapter_t *adp)
91233294Sstas{
92233294Sstas	return 0;
9355682Smarkm}
9455682Smarkm
9555682Smarkmstatic scrn_saver_t fade_module = {
9655682Smarkm	"fade_saver", fade_init, fade_term, fade_saver, NULL,
9755682Smarkm};
9855682Smarkm
9955682SmarkmSAVER_MODULE(fade_saver, fade_module);
10055682Smarkm