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