Merge branch 'devel' of master.kernel.org:/home/rmk/linux-2.6-mmc
[sfrench/cifs-2.6.git] / arch / sh / boards / renesas / r7780rp / led.c
1 /*
2  * Copyright (C) Atom Create Engineering Co., Ltd.
3  *
4  * May be copied or modified under the terms of GNU General Public
5  * License.  See linux/COPYING for more information.
6  *
7  * This file contains Renesas Solutions HIGHLANDER R7780RP-1 specific LED code.
8  */
9
10 #include <linux/config.h>
11 #include <linux/sched.h>
12 #include <asm/io.h>
13 #include <asm/r7780rp/r7780rp.h>
14
15 /* Cycle the LED's in the clasic Knightriger/Sun pattern */
16 void heartbeat_r7780rp(void)
17 {
18         static unsigned int cnt = 0, period = 0;
19         volatile unsigned short *p = (volatile unsigned short *)PA_OBLED;
20         static unsigned bit = 0, up = 1;
21         unsigned bit_pos[] = {2, 1, 0, 3, 6, 5, 4, 7};
22
23         cnt += 1;
24         if (cnt < period)
25                 return;
26
27         cnt = 0;
28
29         /* Go through the points (roughly!):
30          * f(0)=10, f(1)=16, f(2)=20, f(5)=35, f(int)->110
31          */
32         period = 110 - ((300 << FSHIFT)/((avenrun[0]/5) + (3<<FSHIFT)));
33
34         *p = 1 << bit_pos[bit];
35         if (up)
36                 if (bit == 7) {
37                         bit--;
38                         up = 0;
39                 } else
40                         bit++;
41         else if (bit == 0)
42                 up = 1;
43         else
44                 bit--;
45 }