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

? 歡迎來(lái)到蟲(chóng)蟲(chóng)下載站! | ?? 資源下載 ?? 資源專(zhuān)輯 ?? 關(guān)于我們
? 蟲(chóng)蟲(chóng)下載站

?? cyc_rtc.c

?? 我修改sbc2410開(kāi)發(fā)板的例子成功運(yùn)行的s3c2410的字符驅(qū)動(dòng)。
?? C
字號(hào):
/* * Real Time Clock interface for Samsung S3C2410 MPU * * Based on linux/drivers/char/s3c2400-rtc.c * * Copyright (C) 2003 MIZI Research, Inc. * * Author: Chan Gyun Jeong <cgjeong@mizi.com> * $Id: s3c2410-rtc.c,v 1.1.2.1 2003/01/13 14:52:07 tolkien Exp $ * */#include <linux/config.h>#include <linux/module.h>#include <linux/kernel.h>#include <linux/init.h>#include <linux/miscdevice.h>#include <linux/proc_fs.h>#include <linux/poll.h>#include <linux/rtc.h>#include <asm-arm/arch-s3c2410/S3C2410.h>#include <asm-arm/arch-s3c2410/irqs.h>#include <asm/uaccess.h>#include <asm/irq.h>#define DRIVER_VERSION		"0.1"#ifndef BCD_TO_BIN#define BCD_TO_BIN(val)		((val)=((val)&15) + ((val)>>4)*10)#endif#ifndef BIN_TO_BCD#define BIN_TO_BCD(val)		((val)=(((val)/10)<<4) + (val)%10)#endif#define RTC_LEAP_YEAR		2000/* Those are the bits from a classic RTC we want to mimic */#ifndef RTC_IRQF#define RTC_IRQF		0x80	/* any of the following 3 is active */#endif#ifndef RTC_PF#define RTC_PF			0x40#endif#ifndef RTC_AF#define RTC_AF			0x20#endif#ifndef RTC_UF#define RTC_UF			0x10#endifstatic unsigned long rtc_status;static unsigned long rtc_irq_data;static struct fasync_struct *rtc_async_queue;static DECLARE_WAIT_QUEUE_HEAD(rtc_wait);extern spinlock_t rtc_lock;static void get_rtc_time(int alm, struct rtc_time *rtc_tm){	spin_lock_irq(&rtc_lock);	if (alm == 1) {		rtc_tm->tm_year = (unsigned char)ALMYEAR & Msk_RTCYEAR;		rtc_tm->tm_mon = (unsigned char)ALMMON & Msk_RTCMON;	//	rtc_tm->tm_mday = (unsigned char)ALMDATE& Msk_RTCDATE; //RRRRR		rtc_tm->tm_hour = (unsigned char)ALMHOUR & Msk_RTCHOUR;		rtc_tm->tm_min = (unsigned char)ALMMIN & Msk_RTCMIN;		rtc_tm->tm_sec = (unsigned char)ALMSEC & Msk_RTCSEC;	}	else { read_rtc_bcd_time:		rtc_tm->tm_year = (unsigned char)BCDYEAR & Msk_RTCYEAR;		rtc_tm->tm_mon = (unsigned char)BCDMON & Msk_RTCMON;		rtc_tm->tm_mday = (unsigned char)BCDDATE& Msk_RTCDATE; //RRRRR		rtc_tm->tm_hour = (unsigned char)BCDHOUR & Msk_RTCHOUR;		rtc_tm->tm_min = (unsigned char)BCDMIN & Msk_RTCMIN;		rtc_tm->tm_sec = (unsigned char)BCDSEC & Msk_RTCSEC;		if (rtc_tm->tm_sec == 0) {			/* Re-read all BCD registers in case of BCDSEC is 0.			   See RTC section at the manual for more info. */			goto read_rtc_bcd_time;		}	}	spin_unlock_irq(&rtc_lock);	BCD_TO_BIN(rtc_tm->tm_year);	BCD_TO_BIN(rtc_tm->tm_mon);	BCD_TO_BIN(rtc_tm->tm_mday);	BCD_TO_BIN(rtc_tm->tm_hour);	BCD_TO_BIN(rtc_tm->tm_min);	BCD_TO_BIN(rtc_tm->tm_sec);	/* The epoch of tm_year is 1900 */	rtc_tm->tm_year += RTC_LEAP_YEAR - 1900;	/* tm_mon starts at 0, but rtc month starts at 1 */	rtc_tm->tm_mon--;}static int set_rtc_time(int alm, struct rtc_time *rtc_tm){	unsigned char year, mon, day, hour, min, sec;	if (rtc_tm->tm_year < (RTC_LEAP_YEAR - 1900)) {		/* The year must be higher or equal than 2000 */		return -EINVAL;	}	year = (rtc_tm->tm_year + 1900) - RTC_LEAP_YEAR;	mon = rtc_tm->tm_mon + 1; /* tm_mon starts at zero */	day = rtc_tm->tm_mday;	hour = rtc_tm->tm_hour;	min = rtc_tm->tm_min;	sec = rtc_tm->tm_sec;	BIN_TO_BCD(sec);	BIN_TO_BCD(min);	BIN_TO_BCD(hour);	BIN_TO_BCD(day);	BIN_TO_BCD(mon);	BIN_TO_BCD(year);	spin_lock_irq(&rtc_lock); 	/* Enable RTC control */	RTCCON |= RTCCON_EN; 	if (alm) {		ALMSEC = sec & Msk_RTCSEC;		ALMMIN = min & Msk_RTCMIN;		ALMHOUR = hour & Msk_RTCHOUR;	//	ALMDATE= day & Msk_RTCDATE; // RRRRR		ALMMON = mon & Msk_RTCMON;		ALMYEAR = year & Msk_RTCYEAR;	} 	else {		BCDSEC = sec & Msk_RTCSEC;		BCDMIN = min & Msk_RTCMIN;		BCDHOUR = hour & Msk_RTCHOUR;		BCDDATE= day & Msk_RTCDATE; // RRRRR		BCDMON = mon & Msk_RTCMON;		BCDYEAR = year & Msk_RTCYEAR;	}	/* Disable RTC control */	RTCCON &= ~RTCCON_EN;	spin_unlock_irq(&rtc_lock);	return 0;}static void rtc_alm_interrupt(int irq, void *dev_id, struct pt_regs *regs){	spin_lock (&rtc_lock);	/* Update IRQ data & counter */	rtc_irq_data += 0x100;	rtc_irq_data |= (RTC_AF|RTC_IRQF);	spin_unlock (&rtc_lock);	/* Now do the rest of the actions */	wake_up_interruptible(&rtc_wait);		kill_fasync (&rtc_async_queue, SIGIO, POLL_IN);}static int rtc_open(struct inode *inode, struct file *file){	MOD_INC_USE_COUNT;	spin_lock_irq(&rtc_lock);	if (rtc_status) {		spin_unlock_irq(&rtc_lock);		MOD_DEC_USE_COUNT;		return -EBUSY;	}	rtc_status = 1;	rtc_irq_data = 0;	spin_unlock_irq(&rtc_lock);	return 0;}static int rtc_release(struct inode *inode, struct file *file){	/*	 * Turn off all interrupts once the device is no longer	 * in use, and clear the data.	 */	spin_lock_irq(&rtc_lock);#ifndef CONFIG_MIZI	/* Disable alarm interrupt */	RTCCON |= RTCCON_EN;	RTCALM = RTCALM_DIS;	RTCCON &= ~RTCCON_EN;#endif	rtc_status = 0;	rtc_irq_data = 0;	spin_unlock_irq(&rtc_lock);	MOD_DEC_USE_COUNT;	return 0;}static int rtc_fasync (int fd, struct file *filp, int on){	return fasync_helper (fd, filp, on, &rtc_async_queue);}static unsigned int rtc_poll(struct file *file, poll_table *wait){	unsigned long l;	poll_wait (file, &rtc_wait, wait);	spin_lock_irq (&rtc_lock);	l = rtc_irq_data;	spin_unlock_irq (&rtc_lock);	if (l != 0) { 		return POLLIN | POLLRDNORM;	}	return 0;}ssize_t rtc_read(struct file *file, char *buf, size_t count, loff_t *ppos){	DECLARE_WAITQUEUE(wait, current);	unsigned long data;	ssize_t retval;	if (count < sizeof(unsigned long))		return -EINVAL;	add_wait_queue(&rtc_wait, &wait);	set_current_state(TASK_INTERRUPTIBLE);	while (1) {		spin_lock_irq (&rtc_lock);		data = rtc_irq_data;		rtc_irq_data = 0;		spin_unlock_irq (&rtc_lock);		if (data != 0) {			break;		}				if (file->f_flags & O_NONBLOCK) {			retval = -EAGAIN;			goto out;		}		if (signal_pending(current)) {			retval = -ERESTARTSYS;			goto out;		}		schedule();	}	retval = put_user(data, (unsigned long *)buf);	if (!retval)		retval = sizeof(unsigned long);out:	set_current_state(TASK_RUNNING);	remove_wait_queue(&rtc_wait, &wait);	return retval;}static int rtc_ioctl(struct inode *inode, struct file *file,		     unsigned int cmd, unsigned long arg){	struct rtc_time tm;	switch (cmd) {		/* Alarm interrupt on/off */	case RTC_AIE_ON:		spin_lock_irq (&rtc_lock);		RTCCON |= RTCCON_EN; 		RTCALM = RTCALM_EN; 		RTCCON &= ~RTCCON_EN;		spin_unlock_irq (&rtc_lock);		return 0;	case RTC_AIE_OFF:		spin_lock_irq (&rtc_lock);		RTCCON |= RTCCON_EN;		RTCALM = RTCALM_DIS;		RTCCON &= ~RTCCON_EN;		spin_unlock_irq (&rtc_lock);		return 0;		/* Update interrupt on/off */	case RTC_UIE_ON:	case RTC_UIE_OFF:		/* Periodic interrupt on/off */	case RTC_PIE_ON:	case RTC_PIE_OFF:				case RTC_WIE_ON:	case RTC_WIE_OFF:		/* Periodic interrupt freq get/set */	case RTC_IRQP_READ:	case RTC_IRQP_SET:		/* Epoch get/set */	case RTC_EPOCH_READ:	case RTC_EPOCH_SET:	case RTC_WKALM_SET:	case RTC_WKALM_RD:		/* Not supported */		return -EINVAL;		/* Alarm get/set */	case RTC_ALM_READ:		get_rtc_time(1, &tm);		return copy_to_user((void *)arg, &tm, sizeof(tm)) ? 			-EFAULT : 0;	case RTC_ALM_SET:		if (copy_from_user(&tm, (struct rtc_time*) arg, sizeof(tm))) {			return -EFAULT;		}		return set_rtc_time(1, &tm);		/* Time get/set */	case RTC_RD_TIME:		get_rtc_time(0, &tm);		return copy_to_user((void *)arg, &tm, sizeof(tm)) ? 			-EFAULT : 0;	case RTC_SET_TIME:		if (copy_from_user(&tm, (struct rtc_time*) arg, sizeof(tm))) {			return -EFAULT;		}		return set_rtc_time(0, &tm);	default:		return -EINVAL;	}}#ifdef CONFIG_PROC_FSstatic int rtc_read_proc(char *page, char **start, off_t off,                         int count, int *eof, void *data){	char *p = page;	int len;	struct rtc_time tm;	get_rtc_time(0, &tm);	p += sprintf(p, "rtc_time\t: %02d:%02d:%02d\n"		     "rtc_date\t: %04d-%02d-%02d\n"		     "rtc_epoch\t: %04d\n",		     tm.tm_hour, tm.tm_min, tm.tm_sec,		     tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday, 		     RTC_LEAP_YEAR);	get_rtc_time(1, &tm);	p += sprintf(p, "alarm_time\t: %02d:%02d:%02d\n"		     "alarm_date\t: %04d-%02d-%02d\n",		     tm.tm_hour, tm.tm_min, tm.tm_sec,		     tm.tm_year + 1900, tm.tm_mon + 1, tm.tm_mday);	p += sprintf(p, "alarm_IRQ\t: %s\n", 		     (RTCALM & RTCALM_EN) ? "yes" : "no" );	len = (p - page) - off;	if (len < 0)		len = 0;	*eof = (len <= count) ? 1 : 0;	*start = page + off;	return len;}#endifstatic struct file_operations rtc_fops = {	owner:		THIS_MODULE,	llseek:		no_llseek,	read:		rtc_read,	poll:		rtc_poll,	ioctl:		rtc_ioctl,	open:		rtc_open,	release:	rtc_release,	fasync:		rtc_fasync,};static struct miscdevice rtc_dev={	RTC_MINOR,	"rtc",	&rtc_fops};static int __init rtc_init(void){	int ret;	misc_register(&rtc_dev);#ifdef CONFIG_PROC_FS	create_proc_read_entry("driver/rtc", 0, 0, rtc_read_proc, NULL);#endif	ret = request_irq(IRQ_RTC, rtc_alm_interrupt, SA_INTERRUPT, 			  "RTC Alarm", NULL);	if (ret) {		printk("s3c2410-rtc: failed to register IRQ_RTC(%d)\n", 		       IRQ_RTC);		goto IRQ_RTC_failed;	}	printk("S3C2410 Real Time Clock Driver v" DRIVER_VERSION "\n");	return 0;IRQ_RTC_failed:#ifdef CONFIG_PROC_FS	remove_proc_entry("driver/rtc", NULL);#endif	misc_deregister(&rtc_dev);	return ret;}static void __exit rtc_exit(void){	free_irq(IRQ_RTC, NULL);#ifdef CONFIG_PROC_FS	remove_proc_entry("driver/rtc", NULL);#endif	misc_deregister(&rtc_dev);}module_init(rtc_init);module_exit(rtc_exit);MODULE_AUTHOR("Chan Gyun Jeong <cgjeong@mizi.com>");MODULE_LICENSE("GPL");MODULE_DESCRIPTION("Real Time Clock interface for Samsung S3C2410 MPU");EXPORT_NO_SYMBOLS;

