2014-12-05 21:29:57

by Mariusz Gorski

[permalink] [raw]
Subject: [PATCH v2] staging: panel: Remove magic numbers in LCD commands

Get rid of magic numbers in LCD commands and replace them with defined
values, so that it's more obvious that the commands are doing.

Signed-off-by: Mariusz Gorski <[email protected]>
---
v2: Found and got rid of two more magic number usages

drivers/staging/panel/panel.c | 96 +++++++++++++++++++++++++++++--------------
1 file changed, 66 insertions(+), 30 deletions(-)

diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
index b68a9c3..9c68ccf 100644
--- a/drivers/staging/panel/panel.c
+++ b/drivers/staging/panel/panel.c
@@ -130,6 +130,30 @@
#define LCD_FLAG_N 0x0040 /* 2-rows mode */
#define LCD_FLAG_L 0x0080 /* backlight enabled */

+/* LCD commands */
+#define LCD_CMD_DISPLAY_CLEAR 0x01 /* Clear entire display */
+
+#define LCD_CMD_ENTRY_MODE 0x04 /* Set entry mode */
+#define LCD_CMD_CURSOR_INC 0x02 /* Increment cursor */
+
+#define LCD_CMD_DISPLAY_CTRL 0x08 /* Display control */
+#define LCD_CMD_DISPLAY_ON 0x04 /* Set display on */
+#define LCD_CMD_CURSOR_ON 0x02 /* Set cursor on */
+#define LCD_CMD_BLINK_ON 0x01 /* Set blink on */
+
+#define LCD_CMD_SHIFT 0x10 /* Shift cursor/display */
+#define LCD_CMD_DISPLAY_SHIFT 0x08 /* Shift display instead of cursor */
+#define LCD_CMD_SHIFT_RIGHT 0x04 /* Shift display/cursor to the right */
+
+#define LCD_CMD_FUNCTION_SET 0x20 /* Set function */
+#define LCD_CMD_DATA_LEN_8BITS 0x10 /* Set data length to 8 bits */
+#define LCD_CMD_TWO_LINES 0x08 /* Set to two display lines */
+#define LCD_CMD_FONT_5X10_DOTS 0x04 /* Set char font to 5x10 dots */
+
+#define LCD_CMD_SET_CGRAM_ADDR 0x40 /* Set char generator RAM address */
+
+#define LCD_CMD_SET_DDRAM_ADDR 0x80 /* Set display data RAM address */
+
#define LCD_ESCAPE_LEN 24 /* max chars for LCD escape command */
#define LCD_ESCAPE_CHAR 27 /* use char 27 for escape command */

@@ -883,7 +907,7 @@ static void lcd_write_data_tilcd(int data)

