Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
arch
mips
mti-sead3
sead3-display.c
Go to the documentation of this file.
1
/*
2
* This file is subject to the terms and conditions of the GNU General Public
3
* License. See the file "COPYING" in the main directory of this archive
4
* for more details.
5
*
6
* Copyright (C) 2012 MIPS Technologies, Inc. All rights reserved.
7
*/
8
#include <
linux/timer.h
>
9
#include <
linux/io.h
>
10
#include <
asm/mips-boards/generic.h
>
11
#include <
asm/mips-boards/prom.h
>
12
13
static
unsigned
int
display_count;
14
static
unsigned
int
max_display_count;
15
16
#define LCD_DISPLAY_POS_BASE 0x1f000400
17
#define DISPLAY_LCDINSTRUCTION (0*2)
18
#define DISPLAY_LCDDATA (1*2)
19
#define DISPLAY_CPLDSTATUS (2*2)
20
#define DISPLAY_CPLDDATA (3*2)
21
#define LCD_SETDDRAM 0x80
22
#define LCD_IR_BF 0x80
23
24
const
char
display_string
[] =
" LINUX ON SEAD3 "
;
25
26
static
void
scroll_display_message(
unsigned
long
data
);
27
static
DEFINE_TIMER
(mips_scroll_timer, scroll_display_message,
HZ
, 0);
28
29
static
void
lcd_wait(
unsigned
int
__iomem
*
display
)
30
{
31
/* Wait for CPLD state machine to become idle. */
32
do
{ }
while
(
__raw_readl
(display +
DISPLAY_CPLDSTATUS
) & 1);
33
34
do
{
35
__raw_readl
(display +
DISPLAY_LCDINSTRUCTION
);
36
37
/* Wait for CPLD state machine to become idle. */
38
do
{ }
while
(
__raw_readl
(display +
DISPLAY_CPLDSTATUS
) & 1);
39
}
while
(
__raw_readl
(display +
DISPLAY_CPLDDATA
) &
LCD_IR_BF
);
40
}
41
42
void
mips_display_message
(
const
char
*
str
)
43
{
44
static
unsigned
int
__iomem
*display;
45
char
ch;
46
int
i
;
47
48
if
(
unlikely
(display ==
NULL
))
49
display =
ioremap_nocache
(
LCD_DISPLAY_POS_BASE
,
50
(8 *
sizeof
(
int
)));
51
52
for
(i = 0; i < 16; i++) {
53
if
(*str)
54
ch = *str++;
55
else
56
ch =
' '
;
57
lcd_wait(display);
58
__raw_writel
((
LCD_SETDDRAM
| i),
59
(display +
DISPLAY_LCDINSTRUCTION
));
60
lcd_wait(display);
61
__raw_writel
(ch, display +
DISPLAY_LCDDATA
);
62
}
63
}
64
65
static
void
scroll_display_message(
unsigned
long
data
)
66
{
67
mips_display_message
(&
display_string
[display_count++]);
68
if
(display_count == max_display_count)
69
display_count = 0;
70
mod_timer
(&mips_scroll_timer, jiffies +
HZ
);
71
}
72
73
void
mips_scroll_message
(
void
)
74
{
75
del_timer_sync
(&mips_scroll_timer);
76
max_display_count =
strlen
(
display_string
) + 1 - 16;
77
mod_timer
(&mips_scroll_timer,
jiffies
+ 1);
78
}
Generated on Thu Jan 10 2013 13:11:50 for Linux Kernel by
1.8.2