]> git.proxmox.com Git - mirror_ubuntu-artful-kernel.git/blob - arch/mips/ddb5xxx/ddb5477/lcd44780.c
Linux-2.6.12-rc2
[mirror_ubuntu-artful-kernel.git] / arch / mips / ddb5xxx / ddb5477 / lcd44780.c
1 /*
2 * lcd44780.c
3 * Simple "driver" for a memory-mapped 44780-style LCD display.
4 *
5 * Copyright 2001 Bradley D. LaRonde <brad@ltc.com>
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the
9 * Free Software Foundation; either version 2 of the License, or (at your
10 * option) any later version.
11 *
12 */
13
14 #define LCD44780_COMMAND ((volatile unsigned char *)0xbe020000)
15 #define LCD44780_DATA ((volatile unsigned char *)0xbe020001)
16
17 #define LCD44780_4BIT_1LINE 0x20
18 #define LCD44780_4BIT_2LINE 0x28
19 #define LCD44780_8BIT_1LINE 0x30
20 #define LCD44780_8BIT_2LINE 0x38
21 #define LCD44780_MODE_DEC 0x04
22 #define LCD44780_MODE_DEC_SHIFT 0x05
23 #define LCD44780_MODE_INC 0x06
24 #define LCD44780_MODE_INC_SHIFT 0x07
25 #define LCD44780_SCROLL_LEFT 0x18
26 #define LCD44780_SCROLL_RIGHT 0x1e
27 #define LCD44780_CURSOR_UNDERLINE 0x0e
28 #define LCD44780_CURSOR_BLOCK 0x0f
29 #define LCD44780_CURSOR_OFF 0x0c
30 #define LCD44780_CLEAR 0x01
31 #define LCD44780_BLANK 0x08
32 #define LCD44780_RESTORE 0x0c // Same as CURSOR_OFF
33 #define LCD44780_HOME 0x02
34 #define LCD44780_LEFT 0x10
35 #define LCD44780_RIGHT 0x14
36
37 void lcd44780_wait(void)
38 {
39 int i, j;
40 for(i=0; i < 400; i++)
41 for(j=0; j < 10000; j++);
42 }
43
44 void lcd44780_command(unsigned char c)
45 {
46 *LCD44780_COMMAND = c;
47 lcd44780_wait();
48 }
49
50 void lcd44780_data(unsigned char c)
51 {
52 *LCD44780_DATA = c;
53 lcd44780_wait();
54 }
55
56 void lcd44780_puts(const char* s)
57 {
58 int i,j;
59 int pos = 0;
60
61 lcd44780_command(LCD44780_CLEAR);
62 while(*s) {
63 lcd44780_data(*s);
64 s++;
65 pos++;
66 if (pos == 8) {
67 /* We must write 32 of spaces to get cursor to 2nd line */
68 for (j=0; j<32; j++) {
69 lcd44780_data(' ');
70 }
71 }
72 if (pos == 16) {
73 /* We have filled all 16 character positions, so stop
74 outputing data */
75 break;
76 }
77 }
78 #ifdef LCD44780_PUTS_PAUSE
79 for(i = 1; i < 2000; i++)
80 lcd44780_wait();
81 #endif
82 }
83
84 void lcd44780_init(void)
85 {
86 // The display on the RockHopper is physically a single
87 // 16 char line (two 8 char lines concatenated). bdl
88 lcd44780_command(LCD44780_8BIT_2LINE);
89 lcd44780_command(LCD44780_MODE_INC);
90 lcd44780_command(LCD44780_CURSOR_BLOCK);
91 lcd44780_command(LCD44780_CLEAR);
92 }