亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? ekii-led.c

?? 這是個用C語言寫的led在ARM9下的驅(qū)動程序。
?? C
字號:
/*
* linux/deriver/led/ekii-led.c
* led driver for Embest EduKit II
* Copyright (C) 2005 Embest <www.embedinfo.com>
*/
#include <linux/module.h>
#include <linux/init.h>
#include <linux/sched.h>
#include <linux/kernel.h>
#include <linux/fs.h>
#include <linux/errno.h>	// error codes
#include <linux/types.h>	// size_t
#include <linux/delay.h>	// mdelay
#include <asm/uaccess.h>
#include <asm/arch-S3C44B0X/s3c44b0x.h>


#undef DEBUG
#ifdef	DEBUG
#define TRACE(str, args...)	printk("led: " str, ## args)
#else
#define TRACE(str, args...)
#endif


#define LED_MAJOR	60
#define LED_DEVNAME "led"

#define GPB_MASK	(3<<4)
#define GPF_MASK	(3<<3)
#define GET_DATA(b, f) ((u8)( ((~b&0x20)>>5) | ((~b&0x10)>>2) | ((~f&0x08)>>2) | ((~f&0x10)>>1) ))
#define SET_DATA(t, b, f) ( b = (((~t&0x01)<<5) | ((~t&0x04)<<2)), f = (((~t&0x02)<<2) | ((~t&0x08)<<1)) )

#define LED_LOCK(u) down(&u->lock);
#define LED_UNLOCK(u) up(&u->lock);

struct unit {
	struct semaphore lock;
	u32 *PCONB;		/* PCONB register */
	u32 *PDATB;		/* PDATB register */
	u32 *PCONF;		/* PCONF register */
	u32 *PDATF;		/* PDATF register */
	u32 *PUPF;		/* PUPF register */
	u32 b;			/* store LED 1 and LED 2 value */
	u32 f;			/* store LED 3 and LED 4 value */
};

static char *version = "Embest Edukit-II led driver version 1.0 (2005-04-18) <www.embedinfo.com>\n";

static struct unit led_unit = {
	.PCONB		= (u32 *)S3C44B0X_PCONB,
	.PDATB		= (u32 *)S3C44B0X_PDATB,
	.PCONF		= (u32 *)S3C44B0X_PCONF,
	.PDATF		= (u32 *)S3C44B0X_PDATF,
	.PUPF		= (u32 *)S3C44B0X_PUPF,
};


static void led_set_value(struct unit *unit, u8 val)
{
	u32 temp;

	SET_DATA(val, unit->b, unit->f);
	
	temp = *unit->PDATB;
	temp &= ~GPB_MASK;
	temp |= unit->b;
	*unit->PDATB = temp;
	
	temp = *unit->PDATF;
	temp &= ~GPF_MASK;
	temp |= unit->f;
	*unit->PDATF = temp;
}


static u8 led_get_value(struct unit *unit)
{
	u8 temp = GET_DATA(unit->b, unit->f);

	return temp;
}


static int led_open(struct inode *inode, struct file *file)
{
	TRACE("open\n");
	file->private_data = &led_unit;
	MOD_INC_USE_COUNT;

	return 0;
}


static int led_release(struct inode *inode, struct file *file)
{
	TRACE("release\n");
	MOD_DEC_USE_COUNT;

	return 0;
}


static ssize_t led_read(struct file *file, char *buf, size_t count, loff_t *offset)
{
	u8 temp;
	int ret;
	struct unit *unit = (struct unit *)file->private_data;

	TRACE("read\n");
	if(count > 1)
		count = 1;
	LED_LOCK(unit);
	temp = led_get_value(unit);
	ret = copy_to_user(buf, &temp, count) ? -EFAULT : count;
	LED_UNLOCK(unit);

	return ret;
}


static ssize_t led_write(struct file *file, const char *buf, size_t count, loff_t *offset)
{
	u8 temp;
	int ret;
	struct unit *unit = (struct unit *)file->private_data;

	TRACE("write\n");
	if(count > 1)
		count = 1;
	LED_LOCK(unit);
	ret = copy_from_user(&temp, buf, count) ? -EFAULT : count;
	if(ret)
		led_set_value(unit, temp);
	LED_UNLOCK(unit);

	return ret;
}


static struct file_operations led_ops = {
	owner:		THIS_MODULE,
	read:		led_read,
	write:		led_write,
	open:		led_open,
	release:	led_release,
};


