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

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

?? ds1374.c

?? LINUX 2.6.17.4的源碼
?? 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>#include <linux/mutex.h>#include <linux/workqueue.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 DEFINE_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 */	mutex_lock(&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--);	mutex_unlock(&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_work(void *arg){	ulong t1, t2;	int limit = 10;		/* arbitrary retry limit */	t1 = *(ulong *) arg;	mutex_lock(&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--);	mutex_unlock(&ds1374_mutex);	if (t1 != t2)		dev_warn(&save_client->dev,			 "can't confirm time set from rtc chip\n");}static ulong new_time;static struct workqueue_struct *ds1374_workqueue;static DECLARE_WORK(ds1374_work, ds1374_set_work, &new_time);int ds1374_set_rtc_time(ulong nowtime){	new_time = nowtime;	if (in_interrupt())		queue_work(ds1374_workqueue, &ds1374_work);	else		ds1374_set_work(&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 = kzalloc(sizeof(struct i2c_client), GFP_KERNEL);	if (!client)		return -ENOMEM;	strncpy(client->name, DS1374_DRV_NAME, I2C_NAME_SIZE);	client->addr = addr;	client->adapter = adap;	client->driver = &ds1374_driver;	ds1374_workqueue = create_singlethread_workqueue("ds1374");	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));		destroy_workqueue(ds1374_workqueue);	}	return rc;}static struct i2c_driver ds1374_driver = {	.driver = {		.name	= DS1374_DRV_NAME,	},	.id = I2C_DRIVERID_DS1374,	.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");

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
一区二区三区在线观看动漫| 欧美日韩色综合| 日韩电影免费在线看| 精品国精品国产尤物美女| 国产精品一卡二| 亚洲少妇屁股交4| 在线观看91精品国产麻豆| 国产黑丝在线一区二区三区| 一区二区三区国产| 久久蜜桃一区二区| 欧美伊人久久久久久久久影院| 蜜臀va亚洲va欧美va天堂 | 99久久精品国产一区二区三区| 亚洲综合图片区| 欧美成人伊人久久综合网| av一区二区三区| 久久国产麻豆精品| 亚洲一区二区三区四区的| 日本一区免费视频| 欧美一区二视频| 欧美日韩国产小视频在线观看| 成人黄色在线网站| 国产乱子伦视频一区二区三区| 日韩精品成人一区二区在线| 亚洲激情一二三区| 亚洲欧美自拍偷拍色图| 中文字幕欧美日本乱码一线二线| 欧美一级xxx| 欧美精品久久99| 欧美日韩在线综合| 欧美午夜电影网| 91网站最新地址| 蓝色福利精品导航| 欧美一级一级性生活免费录像| 国产丝袜欧美中文另类| 日韩欧美在线影院| 国内精品在线播放| 91老司机福利 在线| 麻豆精品一区二区综合av| 久久综合99re88久久爱| 日韩午夜激情视频| 成人av在线网站| 免费在线看成人av| 国产欧美一区二区精品久导航| 欧美性做爰猛烈叫床潮| 久久精品国产精品青草| 久久精品国产色蜜蜜麻豆| 一区二区三区国产| 国产日韩精品一区| 91精品国产福利| 91色porny蝌蚪| 在线观看一区不卡| 成人污视频在线观看| 日本欧美一区二区在线观看| 亚洲欧美成人一区二区三区| www一区二区| 色爱区综合激月婷婷| 欧美日韩久久一区二区| av在线播放成人| 九色综合国产一区二区三区| 亚洲va国产va欧美va观看| 欧美一区二区三区四区在线观看 | 69精品人人人人| 欧美亚洲动漫精品| 欧美年轻男男videosbes| 高清不卡一区二区| 加勒比av一区二区| 亚洲国产精品影院| 一区二区在线观看免费视频播放| 精品在线免费观看| 成人午夜视频在线观看| 国产一区二区三区日韩| 免费xxxx性欧美18vr| 五月激情综合网| 亚洲黄色小说网站| 欧美mv日韩mv亚洲| 日韩三级免费观看| 欧美日韩日日骚| 色综合欧美在线视频区| 成人一区二区三区视频在线观看| 亚洲免费电影在线| 精品一区二区三区在线播放| 五月天精品一区二区三区| 一区二区三区.www| 亚洲欧美成aⅴ人在线观看| 国产蜜臀av在线一区二区三区| 91福利在线观看| 在线播放中文字幕一区| 欧美亚日韩国产aⅴ精品中极品| 成人aaaa免费全部观看| 国产精品123区| 国产精品一区免费在线观看| 国产一区二区美女诱惑| 天天色天天操综合| 日韩精品福利网| 日本sm残虐另类| 国产天堂亚洲国产碰碰| 欧美一区二区免费视频| 日韩片之四级片| 久久久国产一区二区三区四区小说| 欧美videossexotv100| 久久久午夜精品| 欧洲日韩一区二区三区| 欧美经典三级视频一区二区三区| 欧美激情在线免费观看| 久久精品欧美一区二区三区不卡| 精品欧美一区二区三区精品久久| 久久久久青草大香线综合精品| 国产亚洲精品bt天堂精选| 中文字幕国产精品一区二区| 亚洲人成小说网站色在线| 国产精品的网站| 亚洲精品国久久99热| 亚洲gay无套男同| 喷水一区二区三区| 美腿丝袜在线亚洲一区| 欧美三级乱人伦电影| 911精品产国品一二三产区| 久久精品日韩一区二区三区| 亚洲欧美精品午睡沙发| 日本在线观看不卡视频| 国产精品一品视频| 欧美三级在线看| 欧美大片国产精品| 国产区在线观看成人精品 | 国产精品一线二线三线精华| 丁香六月久久综合狠狠色| 色8久久精品久久久久久蜜| 久久综合九色综合97婷婷| 亚洲色图在线播放| 另类小说视频一区二区| av中文字幕在线不卡| 欧美亚一区二区| 精品蜜桃在线看| 一区二区三区四区激情| 色香蕉久久蜜桃| 欧美成人一区二区| 亚洲免费在线视频| 精品亚洲国内自在自线福利| 日韩你懂的电影在线观看| 亚洲欧美一区二区在线观看| 美国毛片一区二区| 99国内精品久久| 欧美人伦禁忌dvd放荡欲情| 午夜精品久久久久| 成人av免费网站| 欧美成人a在线| 亚洲与欧洲av电影| 九九九精品视频| 欧美日韩精品三区| 中文在线一区二区| 美女脱光内衣内裤视频久久影院| 99精品视频在线免费观看| 久久久久国产免费免费 | 亚洲午夜精品久久久久久久久| 国产乱码精品一区二区三 | 国产精品久久一级| 久久99久久久欧美国产| 欧美日韩国产精品成人| 国产精品视频yy9299一区| 91麻豆产精品久久久久久 | 欧美国产日本视频| 国产成人99久久亚洲综合精品| 欧美一区二区三区日韩视频| 亚洲日本在线天堂| 不卡视频一二三| 欧美日韩亚洲综合一区二区三区| 天堂va蜜桃一区二区三区漫画版| 91免费国产在线观看| 国产欧美一区二区精品仙草咪 | 美女性感视频久久| 正在播放亚洲一区| 久久精品日产第一区二区三区高清版| 国产成人啪午夜精品网站男同| 精品久久久三级丝袜| 日本免费在线视频不卡一不卡二| 欧美日韩国产天堂| 一区二区三区中文在线| 91精品国产色综合久久ai换脸| 亚洲天堂2016| 国产 日韩 欧美大片| 国产精品麻豆一区二区| 成年人网站91| 91精品欧美一区二区三区综合在| 日韩视频在线永久播放| 婷婷久久综合九色综合绿巨人| 欧美日韩一级视频| 日本一区二区三区久久久久久久久不| 91美女片黄在线| 一区二区三区四区在线免费观看 | 精品国产免费视频| 久久99久久99| 精品理论电影在线观看| 国产在线乱码一区二区三区| 一区二区三区四区激情| 欧美高清性hdvideosex| 久久精品二区亚洲w码| 国产午夜精品在线观看| 国产福利91精品一区二区三区| 国产精品高清亚洲|