1355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin/*
2355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  Copyright (C) NEC Electronics Corporation 2004-2006
3355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *
4355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  This program is free software; you can redistribute it and/or modify
5355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  it under the terms of the GNU General Public License as published by
6355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  the Free Software Foundation; either version 2 of the License, or
7355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  (at your option) any later version.
8355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *
9355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  This program is distributed in the hope that it will be useful,
10355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  but WITHOUT ANY WARRANTY; without even the implied warranty of
11355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  GNU General Public License for more details.
13355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *
14355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  You should have received a copy of the GNU General Public License
15355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  along with this program; if not, write to the Free Software
16355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin *  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
17355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin */
18355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin#include <linux/kernel.h>
19355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin#include <linux/types.h>
20355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin#include <linux/string.h>
21d91f2cbe698cf70b50099343dac1ec8061bfd045Shinya Kuribayashi#include <asm/emma/emma2rh.h>
22355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
23355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushinconst unsigned long clear = 0x20202020;
24355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
25355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin#define LED_BASE 0xb1400038
26355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
27355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushinvoid markeins_led_clear(void)
28355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin{
29355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	emma2rh_out32(LED_BASE, clear);
30355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	emma2rh_out32(LED_BASE + 4, clear);
31355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin}
32355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
33355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushinvoid markeins_led(const char *str)
34355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin{
35355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	int i;
36355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	int len = strlen(str);
37355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
38355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	markeins_led_clear();
39355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	if (len > 8)
40355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin		len = 8;
41355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
42355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	if (emma2rh_in32(0xb0000800) & (0x1 << 18))
43355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin		for (i = 0; i < len; i++)
44355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin			emma2rh_out8(LED_BASE + i, str[i]);
45355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	else
46355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin		for (i = 0; i < len; i++)
47355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin			emma2rh_out8(LED_BASE + (i & 4) + (3 - (i & 3)),
48355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin				     str[i]);
49355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin}
50355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
51355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushinvoid markeins_led_hex(u32 val)
52355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin{
53355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	char str[10];
54355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin
55355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	sprintf(str, "%08x", val);
56355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin	markeins_led(str);
57355c471f2ff324c21f8a1fb8e2e242a0f2a4aa68dmitry pervushin}
58