Linux-2.6.12-rc2
[sfrench/cifs-2.6.git] / arch / sh / boards / se / 770x / led.c
1 /*
2  * linux/arch/sh/kernel/led_se.c
3  *
4  * Copyright (C) 2000 Stuart Menefy <stuart.menefy@st.com>
5  *
6  * May be copied or modified under the terms of the GNU General Public
7  * License.  See linux/COPYING for more information.
8  *
9  * This file contains Solution Engine specific LED code.
10  */
11
12 #include <linux/config.h>
13 #include <asm/se/se.h>
14
15 static void mach_led(int position, int value)
16 {
17         volatile unsigned short* p = (volatile unsigned short*)PA_LED;
18
19         if (value) {
20                 *p |= (1<<8);
21         } else {
22                 *p &= ~(1<<8);
23         }
24 }
25
26 #ifdef CONFIG_HEARTBEAT
27
28 #include <linux/sched.h>
29
30 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
31 void heartbeat_se(void)
32 {
33         static unsigned int cnt = 0, period = 0;
34         volatile unsigned short* p = (volatile unsigned short*)PA_LED;
35         static unsigned bit = 0, up = 1;
36
37         cnt += 1;
38         if (cnt < period) {
39                 return;
40         }
41
42         cnt = 0;
43
44         /* Go through the points (roughly!):
45          * f(0)=10, f(1)=16, f(2)=20, f(5)=35,f(inf)->110
46          */
47         period = 110 - ( (300<<FSHIFT)/
48                          ((avenrun[0]/5) + (3<<FSHIFT)) );
49
50         if (up) {
51                 if (bit == 7) {
52                         bit--;
53                         up=0;
54                 } else {
55                         bit ++;
56                 }
57         } else {
58                 if (bit == 0) {
59                         bit++;
60                         up=1;
61                 } else {
62                         bit--;
63                 }
64         }
65         *p = 1<<(bit+8);
66
67 }
68 #endif /* CONFIG_HEARTBEAT */