/*
* led device init
*/
static void __init led_init(struct unit *unit)
{
	u32 temp;

	/* init device lock */
	init_MUTEX(&unit->lock);

	/* init io port */
	temp = *unit->PCONB;
	temp &= ~(3<<4);
	*unit->PCONB = temp;

	temp = *unit->PCONF;
	temp &= ~((3<<8) | (3<<6));
	temp |= ((1<<8) | (1<<6));
	*unit->PCONF = temp;

	temp = *unit->PUPF;
	temp |= (3<<3);
	*unit->PUPF = temp;
	
	/* init data and turn on led*/
	led_set_value(unit, 0x0f);

	/* delay some time */
	mdelay(100);

	/* turn off led */
	led_set_value(unit, 0x00);
}


/*
* module init
*/
int __init led_init_module(void)
{
	int res;

	TRACE("init_module\n");
	/* print version information */
	printk(KERN_INFO "%s", version);
	/* register led device */
	res = register_chrdev(LED_MAJOR, LED_DEVNAME, &led_ops);
	if(res < 0) {
		printk("ekii-led.o: unable to get major %d for led device.\n", LED_MAJOR);
		return res;
	}

	/* then call led_init() */
	led_init(&led_unit);

	return 0;
}


/*
* module cleanup
*/
void __exit led_cleanup(void)
{
	int res;

	TRACE("cleanup\n");
	/* unregister led device */
	res = unregister_chrdev(LED_MAJOR, LED_DEVNAME);
	if(res < 0)
		printk("ekii-led.o: unable to release major %d for led device.\n", LED_MAJOR);
}


module_init(led_init_module);
module_exit(led_cleanup);


