diff options
| -rw-r--r-- | common/cmd_display.c | 26 | ||||
| -rw-r--r-- | doc/README.LED_display | 27 | ||||
| -rw-r--r-- | drivers/misc/Makefile | 1 | ||||
| -rw-r--r-- | drivers/misc/pdsp188x.c | 57 | ||||
| -rw-r--r-- | include/configs/hmi1001.h | 1 | ||||
| -rw-r--r-- | include/configs/manroland/common.h | 5 | ||||
| -rw-r--r-- | include/led-display.h | 36 | 
7 files changed, 136 insertions, 17 deletions
| diff --git a/common/cmd_display.c b/common/cmd_display.c index 6c11aa6e3..d5d5d8c31 100644 --- a/common/cmd_display.c +++ b/common/cmd_display.c @@ -23,40 +23,32 @@  #include <common.h>  #include <command.h> +#include <led-display.h>  #undef DEBUG_DISP -#define DISP_SIZE	8 -#define CWORD_CLEAR	0x80 -#define CLEAR_DELAY	(110 * 2) -  int do_display (cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])  {  	int i; -	int pos;  	/* Clear display */ -	*((volatile char*)(CONFIG_SYS_DISP_CWORD)) = CWORD_CLEAR; -	udelay(1000 * CLEAR_DELAY); +	display_set(DISPLAY_CLEAR | DISPLAY_HOME);  	if (argc < 2)  		return (0); -	for (pos = 0, i = 1; i < argc && pos < DISP_SIZE; i++) { -		char *p = argv[i], c; +	for (i = 1; i < argc; i++) { +		char *p = argv[i]; -		if (i > 1) { -			*((volatile uchar *) (CONFIG_SYS_DISP_CHR_RAM + pos++)) = ' '; -#ifdef DEBUG_DISP -			putc(' '); -#endif +		if (i > 1) { /* Insert a space between strings */ +			display_putc(' ');  		} -		while ((c = *p++) != '\0' && pos < DISP_SIZE) { -			*((volatile uchar *) (CONFIG_SYS_DISP_CHR_RAM + pos++)) = c; +		while ((*p)) {  #ifdef DEBUG_DISP -			putc(c); +			putc(*p);  #endif +			display_putc(*p++);  		}  	} diff --git a/doc/README.LED_display b/doc/README.LED_display new file mode 100644 index 000000000..521746e12 --- /dev/null +++ b/doc/README.LED_display @@ -0,0 +1,27 @@ +LED display internal API +======================================= + +This README describes the LED display API. + +The API is defined by the include file include/led-display.h + +The first step in to define CONFIG_CMD_DISPLAY in the board config file. +Then you need to provide the following functions to access LED display: + +void display_set(int cmd); + +This function should control the state of the LED display. Argument is +an ORed combination of the following values: + DISPLAY_CLEAR	-- clear the display + DISPLAY_HOME	-- set the position to the beginning of display + DISPLAY_MARK	-- enable mark (decimal point), if implemented + +int display_putc(char c); + +This function should display it's parameter on the LED display in the +current position. Returns the displayed character on success or -1 in +case of failure. + +With this functions defined 'display' command will display it's +arguments on the LED display (or clear the display if called without +arguments). diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile index 4f15db95a..5d668f822 100644 --- a/drivers/misc/Makefile +++ b/drivers/misc/Makefile @@ -33,6 +33,7 @@ COBJS-$(CONFIG_NS87308) += ns87308.o  COBJS-$(CONFIG_STATUS_LED) += status_led.o  COBJS-$(CONFIG_TWL4030_LED) += twl4030_led.o  COBJS-$(CONFIG_FSL_PMIC) += fsl_pmic.o +COBJS-$(CONFIG_PDSP188x) += pdsp188x.o  COBJS	:= $(COBJS-y)  SRCS	:= $(COBJS:.o=.c) diff --git a/drivers/misc/pdsp188x.c b/drivers/misc/pdsp188x.c new file mode 100644 index 000000000..656b6eeb1 --- /dev/null +++ b/drivers/misc/pdsp188x.c @@ -0,0 +1,57 @@ +/* + * Copyright 2010 Sergey Poselenov, Emcraft Systems, <sposelenov@emcraft.com> + * Copyright 2010 Ilya Yanok, Emcraft Systems, <yanok@emcraft.com> + * + * 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., 51 Franklin Street, Fifth Floor, Boston, + * MA 02110-1301, USA. + */ + +#include <common.h> +#include <led-display.h> +#include <asm/io.h> + +#ifdef CONFIG_CMD_DISPLAY +#define CWORD_CLEAR	0x80 +#define CLEAR_DELAY	(110 * 2) +#define DISPLAY_SIZE	8 + +static int pos; /* Current display position */ + +/* Handle different display commands */ +void display_set(int cmd) +{ +	if (cmd & DISPLAY_CLEAR) { +		out_8((unsigned char *)CONFIG_SYS_DISP_CWORD, CWORD_CLEAR); +		udelay(1000 * CLEAR_DELAY); +	} + +	if (cmd & DISPLAY_HOME) { +		pos = 0; +	} +} + +/* + * Display a character at the current display position. + * Characters beyond the display size are ignored. + */ +int display_putc(char c) +{ +	if (pos >= DISPLAY_SIZE) +		return -1; + +	out_8((unsigned char *)CONFIG_SYS_DISP_CHR_RAM + pos++, c); + +	return c; +} +#endif diff --git a/include/configs/hmi1001.h b/include/configs/hmi1001.h index d40b7a9f5..8b0b773b2 100644 --- a/include/configs/hmi1001.h +++ b/include/configs/hmi1001.h @@ -352,6 +352,7 @@  /* Display addresses						       */  /*---------------------------------------------------------------------*/ +#define CONFIG_PDSP188x  #define CONFIG_SYS_DISP_CHR_RAM	(CONFIG_SYS_DISPLAY_BASE + 0x38)  #define CONFIG_SYS_DISP_CWORD		(CONFIG_SYS_DISPLAY_BASE + 0x30) diff --git a/include/configs/manroland/common.h b/include/configs/manroland/common.h index 022460889..291b6698c 100644 --- a/include/configs/manroland/common.h +++ b/include/configs/manroland/common.h @@ -55,6 +55,11 @@  #define CONFIG_CMD_MII  #define CONFIG_CMD_SNTP +/* + * 8-symbol LED display (can be accessed with 'display' command) + */ +#define CONFIG_PDSP188x +  #define	CONFIG_TIMESTAMP	1	/* Print image info with timestamp */  /* diff --git a/include/led-display.h b/include/led-display.h new file mode 100644 index 000000000..41c374434 --- /dev/null +++ b/include/led-display.h @@ -0,0 +1,36 @@ +/* + * (C) Copyright 2005-2010 + * Wolfgang Denk, DENX Software Engineering, wd@denx.de. + * + * (C) Copyright 2010 + * Sergei Poselenov, Emcraft Systems, sposelenov@emcraft.com. + * + * 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 + */ +#ifndef _led_display_h_ +#define _led_display_h_ + +/* Display Commands */ +#define DISPLAY_CLEAR	0x1 /* Clear the display */ +#define DISPLAY_HOME	0x2 /* Set cursor at home position */ +#define DISPLAY_MARK	0x4 /* Enable the decimal point led, if implemented */ + +void display_set(int cmd); +int display_putc(char c); +#endif |