Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-misc-2.6
[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 #include <linux/sched.h>
10 #include <asm/io.h>
11 #include <asm/r7780rp/r7780rp.h>
12
13 /* Cycle the LED's in the clasic Knightriger/Sun pattern */
14 void heartbeat_r7780rp(void)
15 {
16         static unsigned int cnt = 0, period = 0;
17         volatile unsigned short *p = (volatile unsigned short *)PA_OBLED;
18         static unsigned bit = 0, up = 1;
19         unsigned bit_pos[] = {2, 1, 0, 3, 6, 5, 4, 7};
20
21         cnt += 1;
22         if (cnt < period)
23                 return;
24
25         cnt = 0;
26
27         /* Go through the points (roughly!):
28          * f(0)=10, f(1)=16, f(2)=20, f(5)=35, f(int)->110
29          */
30         period = 110 - ((300 << FSHIFT)/((avenrun[0]/5) + (3<<FSHIFT)));
31
32         *p = 1 << bit_pos[bit];
33         if (up)
34                 if (bit == 7) {
35                         bit--;
36                         up = 0;
37                 } else
38                         bit++;
39         else if (bit == 0)
40                 up = 1;
41         else
42                 bit--;
43 }