MODULE_DESCRIPTION("EduKit-II led driver");
MODULE_AUTHOR("Embest tech&info Co.,Ltd. <www.embedinfo.com>");
MODULE_LICENSE("GPL");



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
裸体在线国模精品偷拍| 中文字幕亚洲不卡| 美女视频黄频大全不卡视频在线播放| 欧美丝袜丝交足nylons图片| 亚洲一区二区欧美激情| 欧美日韩免费视频| 美腿丝袜在线亚洲一区| 久久亚洲精精品中文字幕早川悠里| 国产精品自拍av| 一色屋精品亚洲香蕉网站| 色婷婷av一区| 老鸭窝一区二区久久精品| 国产欧美一区二区精品忘忧草| 成人伦理片在线| 亚洲大片免费看| 欧美精品一区二区三区蜜桃 | 国产日韩在线不卡| 91亚洲精品久久久蜜桃网站| 成人美女视频在线观看| 一区二区三区在线免费| 欧美一级二级三级蜜桃| 成人在线综合网| 午夜av电影一区| 中文字幕第一页久久| 精品视频1区2区3区| 精品系列免费在线观看| 亚洲免费观看高清在线观看| 日韩一区二区三区视频| 高清视频一区二区| 日韩精品乱码av一区二区| 亚洲国产精品v| 884aa四虎影成人精品一区| 国产精品影视天天线| 亚洲成人激情av| 日本一区二区综合亚洲| 7777精品久久久大香线蕉| 成人黄动漫网站免费app| 青青草97国产精品免费观看| 国产精品国产三级国产普通话99 | 亚洲精品视频自拍| 欧美电影免费观看高清完整版在| 久久综合久久综合亚洲| 中文字幕永久在线不卡| 日韩欧美高清dvd碟片| 色综合久久综合| 欧美成人精品1314www| 日韩一区在线免费观看| 精品国产污污免费网站入口 | 日本视频一区二区| 亚洲美女区一区| 国产精品网曝门| 日韩精品一区二区三区老鸭窝| 欧洲中文字幕精品| 成人av网站在线观看免费| 久久99精品久久久久| 午夜影视日本亚洲欧洲精品| 亚洲日本在线天堂| 国产精品色眯眯| 久久精品夜色噜噜亚洲aⅴ| 日韩精品专区在线| 91精品蜜臀在线一区尤物| 在线免费精品视频| 99精品偷自拍| 99re6这里只有精品视频在线观看 99re8在线精品视频免费播放 | 欧美午夜电影网| 色诱视频网站一区| 色婷婷久久一区二区三区麻豆| 成人视屏免费看| 国产成人在线视频网站| 国产高清亚洲一区| 国产成人自拍网| 国v精品久久久网| 不卡的电视剧免费网站有什么| 国产高清在线观看免费不卡| 国产精品1024久久| 东方aⅴ免费观看久久av| 国产精品一区一区三区| 国产一区不卡在线| 国产激情精品久久久第一区二区| 国产精品18久久久久久久久久久久| 九色|91porny| 国产精品一线二线三线精华| 国产91在线看| 99国产精品久久久| 欧美综合亚洲图片综合区| 欧美在线啊v一区| 欧美电影一区二区| 精品少妇一区二区三区视频免付费| 日韩限制级电影在线观看| 精品欧美乱码久久久久久1区2区| 精品久久国产字幕高潮| 久久精品视频免费观看| 国产精品久久久久桃色tv| 1024成人网| 亚洲图片有声小说| 麻豆国产欧美一区二区三区| 国产一区二区三区久久悠悠色av| 国产精品小仙女| 色呦呦一区二区三区| 欧美一区二区成人| 国产亚洲欧美在线| 亚洲欧美福利一区二区| 日韩激情中文字幕| 国产精品69毛片高清亚洲| 91国偷自产一区二区三区观看| 欧美日韩成人一区| 亚洲国产精品99久久久久久久久| 最新成人av在线| 免费一级片91| 成人福利在线看| 欧美精品在线一区二区三区| 久久精品人人爽人人爽| 夜夜揉揉日日人人青青一国产精品| 日韩电影免费一区| 99视频有精品| 91精品国产综合久久精品图片| 国产亚洲欧美一区在线观看| 亚洲影院理伦片| 丰满少妇久久久久久久| 亚洲欧洲精品一区二区精品久久久| 亚洲国产三级在线| 国产精品一二一区| 欧美日韩精品久久久| 中文字幕精品综合| 日韩电影网1区2区| 一本大道久久精品懂色aⅴ| 欧美大片一区二区三区| 亚洲免费在线视频一区 二区| 极品瑜伽女神91| 欧美熟乱第一页| 国产精品成人一区二区三区夜夜夜| 日本va欧美va精品| 色婷婷亚洲精品| 国产精品久久久爽爽爽麻豆色哟哟| 蜜桃av噜噜一区二区三区小说| 91成人国产精品| 中文字幕不卡的av| 久久99久久99| 欧美久久久久久蜜桃| 综合精品久久久| 国产成人免费xxxxxxxx| 337p粉嫩大胆色噜噜噜噜亚洲| 亚洲国产va精品久久久不卡综合| av午夜精品一区二区三区| 久久精品亚洲一区二区三区浴池| 丝袜美腿亚洲综合| 91成人免费电影| 一区二区三区不卡视频在线观看| 成人免费视频免费观看| 久久网这里都是精品| 乱一区二区av| 日韩精品在线一区二区| 日本一不卡视频| 91精品国产91久久久久久最新毛片| 亚洲视频一二三区| 国产91精品入口| 国产精品欧美一区二区三区| 国产成a人亚洲精品| 久久综合九色综合97婷婷女人 | 艳妇臀荡乳欲伦亚洲一区| 99在线精品免费| 中文字幕在线观看不卡| 高清免费成人av| 日韩一区日韩二区| 色天使色偷偷av一区二区| 亚洲三级在线观看| 在线国产亚洲欧美| 一区二区三区电影在线播| 在线观看视频一区二区欧美日韩| 亚洲精品成人天堂一二三| 色欧美日韩亚洲| 五月天婷婷综合| 欧美sm美女调教| 岛国av在线一区| 亚洲精品久久久蜜桃| 精品污污网站免费看| 亚洲福利一二三区| 91.麻豆视频| 国内精品免费在线观看| 久久午夜色播影院免费高清| 国产69精品久久99不卡| 亚洲色图丝袜美腿| 在线观看av一区二区| 日本欧美一区二区在线观看| 日韩一区二区三区在线| 激情小说欧美图片| 国产欧美日韩另类一区| aaa国产一区| 午夜精彩视频在线观看不卡| 91精品国模一区二区三区| 国产精品一区二区久激情瑜伽| 最新高清无码专区| 欧美精品久久天天躁| 国产伦理精品不卡| 亚洲欧美自拍偷拍色图| 7878成人国产在线观看| 成人一区二区三区| 亚洲成人免费影院| 国产三区在线成人av| 色94色欧美sute亚洲13|