?? 快捷鍵說(shuō)明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號(hào) Ctrl + =
減小字號(hào) Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
久久精品国产免费| 精品精品欲导航| 17c精品麻豆一区二区免费| 国产一区二区三区综合| 久久亚洲精品国产精品紫薇| 九一久久久久久| 久久久久久久久久看片| 高潮精品一区videoshd| 中文字幕一区二区三区av| 欧美综合一区二区三区| 亚洲妇女屁股眼交7| 欧美一卡二卡在线| 国产精品白丝av| 亚洲精选视频免费看| 欧美日韩国产一级二级| 国产精品久久久久永久免费观看| 成人免费视频app| 亚洲欧美日韩中文字幕一区二区三区| 欧美日韩你懂的| 国产在线精品一区二区三区不卡| 国产欧美一区二区三区在线老狼| 午夜在线成人av| 欧美精品黑人性xxxx| 亚洲成人免费在线观看| 久久久精品日韩欧美| 91官网在线观看| 国产毛片精品视频| 亚洲黄一区二区三区| 精品日韩一区二区| 色国产综合视频| 欧美国产日韩亚洲一区| 欧美揉bbbbb揉bbbbb| 亚洲欧美视频一区| 国产精品一区不卡| 欧美一卡二卡在线| 成人av免费网站| 丝袜美腿亚洲色图| 国产精品天干天干在观线| 在线不卡中文字幕| 99精品国产一区二区三区不卡| 日韩电影在线看| 视频一区二区欧美| 欧美成人三级电影在线| 在线观看日韩精品| 国产成人在线视频免费播放| 亚洲电影一区二区| 欧美二区三区的天堂| av激情成人网| 国产成人av福利| 午夜精品福利一区二区三区av | 久久免费电影网| 色激情天天射综合网| 亚洲欧美日韩在线| 亚洲国产精品ⅴa在线观看| 欧美一区二区高清| 欧洲国产伦久久久久久久| 国产ts人妖一区二区| 日本va欧美va精品| 五月天国产精品| 欧美精品一区二区三区蜜桃视频| 在线免费观看视频一区| youjizz久久| 综合在线观看色| 久久精品免费在线观看| 欧美一区二区视频在线观看2022| 色视频欧美一区二区三区| av午夜一区麻豆| 99re成人精品视频| 丰满亚洲少妇av| 国产精品一区二区无线| 精品一区二区三区视频在线观看| 亚洲不卡av一区二区三区| 亚洲精品国产无套在线观| 日韩视频免费观看高清完整版在线观看| 欧美色图一区二区三区| 91黄色激情网站| 国产**成人网毛片九色| 欧美日韩成人综合天天影院| 精品乱人伦小说| 亚洲精品国产精华液| 久久成人免费电影| 91视频精品在这里| 日韩精品一区二区三区中文不卡| 国产精品久久久久天堂| 视频一区二区不卡| 本田岬高潮一区二区三区| 欧美精品一二三| 国产蜜臀97一区二区三区 | 亚洲动漫第一页| bt欧美亚洲午夜电影天堂| 狠狠v欧美v日韩v亚洲ⅴ| 91蜜桃网址入口| 精品噜噜噜噜久久久久久久久试看| 日本一区二区三区久久久久久久久不| 中文字幕在线不卡| 精品亚洲免费视频| 色婷婷av久久久久久久| ...av二区三区久久精品| 日日嗨av一区二区三区四区| 成人激情动漫在线观看| 欧美另类高清zo欧美| 国产精品免费aⅴ片在线观看| 五月天一区二区| 99麻豆久久久国产精品免费优播| 欧美第一区第二区| 亚洲午夜电影在线观看| 成人ar影院免费观看视频| 欧美一区二区日韩一区二区| 一区二区三区影院| 国产91精品精华液一区二区三区| 欧美久久一区二区| 亚洲精选在线视频| a亚洲天堂av| 亚洲国产精品精华液ab| 久久精品国产999大香线蕉| 欧美日韩精品一区视频| 亚洲四区在线观看| 国产成人午夜高潮毛片| 欧美久久久久久久久| 亚洲精品日日夜夜| 不卡在线观看av| 国产日韩影视精品| 国产一区二区伦理片| 26uuu另类欧美| 精品一区二区三区欧美| 欧美一级黄色片| 日本伊人色综合网| 欧美美女一区二区三区| 亚洲综合999| 欧美亚洲愉拍一区二区| 亚洲人成网站在线| 91论坛在线播放| 亚洲三级免费电影| 97精品国产露脸对白| 国产精品对白交换视频| 成人av网址在线| 亚洲欧洲日产国产综合网| 成人a级免费电影| 国产精品欧美一级免费| av在线一区二区| 亚洲欧美一区二区三区国产精品 | 国产精品中文字幕一区二区三区| 精品国产一区久久| 久久精品国产第一区二区三区| 日韩欧美专区在线| 狠狠色综合播放一区二区| 久久综合给合久久狠狠狠97色69| 蜜桃一区二区三区在线观看| 日韩欧美一区二区久久婷婷| 久久99久久精品欧美| 久久人人超碰精品| 国产aⅴ综合色| 亚洲三级电影全部在线观看高清| 色偷偷88欧美精品久久久| 亚洲一区二区三区四区在线观看| 欧美调教femdomvk| 男女视频一区二区| 国产日韩欧美综合一区| 99久久综合狠狠综合久久| 亚洲欧美日韩国产综合| 精品视频在线免费| 激情综合网激情| 国产精品视频一二三| 91福利国产成人精品照片| 婷婷六月综合亚洲| 久久综合视频网| 99精品欧美一区| 亚洲va中文字幕| 2021中文字幕一区亚洲| 一本一道波多野结衣一区二区| 亚洲女同ⅹxx女同tv| 欧美日韩免费一区二区三区 | 亚洲黄色在线视频| 精品视频999| 国产一区二区三区在线看麻豆| 日本一区二区三区在线观看| 欧美综合色免费| 国产精品天干天干在观线| 欧美丰满少妇xxxxx高潮对白 | 国产成人午夜视频| 亚洲综合清纯丝袜自拍| 日韩免费视频一区| 91视视频在线观看入口直接观看www | www.久久精品| 日韩和欧美一区二区| 国产欧美一二三区| 欧美日韩成人高清| 成人黄色在线网站| 另类小说欧美激情| 最新不卡av在线| 精品国产免费人成在线观看| 99久久伊人网影院| 蜜桃av一区二区| 一区二区三区91| 久久精品男人的天堂| 911精品产国品一二三产区| 99国产欧美久久久精品| 国内精品免费**视频| 亚洲成人自拍一区| 中文字幕亚洲视频|