static void lcd_gotoxy(void)
{
- lcd_write_cmd(0x80 /* set DDRAM address */
+ lcd_write_cmd(LCD_CMD_SET_DDRAM_ADDR
| (lcd.addr.y ? lcd.hwidth : 0)
/* we force the cursor to stay at the end of the
line if it wants to go farther */
@@ -991,7 +1015,7 @@ static void lcd_clear_fast_tilcd(void)
/* clears the display and resets X/Y */
static void lcd_clear_display(void)
{
- lcd_write_cmd(0x01); /* clear display */
+ lcd_write_cmd(LCD_CMD_DISPLAY_CLEAR);
lcd.addr.x = 0;
lcd.addr.y = 0;
/* we must wait a few milliseconds (15) */
@@ -1005,26 +1029,29 @@ static void lcd_init_display(void)

long_sleep(20); /* wait 20 ms after power-up for the paranoid */

- lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
+ /* 8bits, 1 line, small fonts; let's do it 3 times */
+ lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
long_sleep(10);
- lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
+ lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
long_sleep(10);
- lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
+ lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
long_sleep(10);

- lcd_write_cmd(0x30 /* set font height and lines number */
- | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
- | ((lcd.flags & LCD_FLAG_N) ? 8 : 0)
+ /* set font height and lines number */
+ lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS
+ | ((lcd.flags & LCD_FLAG_F) ? LCD_CMD_FONT_5X10_DOTS : 0)
+ | ((lcd.flags & LCD_FLAG_N) ? LCD_CMD_TWO_LINES : 0)
);
long_sleep(10);

- lcd_write_cmd(0x08); /* display off, cursor off, blink off */
+ /* display off, cursor off, blink off */
+ lcd_write_cmd(LCD_CMD_DISPLAY_CTRL);
long_sleep(10);

- lcd_write_cmd(0x08 /* set display mode */
- | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
- | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
- | ((lcd.flags & LCD_FLAG_B) ? 1 : 0)
+ lcd_write_cmd(LCD_CMD_DISPLAY_CTRL /* set display mode */
+ | ((lcd.flags & LCD_FLAG_D) ? LCD_CMD_DISPLAY_ON : 0)
+ | ((lcd.flags & LCD_FLAG_C) ? LCD_CMD_CURSOR_ON : 0)
+ | ((lcd.flags & LCD_FLAG_B) ? LCD_CMD_BLINK_ON : 0)
);

lcd_backlight((lcd.flags & LCD_FLAG_L) ? 1 : 0);
@@ -1032,7 +1059,7 @@ static void lcd_init_display(void)
long_sleep(10);

/* entry mode set : increment, cursor shifting */
- lcd_write_cmd(0x06);
+ lcd_write_cmd(LCD_CMD_ENTRY_MODE | LCD_CMD_CURSOR_INC);

lcd_clear_display();
}
@@ -1116,7 +1143,7 @@ static inline int handle_lcd_special_code(void)
if (lcd.addr.x > 0) {
/* back one char if not at end of line */
if (lcd.addr.x < lcd.bwidth)
- lcd_write_cmd(0x10);
+ lcd_write_cmd(LCD_CMD_SHIFT);
lcd.addr.x--;
}
processed = 1;
@@ -1124,19 +1151,20 @@ static inline int handle_lcd_special_code(void)
case 'r': /* shift cursor right */
if (lcd.addr.x < lcd.width) {
/* allow the cursor to pass the end of the line */
- if (lcd.addr.x <
- (lcd.bwidth - 1))
- lcd_write_cmd(0x14);
+ if (lcd.addr.x < (lcd.bwidth - 1))
+ lcd_write_cmd(LCD_CMD_SHIFT |
+ LCD_CMD_SHIFT_RIGHT);
lcd.addr.x++;
}
processed = 1;
break;
case 'L': /* shift display left */
- lcd_write_cmd(0x18);
+ lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT);
processed = 1;
break;
case 'R': /* shift display right */
- lcd_write_cmd(0x1C);
+ lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT |
+ LCD_CMD_SHIFT_RIGHT);
processed = 1;
break;
case 'k': { /* kill end of line */
@@ -1205,7 +1233,7 @@ static inline int handle_lcd_special_code(void)
esc++;
}

- lcd_write_cmd(0x40 | (cgaddr * 8));
+ lcd_write_cmd(LCD_CMD_SET_CGRAM_ADDR | (cgaddr * 8));
for (addr = 0; addr < cgoffset; addr++)
lcd_write_data(cgbytes[addr]);

@@ -1238,21 +1266,29 @@ static inline int handle_lcd_special_code(void)
break;
}

+ /* TODO: This indent party here got ugly, clean it! */
/* Check whether one flag was changed */
if (oldflags != lcd.flags) {
/* check whether one of B,C,D flags were changed */
if ((oldflags ^ lcd.flags) &
(LCD_FLAG_B | LCD_FLAG_C | LCD_FLAG_D))
/* set display mode */
- lcd_write_cmd(0x08
- | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
- | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
- | ((lcd.flags & LCD_FLAG_B) ? 1 : 0));
+ lcd_write_cmd(LCD_CMD_DISPLAY_CTRL
+ | ((lcd.flags & LCD_FLAG_D)
+ ? LCD_CMD_DISPLAY_ON : 0)
+ | ((lcd.flags & LCD_FLAG_C)
+ ? LCD_CMD_CURSOR_ON : 0)
+ | ((lcd.flags & LCD_FLAG_B)
+ ? LCD_CMD_BLINK_ON : 0));
/* check whether one of F,N flags was changed */
else if ((oldflags ^ lcd.flags) & (LCD_FLAG_F | LCD_FLAG_N))
- lcd_write_cmd(0x30
- | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
- | ((lcd.flags & LCD_FLAG_N) ? 8 : 0));
+ lcd_write_cmd(LCD_CMD_FUNCTION_SET
+ | LCD_CMD_DATA_LEN_8BITS
+ | ((lcd.flags & LCD_FLAG_F)
+ ? LCD_CMD_TWO_LINES : 0)
+ | ((lcd.flags & LCD_FLAG_N)
+ ? LCD_CMD_FONT_5X10_DOTS
+ : 0));
/* check whether L flag was changed */
else if ((oldflags ^ lcd.flags) & (LCD_FLAG_L)) {
if (lcd.flags & (LCD_FLAG_L))
@@ -1291,13 +1327,13 @@ static void lcd_write_char(char c)
end of the line */
if (lcd.addr.x < lcd.bwidth)
/* back one char */
- lcd_write_cmd(0x10);
+ lcd_write_cmd(LCD_CMD_SHIFT);
lcd.addr.x--;
}
/* replace with a space */
lcd_write_data(' ');
/* back one char again */
- lcd_write_cmd(0x10);
+ lcd_write_cmd(LCD_CMD_SHIFT);
break;
case '\014':
/* quickly clear the display */
--
2.1.3


2014-12-06 08:21:21

by Sudip Mukherjee

[permalink] [raw]
Subject: Re: [PATCH v2] staging: panel: Remove magic numbers in LCD commands

On Fri, Dec 05, 2014 at 10:28:19PM +0100, Mariusz Gorski wrote:
> Get rid of magic numbers in LCD commands and replace them with defined
> values, so that it's more obvious that the commands are doing.
>
> Signed-off-by: Mariusz Gorski <[email protected]>
> ---
> v2: Found and got rid of two more magic number usages
this one also not applying to next-20141205. is it on staging-testing?

thanks
sudip

>
> drivers/staging/panel/panel.c | 96 +++++++++++++++++++++++++++++--------------
> 1 file changed, 66 insertions(+), 30 deletions(-)
>
> diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
> index b68a9c3..9c68ccf 100644
> --- a/drivers/staging/panel/panel.c
> +++ b/drivers/staging/panel/panel.c
> @@ -130,6 +130,30 @@
> #define LCD_FLAG_N 0x0040 /* 2-rows mode */
> #define LCD_FLAG_L 0x0080 /* backlight enabled */
>
> +/* LCD commands */
> +#define LCD_CMD_DISPLAY_CLEAR 0x01 /* Clear entire display */
> +
> +#define LCD_CMD_ENTRY_MODE 0x04 /* Set entry mode */
> +#define LCD_CMD_CURSOR_INC 0x02 /* Increment cursor */
> +
> +#define LCD_CMD_DISPLAY_CTRL 0x08 /* Display control */
> +#define LCD_CMD_DISPLAY_ON 0x04 /* Set display on */
> +#define LCD_CMD_CURSOR_ON 0x02 /* Set cursor on */
> +#define LCD_CMD_BLINK_ON 0x01 /* Set blink on */
> +
> +#define LCD_CMD_SHIFT 0x10 /* Shift cursor/display */
> +#define LCD_CMD_DISPLAY_SHIFT 0x08 /* Shift display instead of cursor */
> +#define LCD_CMD_SHIFT_RIGHT 0x04 /* Shift display/cursor to the right */
> +
> +#define LCD_CMD_FUNCTION_SET 0x20 /* Set function */
> +#define LCD_CMD_DATA_LEN_8BITS 0x10 /* Set data length to 8 bits */
> +#define LCD_CMD_TWO_LINES 0x08 /* Set to two display lines */
> +#define LCD_CMD_FONT_5X10_DOTS 0x04 /* Set char font to 5x10 dots */
> +
> +#define LCD_CMD_SET_CGRAM_ADDR 0x40 /* Set char generator RAM address */
> +
> +#define LCD_CMD_SET_DDRAM_ADDR 0x80 /* Set display data RAM address */
> +
> #define LCD_ESCAPE_LEN 24 /* max chars for LCD escape command */
> #define LCD_ESCAPE_CHAR 27 /* use char 27 for escape command */
>
> @@ -883,7 +907,7 @@ static void lcd_write_data_tilcd(int data)
>
> static void lcd_gotoxy(void)
> {
> - lcd_write_cmd(0x80 /* set DDRAM address */
> + lcd_write_cmd(LCD_CMD_SET_DDRAM_ADDR
> | (lcd.addr.y ? lcd.hwidth : 0)
> /* we force the cursor to stay at the end of the
> line if it wants to go farther */
> @@ -991,7 +1015,7 @@ static void lcd_clear_fast_tilcd(void)
> /* clears the display and resets X/Y */
> static void lcd_clear_display(void)
> {
> - lcd_write_cmd(0x01); /* clear display */
> + lcd_write_cmd(LCD_CMD_DISPLAY_CLEAR);
> lcd.addr.x = 0;
> lcd.addr.y = 0;
> /* we must wait a few milliseconds (15) */
> @@ -1005,26 +1029,29 @@ static void lcd_init_display(void)
>
> long_sleep(20); /* wait 20 ms after power-up for the paranoid */
>
> - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> + /* 8bits, 1 line, small fonts; let's do it 3 times */
> + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> long_sleep(10);
> - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> long_sleep(10);
> - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> long_sleep(10);
>
> - lcd_write_cmd(0x30 /* set font height and lines number */
> - | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
> - | ((lcd.flags & LCD_FLAG_N) ? 8 : 0)
> + /* set font height and lines number */
> + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS
> + | ((lcd.flags & LCD_FLAG_F) ? LCD_CMD_FONT_5X10_DOTS : 0)
> + | ((lcd.flags & LCD_FLAG_N) ? LCD_CMD_TWO_LINES : 0)
> );
> long_sleep(10);
>
> - lcd_write_cmd(0x08); /* display off, cursor off, blink off */
> + /* display off, cursor off, blink off */
> + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL);
> long_sleep(10);
>
> - lcd_write_cmd(0x08 /* set display mode */
> - | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
> - | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
> - | ((lcd.flags & LCD_FLAG_B) ? 1 : 0)
> + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL /* set display mode */
> + | ((lcd.flags & LCD_FLAG_D) ? LCD_CMD_DISPLAY_ON : 0)
> + | ((lcd.flags & LCD_FLAG_C) ? LCD_CMD_CURSOR_ON : 0)
> + | ((lcd.flags & LCD_FLAG_B) ? LCD_CMD_BLINK_ON : 0)
> );
>
> lcd_backlight((lcd.flags & LCD_FLAG_L) ? 1 : 0);
> @@ -1032,7 +1059,7 @@ static void lcd_init_display(void)
> long_sleep(10);
>
> /* entry mode set : increment, cursor shifting */
> - lcd_write_cmd(0x06);
> + lcd_write_cmd(LCD_CMD_ENTRY_MODE | LCD_CMD_CURSOR_INC);
>
> lcd_clear_display();
> }
> @@ -1116,7 +1143,7 @@ static inline int handle_lcd_special_code(void)
> if (lcd.addr.x > 0) {
> /* back one char if not at end of line */
> if (lcd.addr.x < lcd.bwidth)
> - lcd_write_cmd(0x10);
> + lcd_write_cmd(LCD_CMD_SHIFT);
> lcd.addr.x--;
> }
> processed = 1;
> @@ -1124,19 +1151,20 @@ static inline int handle_lcd_special_code(void)
> case 'r': /* shift cursor right */
> if (lcd.addr.x < lcd.width) {
> /* allow the cursor to pass the end of the line */
> - if (lcd.addr.x <
> - (lcd.bwidth - 1))
> - lcd_write_cmd(0x14);
> + if (lcd.addr.x < (lcd.bwidth - 1))
> + lcd_write_cmd(LCD_CMD_SHIFT |
> + LCD_CMD_SHIFT_RIGHT);
> lcd.addr.x++;
> }
> processed = 1;
> break;
> case 'L': /* shift display left */
> - lcd_write_cmd(0x18);
> + lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT);
> processed = 1;
> break;
> case 'R': /* shift display right */
> - lcd_write_cmd(0x1C);
> + lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT |
> + LCD_CMD_SHIFT_RIGHT);
> processed = 1;
> break;
> case 'k': { /* kill end of line */
> @@ -1205,7 +1233,7 @@ static inline int handle_lcd_special_code(void)
> esc++;
> }
>
> - lcd_write_cmd(0x40 | (cgaddr * 8));
> + lcd_write_cmd(LCD_CMD_SET_CGRAM_ADDR | (cgaddr * 8));
> for (addr = 0; addr < cgoffset; addr++)
> lcd_write_data(cgbytes[addr]);
>
> @@ -1238,21 +1266,29 @@ static inline int handle_lcd_special_code(void)
> break;
> }
>
> + /* TODO: This indent party here got ugly, clean it! */
> /* Check whether one flag was changed */
> if (oldflags != lcd.flags) {
> /* check whether one of B,C,D flags were changed */
> if ((oldflags ^ lcd.flags) &
> (LCD_FLAG_B | LCD_FLAG_C | LCD_FLAG_D))
> /* set display mode */
> - lcd_write_cmd(0x08
> - | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
> - | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
> - | ((lcd.flags & LCD_FLAG_B) ? 1 : 0));
> + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL
> + | ((lcd.flags & LCD_FLAG_D)
> + ? LCD_CMD_DISPLAY_ON : 0)
> + | ((lcd.flags & LCD_FLAG_C)
> + ? LCD_CMD_CURSOR_ON : 0)
> + | ((lcd.flags & LCD_FLAG_B)
> + ? LCD_CMD_BLINK_ON : 0));
> /* check whether one of F,N flags was changed */
> else if ((oldflags ^ lcd.flags) & (LCD_FLAG_F | LCD_FLAG_N))
> - lcd_write_cmd(0x30
> - | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
> - | ((lcd.flags & LCD_FLAG_N) ? 8 : 0));
> + lcd_write_cmd(LCD_CMD_FUNCTION_SET
> + | LCD_CMD_DATA_LEN_8BITS
> + | ((lcd.flags & LCD_FLAG_F)
> + ? LCD_CMD_TWO_LINES : 0)
> + | ((lcd.flags & LCD_FLAG_N)
> + ? LCD_CMD_FONT_5X10_DOTS
> + : 0));
> /* check whether L flag was changed */
> else if ((oldflags ^ lcd.flags) & (LCD_FLAG_L)) {
> if (lcd.flags & (LCD_FLAG_L))
> @@ -1291,13 +1327,13 @@ static void lcd_write_char(char c)
> end of the line */
> if (lcd.addr.x < lcd.bwidth)
> /* back one char */
> - lcd_write_cmd(0x10);
> + lcd_write_cmd(LCD_CMD_SHIFT);
> lcd.addr.x--;
> }
> /* replace with a space */
> lcd_write_data(' ');
> /* back one char again */
> - lcd_write_cmd(0x10);
> + lcd_write_cmd(LCD_CMD_SHIFT);
> break;
> case '\014':
> /* quickly clear the display */
> --
> 2.1.3
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> the body of a message to [email protected]
> More majordomo info at http://vger.kernel.org/majordomo-info.html
> Please read the FAQ at http://www.tux.org/lkml/

2014-12-06 14:01:32

by maf

[permalink] [raw]
Subject: Re: [PATCH v2] staging: panel: Remove magic numbers in LCD commands

On Sat, Dec 06, 2014 at 01:51:12PM +0530, Sudip Mukherjee wrote:
> On Fri, Dec 05, 2014 at 10:28:19PM +0100, Mariusz Gorski wrote:
> > Get rid of magic numbers in LCD commands and replace them with defined
> > values, so that it's more obvious that the commands are doing.
> >
> > Signed-off-by: Mariusz Gorski <[email protected]>
> > ---
> > v2: Found and got rid of two more magic number usages
> this one also not applying to next-20141205. is it on staging-testing?
>

Yes Supid, same story here.

Cheers,
Mariusz

> thanks
> sudip
>
> >
> > drivers/staging/panel/panel.c | 96 +++++++++++++++++++++++++++++--------------
> > 1 file changed, 66 insertions(+), 30 deletions(-)
> >
> > diff --git a/drivers/staging/panel/panel.c b/drivers/staging/panel/panel.c
> > index b68a9c3..9c68ccf 100644
> > --- a/drivers/staging/panel/panel.c
> > +++ b/drivers/staging/panel/panel.c
> > @@ -130,6 +130,30 @@
> > #define LCD_FLAG_N 0x0040 /* 2-rows mode */
> > #define LCD_FLAG_L 0x0080 /* backlight enabled */
> >
> > +/* LCD commands */
> > +#define LCD_CMD_DISPLAY_CLEAR 0x01 /* Clear entire display */
> > +
> > +#define LCD_CMD_ENTRY_MODE 0x04 /* Set entry mode */
> > +#define LCD_CMD_CURSOR_INC 0x02 /* Increment cursor */
> > +
> > +#define LCD_CMD_DISPLAY_CTRL 0x08 /* Display control */
> > +#define LCD_CMD_DISPLAY_ON 0x04 /* Set display on */
> > +#define LCD_CMD_CURSOR_ON 0x02 /* Set cursor on */
> > +#define LCD_CMD_BLINK_ON 0x01 /* Set blink on */
> > +
> > +#define LCD_CMD_SHIFT 0x10 /* Shift cursor/display */
> > +#define LCD_CMD_DISPLAY_SHIFT 0x08 /* Shift display instead of cursor */
> > +#define LCD_CMD_SHIFT_RIGHT 0x04 /* Shift display/cursor to the right */
> > +
> > +#define LCD_CMD_FUNCTION_SET 0x20 /* Set function */
> > +#define LCD_CMD_DATA_LEN_8BITS 0x10 /* Set data length to 8 bits */
> > +#define LCD_CMD_TWO_LINES 0x08 /* Set to two display lines */
> > +#define LCD_CMD_FONT_5X10_DOTS 0x04 /* Set char font to 5x10 dots */
> > +
> > +#define LCD_CMD_SET_CGRAM_ADDR 0x40 /* Set char generator RAM address */
> > +
> > +#define LCD_CMD_SET_DDRAM_ADDR 0x80 /* Set display data RAM address */
> > +
> > #define LCD_ESCAPE_LEN 24 /* max chars for LCD escape command */
> > #define LCD_ESCAPE_CHAR 27 /* use char 27 for escape command */
> >
> > @@ -883,7 +907,7 @@ static void lcd_write_data_tilcd(int data)
> >
> > static void lcd_gotoxy(void)
> > {
> > - lcd_write_cmd(0x80 /* set DDRAM address */
> > + lcd_write_cmd(LCD_CMD_SET_DDRAM_ADDR
> > | (lcd.addr.y ? lcd.hwidth : 0)
> > /* we force the cursor to stay at the end of the
> > line if it wants to go farther */
> > @@ -991,7 +1015,7 @@ static void lcd_clear_fast_tilcd(void)
> > /* clears the display and resets X/Y */
> > static void lcd_clear_display(void)
> > {
> > - lcd_write_cmd(0x01); /* clear display */
> > + lcd_write_cmd(LCD_CMD_DISPLAY_CLEAR);
> > lcd.addr.x = 0;
> > lcd.addr.y = 0;
> > /* we must wait a few milliseconds (15) */
> > @@ -1005,26 +1029,29 @@ static void lcd_init_display(void)
> >
> > long_sleep(20); /* wait 20 ms after power-up for the paranoid */
> >
> > - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> > + /* 8bits, 1 line, small fonts; let's do it 3 times */
> > + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> > long_sleep(10);
> > - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> > + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> > long_sleep(10);
> > - lcd_write_cmd(0x30); /* 8bits, 1 line, small fonts */
> > + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS);
> > long_sleep(10);
> >
> > - lcd_write_cmd(0x30 /* set font height and lines number */
> > - | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
> > - | ((lcd.flags & LCD_FLAG_N) ? 8 : 0)
> > + /* set font height and lines number */
> > + lcd_write_cmd(LCD_CMD_FUNCTION_SET | LCD_CMD_DATA_LEN_8BITS
> > + | ((lcd.flags & LCD_FLAG_F) ? LCD_CMD_FONT_5X10_DOTS : 0)
> > + | ((lcd.flags & LCD_FLAG_N) ? LCD_CMD_TWO_LINES : 0)
> > );
> > long_sleep(10);
> >
> > - lcd_write_cmd(0x08); /* display off, cursor off, blink off */
> > + /* display off, cursor off, blink off */
> > + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL);
> > long_sleep(10);
> >
> > - lcd_write_cmd(0x08 /* set display mode */
> > - | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
> > - | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
> > - | ((lcd.flags & LCD_FLAG_B) ? 1 : 0)
> > + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL /* set display mode */
> > + | ((lcd.flags & LCD_FLAG_D) ? LCD_CMD_DISPLAY_ON : 0)
> > + | ((lcd.flags & LCD_FLAG_C) ? LCD_CMD_CURSOR_ON : 0)
> > + | ((lcd.flags & LCD_FLAG_B) ? LCD_CMD_BLINK_ON : 0)
> > );
> >
> > lcd_backlight((lcd.flags & LCD_FLAG_L) ? 1 : 0);
> > @@ -1032,7 +1059,7 @@ static void lcd_init_display(void)
> > long_sleep(10);
> >
> > /* entry mode set : increment, cursor shifting */
> > - lcd_write_cmd(0x06);
> > + lcd_write_cmd(LCD_CMD_ENTRY_MODE | LCD_CMD_CURSOR_INC);
> >
> > lcd_clear_display();
> > }
> > @@ -1116,7 +1143,7 @@ static inline int handle_lcd_special_code(void)
> > if (lcd.addr.x > 0) {
> > /* back one char if not at end of line */
> > if (lcd.addr.x < lcd.bwidth)
> > - lcd_write_cmd(0x10);
> > + lcd_write_cmd(LCD_CMD_SHIFT);
> > lcd.addr.x--;
> > }
> > processed = 1;
> > @@ -1124,19 +1151,20 @@ static inline int handle_lcd_special_code(void)
> > case 'r': /* shift cursor right */
> > if (lcd.addr.x < lcd.width) {
> > /* allow the cursor to pass the end of the line */
> > - if (lcd.addr.x <
> > - (lcd.bwidth - 1))
> > - lcd_write_cmd(0x14);
> > + if (lcd.addr.x < (lcd.bwidth - 1))
> > + lcd_write_cmd(LCD_CMD_SHIFT |
> > + LCD_CMD_SHIFT_RIGHT);
> > lcd.addr.x++;
> > }
> > processed = 1;
> > break;
> > case 'L': /* shift display left */
> > - lcd_write_cmd(0x18);
> > + lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT);
> > processed = 1;
> > break;
> > case 'R': /* shift display right */
> > - lcd_write_cmd(0x1C);
> > + lcd_write_cmd(LCD_CMD_SHIFT | LCD_CMD_DISPLAY_SHIFT |
> > + LCD_CMD_SHIFT_RIGHT);
> > processed = 1;
> > break;
> > case 'k': { /* kill end of line */
> > @@ -1205,7 +1233,7 @@ static inline int handle_lcd_special_code(void)
> > esc++;
> > }
> >
> > - lcd_write_cmd(0x40 | (cgaddr * 8));
> > + lcd_write_cmd(LCD_CMD_SET_CGRAM_ADDR | (cgaddr * 8));
> > for (addr = 0; addr < cgoffset; addr++)
> > lcd_write_data(cgbytes[addr]);
> >
> > @@ -1238,21 +1266,29 @@ static inline int handle_lcd_special_code(void)
> > break;
> > }
> >
> > + /* TODO: This indent party here got ugly, clean it! */
> > /* Check whether one flag was changed */
> > if (oldflags != lcd.flags) {
> > /* check whether one of B,C,D flags were changed */
> > if ((oldflags ^ lcd.flags) &
> > (LCD_FLAG_B | LCD_FLAG_C | LCD_FLAG_D))
> > /* set display mode */
> > - lcd_write_cmd(0x08
> > - | ((lcd.flags & LCD_FLAG_D) ? 4 : 0)
> > - | ((lcd.flags & LCD_FLAG_C) ? 2 : 0)
> > - | ((lcd.flags & LCD_FLAG_B) ? 1 : 0));
> > + lcd_write_cmd(LCD_CMD_DISPLAY_CTRL
> > + | ((lcd.flags & LCD_FLAG_D)
> > + ? LCD_CMD_DISPLAY_ON : 0)
> > + | ((lcd.flags & LCD_FLAG_C)
> > + ? LCD_CMD_CURSOR_ON : 0)
> > + | ((lcd.flags & LCD_FLAG_B)
> > + ? LCD_CMD_BLINK_ON : 0));
> > /* check whether one of F,N flags was changed */
> > else if ((oldflags ^ lcd.flags) & (LCD_FLAG_F | LCD_FLAG_N))
> > - lcd_write_cmd(0x30
> > - | ((lcd.flags & LCD_FLAG_F) ? 4 : 0)
> > - | ((lcd.flags & LCD_FLAG_N) ? 8 : 0));
> > + lcd_write_cmd(LCD_CMD_FUNCTION_SET
> > + | LCD_CMD_DATA_LEN_8BITS
> > + | ((lcd.flags & LCD_FLAG_F)
> > + ? LCD_CMD_TWO_LINES : 0)
> > + | ((lcd.flags & LCD_FLAG_N)
> > + ? LCD_CMD_FONT_5X10_DOTS
> > + : 0));
> > /* check whether L flag was changed */
> > else if ((oldflags ^ lcd.flags) & (LCD_FLAG_L)) {
> > if (lcd.flags & (LCD_FLAG_L))
> > @@ -1291,13 +1327,13 @@ static void lcd_write_char(char c)
> > end of the line */
> > if (lcd.addr.x < lcd.bwidth)
> > /* back one char */
> > - lcd_write_cmd(0x10);
> > + lcd_write_cmd(LCD_CMD_SHIFT);
> > lcd.addr.x--;
> > }
> > /* replace with a space */
> > lcd_write_data(' ');
> > /* back one char again */
> > - lcd_write_cmd(0x10);
> > + lcd_write_cmd(LCD_CMD_SHIFT);
> > break;
> > case '\014':
> > /* quickly clear the display */
> > --
> > 2.1.3
> >
> > --
> > To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
> > the body of a message to [email protected]
> > More majordomo info at http://vger.kernel.org/majordomo-info.html
> > Please read the FAQ at http://www.tux.org/lkml/
> _______________________________________________
> devel mailing list
> [email protected]
> http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel