Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-arm
[linux-2.6] / arch / sh / boards / mpc1211 / led.c
1 /*
2  * linux/arch/sh/kernel/led_mpc1211.c
3  *
4  * Copyright (C) 2001  Saito.K & Jeanne
5  *
6  * This file contains Interface MPC-1211 specific LED code.
7  */
8
9
10 static void mach_led(int position, int value)
11 {
12         volatile unsigned char* p = (volatile unsigned char*)0xa2000000;
13
14         if (value) {
15                 *p |= 1;
16         } else {
17                 *p &= ~1;
18         }
19 }
20
21 #ifdef CONFIG_HEARTBEAT
22
23 #include <linux/sched.h>
24
25 /* Cycle the LED's in the clasic Knightrider/Sun pattern */
26 void heartbeat_mpc1211(void)
27 {
28         static unsigned int cnt = 0, period = 0;
29         volatile unsigned char* p = (volatile unsigned char*)0xa2000000;
30         static unsigned bit = 0, up = 1;
31
32         cnt += 1;
33         if (cnt < period) {
34                 return;
35         }
36
37         cnt = 0;
38
39         /* Go through the points (roughly!):
40          * f(0)=10, f(1)=16, f(2)=20, f(5)=35,f(inf)->110
41          */
42         period = 110 - ( (300<<FSHIFT)/
43                          ((avenrun[0]/5) + (3<<FSHIFT)) );
44
45         if (up) {
46                 if (bit == 7) {
47                         bit--;
48                         up=0;
49                 } else {
50                         bit ++;
51                 }
52         } else {
53                 if (bit == 0) {
54                         bit++;
55                         up=1;
56                 } else {
57                         bit--;
58                 }
59         }
60         *p = 1<<bit;
61
62 }
63 #endif /* CONFIG_HEARTBEAT */