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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ds1374.c

?? 底層驅(qū)動開發(fā)
?? C
字號:
/* * drivers/i2c/chips/ds1374.c * * I2C client/driver for the Maxim/Dallas DS1374 Real-Time Clock * * Author: Randy Vinson <rvinson@mvista.com> * * Based on the m41t00.c by Mark Greer <mgreer@mvista.com> * * 2005 (c) MontaVista Software, Inc. This file is licensed under * the terms of the GNU General Public License version 2. This program * is licensed "as is" without any warranty of any kind, whether express * or implied. *//* * This i2c client/driver wedges between the drivers/char/genrtc.c RTC * interface and the SMBus interface of the i2c subsystem. * It would be more efficient to use i2c msgs/i2c_transfer directly but, as * recommened in .../Documentation/i2c/writing-clients section * "Sending and receiving", using SMBus level communication is preferred. */#include <linux/kernel.h>#include <linux/module.h>#include <linux/interrupt.h>#include <linux/i2c.h>#include <linux/rtc.h>#include <linux/bcd.h>#define DS1374_REG_TOD0		0x00#define DS1374_REG_TOD1		0x01#define DS1374_REG_TOD2		0x02#define DS1374_REG_TOD3		0x03#define DS1374_REG_WDALM0	0x04#define DS1374_REG_WDALM1	0x05#define DS1374_REG_WDALM2	0x06#define DS1374_REG_CR		0x07#define DS1374_REG_SR		0x08#define DS1374_REG_SR_OSF	0x80#define DS1374_REG_TCR		0x09#define	DS1374_DRV_NAME		"ds1374"static DECLARE_MUTEX(ds1374_mutex);static struct i2c_driver ds1374_driver;static struct i2c_client *save_client;static unsigned short ignore[] = { I2C_CLIENT_END };static unsigned short normal_addr[] = { 0x68, I2C_CLIENT_END };static struct i2c_client_address_data addr_data = {	.normal_i2c = normal_addr,	.probe = ignore,	.ignore = ignore,};static ulong ds1374_read_rtc(void){	ulong time = 0;	int reg = DS1374_REG_WDALM0;	while (reg--) {		s32 tmp;		if ((tmp = i2c_smbus_read_byte_data(save_client, reg)) < 0) {			dev_warn(&save_client->dev,				 "can't read from rtc chip\n");			return 0;		}		time = (time << 8) | (tmp & 0xff);	}	return time;}static void ds1374_write_rtc(ulong time){	int reg;	for (reg = DS1374_REG_TOD0; reg < DS1374_REG_WDALM0; reg++) {		if (i2c_smbus_write_byte_data(save_client, reg, time & 0xff)		    < 0) {			dev_warn(&save_client->dev,				 "can't write to rtc chip\n");			break;		}		time = time >> 8;	}}static void ds1374_check_rtc_status(void){	s32 tmp;	tmp = i2c_smbus_read_byte_data(save_client, DS1374_REG_SR);	if (tmp < 0) {		dev_warn(&save_client->dev,			 "can't read status from rtc chip\n");		return;	}	if (tmp & DS1374_REG_SR_OSF) {		dev_warn(&save_client->dev,			 "oscillator discontinuity flagged, time unreliable\n");		tmp &= ~DS1374_REG_SR_OSF;		tmp = i2c_smbus_write_byte_data(save_client, DS1374_REG_SR,						tmp & 0xff);		if (tmp < 0)			dev_warn(&save_client->dev,				 "can't clear discontinuity notification\n");	}}ulong ds1374_get_rtc_time(void){	ulong t1, t2;	int limit = 10;		/* arbitrary retry limit */	down(&ds1374_mutex);	/*	 * Since the reads are being performed one byte at a time using	 * the SMBus vs a 4-byte i2c transfer, there is a chance that a	 * carry will occur during the read. To detect this, 2 reads are	 * performed and compared.	 */	do {		t1 = ds1374_read_rtc();		t2 = ds1374_read_rtc();	} while (t1 != t2 && limit--);	up(&ds1374_mutex);	if (t1 != t2) {		dev_warn(&save_client->dev,			 "can't get consistent time from rtc chip\n");		t1 = 0;	}	return t1;}static void ds1374_set_tlet(ulong arg){	ulong t1, t2;	int limit = 10;		/* arbitrary retry limit */	t1 = *(ulong *) arg;	down(&ds1374_mutex);	/*	 * Since the writes are being performed one byte at a time using	 * the SMBus vs a 4-byte i2c transfer, there is a chance that a	 * carry will occur during the write. To detect this, the write	 * value is read back and compared.	 */	do {		ds1374_write_rtc(t1);		t2 = ds1374_read_rtc();	} while (t1 != t2 && limit--);	up(&ds1374_mutex);	if (t1 != t2)		dev_warn(&save_client->dev,			 "can't confirm time set from rtc chip\n");}static ulong new_time;DECLARE_TASKLET_DISABLED(ds1374_tasklet, ds1374_set_tlet, (ulong) & new_time);int ds1374_set_rtc_time(ulong nowtime){	new_time = nowtime;	if (in_interrupt())		tasklet_schedule(&ds1374_tasklet);	else		ds1374_set_tlet((ulong) & new_time);	return 0;}/* ***************************************************************************** * *	Driver Interface * ***************************************************************************** */static int ds1374_probe(struct i2c_adapter *adap, int addr, int kind){	struct i2c_client *client;	int rc;	client = kmalloc(sizeof(struct i2c_client), GFP_KERNEL);	if (!client)		return -ENOMEM;	memset(client, 0, sizeof(struct i2c_client));	strncpy(client->name, DS1374_DRV_NAME, I2C_NAME_SIZE);	client->flags = I2C_DF_NOTIFY;	client->addr = addr;	client->adapter = adap;	client->driver = &ds1374_driver;	if ((rc = i2c_attach_client(client)) != 0) {		kfree(client);		return rc;	}	save_client = client;	ds1374_check_rtc_status();	return 0;}static int ds1374_attach(struct i2c_adapter *adap){	return i2c_probe(adap, &addr_data, ds1374_probe);}static int ds1374_detach(struct i2c_client *client){	int rc;	if ((rc = i2c_detach_client(client)) == 0) {		kfree(i2c_get_clientdata(client));		tasklet_kill(&ds1374_tasklet);	}	return rc;}static struct i2c_driver ds1374_driver = {	.owner = THIS_MODULE,	.name = DS1374_DRV_NAME,	.id = I2C_DRIVERID_DS1374,	.flags = I2C_DF_NOTIFY,	.attach_adapter = ds1374_attach,	.detach_client = ds1374_detach,};static int __init ds1374_init(void){	return i2c_add_driver(&ds1374_driver);}static void __exit ds1374_exit(void){	i2c_del_driver(&ds1374_driver);}module_init(ds1374_init);module_exit(ds1374_exit);MODULE_AUTHOR("Randy Vinson <rvinson@mvista.com>");MODULE_DESCRIPTION("Maxim/Dallas DS1374 RTC I2C Client Driver");MODULE_LICENSE("GPL");

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧美成人猛片aaaaaaa| 亚洲精品乱码久久久久久黑人| 亚洲女厕所小便bbb| 国产精品综合二区| 69堂亚洲精品首页| 天涯成人国产亚洲精品一区av| 99国产精品国产精品毛片| 久久久久国产精品人| 久久99精品久久久| 精品处破学生在线二十三| 麻豆成人久久精品二区三区小说| 欧美日韩免费高清一区色橹橹| 亚洲老司机在线| 欧美三级日韩三级| 日本少妇一区二区| 久久精品一区二区三区不卡| 国产成人av一区二区三区在线 | 欧美区一区二区三区| **性色生活片久久毛片| 色天使色偷偷av一区二区| 亚洲人成人一区二区在线观看| 在线观看91精品国产入口| 天天影视网天天综合色在线播放| 欧美一区二区三区喷汁尤物| 国产在线观看免费一区| 亚洲日本丝袜连裤袜办公室| 欧美日韩高清影院| 久久精品视频在线看| 色婷婷久久久综合中文字幕 | 91精品福利在线一区二区三区| 美国av一区二区| 国产精品福利影院| 欧美一区二区三区婷婷月色| 99久久久国产精品免费蜜臀| 污片在线观看一区二区| 欧美极品另类videosde| 5858s免费视频成人| 99国产欧美久久久精品| 国产无一区二区| 欧美成人a∨高清免费观看| 91久久精品国产91性色tv| 国产91综合一区在线观看| 99久久99久久精品免费观看| 国产精品乱码人人做人人爱| 国产亚洲一二三区| 久久99精品国产.久久久久久| 日韩欧美综合一区| 国产一区高清在线| 蜜臀精品一区二区三区在线观看| 国产**成人网毛片九色 | 欧美日韩黄视频| 91美女蜜桃在线| 国产91精品一区二区| 国产精品一区二区三区99| 久久国产精品第一页| 蜜桃视频一区二区三区 | 亚洲国产精品t66y| 国产精品99久久久久久久女警| 国产精品素人一区二区| 中文一区一区三区高中清不卡| 亚洲一卡二卡三卡四卡无卡久久 | 成人av电影在线| 97se亚洲国产综合自在线不卡 | 99天天综合性| 亚洲国产成人av网| 欧美变态tickling挠脚心| 日韩精品一区二区在线| 精品欧美一区二区在线观看 | 91精品国产欧美一区二区成人| 欧美色区777第一页| 国产精品亚洲人在线观看| 中文字幕一区二区三中文字幕| 亚洲男人的天堂av| 天堂成人免费av电影一区| 韩国精品一区二区| 91在线小视频| 欧美va亚洲va香蕉在线| 中文字幕不卡的av| 日韩福利视频导航| 成人理论电影网| 91精品国产综合久久久久久| 中文字幕欧美三区| 老司机免费视频一区二区| 色综合色狠狠天天综合色| 久久久久久9999| 天天综合天天综合色| 成人动漫一区二区在线| 欧美大片在线观看| 亚洲激情自拍视频| av动漫一区二区| 国产午夜精品久久| 日本大胆欧美人术艺术动态| 91麻豆精品秘密| 中文字幕一区在线观看| 国产一区二区视频在线| 日韩一级二级三级精品视频| 欧美另类videos死尸| 欧美日韩国产天堂| 亚洲欧美日本韩国| 国产98色在线|日韩| 国产三级欧美三级日产三级99 | 精品黑人一区二区三区久久 | 国产精品妹子av| 国产一区在线精品| 久久久夜色精品亚洲| 国产免费观看久久| 成人av电影在线| 一区二区三区毛片| 欧美性色黄大片| 热久久一区二区| 欧美精品一区二区三区蜜桃 | 久久精品国产亚洲高清剧情介绍| 5566中文字幕一区二区电影| 精品在线一区二区| 久久综合成人精品亚洲另类欧美| 国内久久精品视频| 一区二区三区四区av| 911精品产国品一二三产区| 狠狠色丁香九九婷婷综合五月| 国产香蕉久久精品综合网| 91视频免费观看| 日韩黄色在线观看| 18欧美亚洲精品| 欧美电影精品一区二区| 91在线视频免费观看| 亚洲成av人片一区二区梦乃| 久久综合狠狠综合久久激情| 91麻豆swag| 欧美精品一区二区三区视频| 香港成人在线视频| 一区二区激情视频| 国产亚洲综合在线| 99久久久免费精品国产一区二区| 婷婷久久综合九色综合绿巨人| 欧美v日韩v国产v| 91成人看片片| 99re66热这里只有精品3直播| 久久99精品一区二区三区| 亚洲一区二区av电影| 日本一区二区三级电影在线观看| 欧美一卡二卡在线观看| 亚洲成年人影院| 尤物视频一区二区| 自拍偷拍欧美精品| 成人毛片在线观看| 成人网在线免费视频| 黑人巨大精品欧美一区| 蜜臀va亚洲va欧美va天堂| 亚洲va韩国va欧美va| 亚洲午夜影视影院在线观看| 自拍偷拍亚洲欧美日韩| 亚洲视频在线观看三级| 综合在线观看色| 亚洲欧美日韩国产一区二区三区| 国产欧美视频在线观看| 国产视频一区二区在线| 久久精品视频一区二区| 国产精品美女久久久久久久| 亚洲国产精品av| 一区二区三区在线播放| 五月综合激情日本mⅴ| 美女视频黄免费的久久| 国产精品77777| 91蜜桃传媒精品久久久一区二区| 色欧美片视频在线观看在线视频| 99这里只有久久精品视频| 91香蕉视频mp4| 日韩精品专区在线影院重磅| 日韩精品一区二区三区四区| 日本一区二区视频在线| 亚洲午夜久久久久| 国产精品99久久久久久久vr| 亚洲丝袜美腿综合| 日韩精品免费专区| 99免费精品视频| 日韩一级二级三级| 亚洲乱码精品一二三四区日韩在线| 婷婷综合另类小说色区| 粉嫩在线一区二区三区视频| 欧美精品欧美精品系列| 中文字幕色av一区二区三区| 久久精品99国产精品| 在线免费视频一区二区| 欧美精彩视频一区二区三区| 亚洲国产精品久久久久婷婷884| 国产成人av影院| 久久久久久久久久久久电影 | 亚洲一二三四在线| 国产成人av自拍| 久久精品日产第一区二区三区高清版| 一卡二卡三卡日韩欧美| 成人一区二区三区中文字幕| 精品动漫一区二区三区在线观看| 亚洲福利视频一区二区| 欧美亚洲动漫精品| 亚洲丰满少妇videoshd| 欧美亚洲国产bt| 日韩电影在线观看电影| 欧美伦理电影网| 奇米精品一区二区三区在线观看一|