⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 led.c

📁 linux-2.6.15.6
💻 C
字号:
/* * linux/arch/sh/kernel/led_microdev.c * * Copyright (C) 2002 Stuart Menefy <stuart.menefy@st.com> * Copyright (C) 2003 Richard Curnow (Richard.Curnow@superh.com) * * May be copied or modified under the terms of the GNU General Public * License.  See linux/COPYING for more information. * */#include <linux/config.h>#include <asm/io.h>#define LED_REGISTER 0xa6104d20static void mach_led_d9(int value){	unsigned long reg;	reg = ctrl_inl(LED_REGISTER);	reg &= ~1;	reg |= (value & 1);	ctrl_outl(reg, LED_REGISTER);	return;}static void mach_led_d10(int value){	unsigned long reg;	reg = ctrl_inl(LED_REGISTER);	reg &= ~2;	reg |= ((value & 1) << 1);	ctrl_outl(reg, LED_REGISTER);	return;}#ifdef CONFIG_HEARTBEAT#include <linux/sched.h>static unsigned char banner_table[] = {	0x11, 0x01, 0x11, 0x01, 0x11, 0x03,	0x11, 0x01, 0x11, 0x01, 0x13, 0x03,	0x11, 0x01, 0x13, 0x01, 0x13, 0x01, 0x11, 0x03,	0x11, 0x03,	0x11, 0x01, 0x13, 0x01, 0x11, 0x03,	0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x11, 0x07,	0x13, 0x01, 0x13, 0x03,	0x11, 0x01, 0x11, 0x03,	0x13, 0x01, 0x11, 0x01, 0x13, 0x01, 0x11, 0x03,	0x11, 0x01, 0x13, 0x01, 0x11, 0x03,	0x13, 0x01, 0x13, 0x01, 0x13, 0x03,	0x13, 0x01, 0x11, 0x01, 0x11, 0x03,	0x11, 0x03,	0x11, 0x01, 0x11, 0x01, 0x11, 0x01, 0x13, 0x07,	0xff};static void banner(void){	static int pos = 0;	static int count = 0;	if (count) {		count--;	} else {		int val = banner_table[pos];		if (val == 0xff) {			pos = 0;			val = banner_table[pos];		}		pos++;		mach_led_d10((val >> 4) & 1);		count = 10 * (val & 0xf);	}}/* From heartbeat_harp in the stboards directory *//* acts like an actual heart beat -- ie thump-thump-pause... */void microdev_heartbeat(void){	static unsigned cnt = 0, period = 0, dist = 0;	if (cnt == 0 || cnt == dist)		mach_led_d9(1);	else if (cnt == 7 || cnt == dist+7)		mach_led_d9(0);	if (++cnt > period) {		cnt = 0;		/* The hyperbolic function below modifies the heartbeat period		 * length in dependency of the current (5min) load. It goes		 * through the points f(0)=126, f(1)=86, f(5)=51,		 * f(inf)->30. */		period = ((672<<FSHIFT)/(5*avenrun[0]+(7<<FSHIFT))) + 30;		dist = period / 4;	}	banner();}#endif

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -