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