diff options
Diffstat (limited to 'drivers/video/sm501.c')
| -rw-r--r-- | drivers/video/sm501.c | 150 | 
1 files changed, 150 insertions, 0 deletions
| diff --git a/drivers/video/sm501.c b/drivers/video/sm501.c new file mode 100644 index 000000000..23db02cd1 --- /dev/null +++ b/drivers/video/sm501.c @@ -0,0 +1,150 @@ +/* + * (C) Copyright 2002 + * Stäubli Faverges - <www.staubli.com> + * Pierre AUBERT  p.aubert@staubli.com + * + * (C) Copyright 2005 + * Martin Krause TQ-Systems GmbH martin.krause@tqs.de + * + * See file CREDITS for list of people who contributed to this + * project. + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License as + * published by the Free Software Foundation; either version 2 of + * the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 59 Temple Place, Suite 330, Boston, + * MA 02111-1307 USA + */ + +/* + * Basic video support for SMI SM501 "Voyager" graphic controller + */ + +#include <common.h> + +#ifdef CONFIG_VIDEO_SM501 + +#include <video_fb.h> +#include <sm501.h> + +#define read8(ptrReg)                \ +    *(volatile unsigned char *)(sm501.isaBase + ptrReg) + +#define write8(ptrReg,value) \ +    *(volatile unsigned char *)(sm501.isaBase + ptrReg) = value + +#define read16(ptrReg) \ +    (*(volatile unsigned short *)(sm501.isaBase + ptrReg)) + +#define write16(ptrReg,value) \ +    (*(volatile unsigned short *)(sm501.isaBase + ptrReg) = value) + +#define read32(ptrReg) \ +    (*(volatile unsigned int *)(sm501.isaBase + ptrReg)) + +#define write32(ptrReg, value) \ +    (*(volatile unsigned int *)(sm501.isaBase + ptrReg) = value) + +GraphicDevice sm501; + +/*----------------------------------------------------------------------------- + * SmiSetRegs -- + *----------------------------------------------------------------------------- + */ +static void SmiSetRegs (void) +{ +	/* +	 * The content of the chipset register depends on the board (clocks, +	 * ...) +	 */ +	const SMI_REGS *preg = board_get_regs (); +	while (preg->Index) { +		write32 (preg->Index, preg->Value); +		/* +		 * Insert a delay between +		 */ +		udelay (1000); +		preg ++; +	} +} + +/*----------------------------------------------------------------------------- + * video_hw_init -- + *----------------------------------------------------------------------------- + */ +void *video_hw_init (void) +{ +	unsigned int *vm, i; + +	memset (&sm501, 0, sizeof (GraphicDevice)); + +	/* +	 * Initialization of the access to the graphic chipset Retreive base +	 * address of the chipset (see board/RPXClassic/eccx.c) +	 */ +	if ((sm501.isaBase = board_video_init ()) == 0) { +		return (NULL); +	} + +	if ((sm501.frameAdrs = board_video_get_fb ()) == 0) { +		return (NULL); +	} + +	sm501.winSizeX = board_get_width (); +	sm501.winSizeY = board_get_height (); + +#if defined(CONFIG_VIDEO_SM501_8BPP) +	sm501.gdfIndex = GDF__8BIT_INDEX; +	sm501.gdfBytesPP = 1; + +#elif defined(CONFIG_VIDEO_SM501_16BPP) +	sm501.gdfIndex = GDF_16BIT_565RGB; +	sm501.gdfBytesPP = 2; + +#elif defined(CONFIG_VIDEO_SM501_32BPP) +	sm501.gdfIndex = GDF_32BIT_X888RGB; +	sm501.gdfBytesPP = 4; +#else +#error Unsupported SM501 BPP +#endif + +	sm501.memSize = sm501.winSizeX * sm501.winSizeY * sm501.gdfBytesPP; + +	/* Load Smi registers */ +	SmiSetRegs (); + +	/* (see board/RPXClassic/RPXClassic.c) */ +	board_validate_screen (sm501.isaBase); + +	/* Clear video memory */ +	i = sm501.memSize/4; +	vm = (unsigned int *)sm501.frameAdrs; +	while(i--) +		*vm++ = 0; + +	return (&sm501); +} + +/*----------------------------------------------------------------------------- + * video_set_lut -- + *----------------------------------------------------------------------------- + */ +void video_set_lut ( +	unsigned int index,           /* color number */ +	unsigned char r,              /* red */ +	unsigned char g,              /* green */ +	unsigned char b               /* blue */ +	) +{ +} + +#endif /* CONFIG_VIDEO_SM501 */ |