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

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

?? i2c-dev.c

?? linux和2410結合開發 用他可以生成2410所需的zImage文件
?? C
?? 第 1 頁 / 共 2 頁
字號:
/*    i2c-dev.c - i2c-bus driver, char device interface      Copyright (C) 1995-97 Simon G. Vogl    Copyright (C) 1998-99 Frodo Looijaard <frodol@dds.nl>    This program is free software; you can redistribute it and/or modify    it under the terms of the GNU General Public License as published by    the Free Software Foundation; either version 2 of the License, or    (at your option) any later version.    This program is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the    GNU General Public License for more details.    You should have received a copy of the GNU General Public License    along with this program; if not, write to the Free Software    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.*//* Note that this is a complete rewrite of Simon Vogl's i2c-dev module.   But I have used so much of his original code and ideas that it seems   only fair to recognize him as co-author -- Frodo *//* The I2C_RDWR ioctl code is written by Kolja Waschk <waschk@telos.de> *//* The devfs code is contributed by Philipp Matthias Hahn    <pmhahn@titan.lahn.de> *//* $Id: i2c-dev.c,v 1.2 2004/02/06 13:19:45 laputa Exp $ */#include <linux/config.h>#include <linux/kernel.h>#include <linux/module.h>#include <linux/fs.h>#include <linux/slab.h>#include <linux/version.h>#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)#include <linux/smp_lock.h>#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */#ifdef CONFIG_DEVFS_FS#include <linux/devfs_fs_kernel.h>#endif/* If you want debugging uncomment: *//* #define DEBUG */#include <linux/init.h>#include <asm/uaccess.h>#include <linux/i2c.h>#include <linux/i2c-dev.h>//laputa debug msg 030901//#define LAPUTA_DEBUG_MSG	1#include "dbg_msg.h"/* struct file_operations changed too often in the 2.1 series for nice code */#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)static loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin);#endif//laputa unsigned char for iic data format 030903//static ssize_t i2cdev_read (struct file *file, char *buf, size_t count,  // -- remove static ssize_t i2cdev_read (struct file *file, unsigned char *buf, size_t count,  // +- modify                             loff_t *offset);//laputa unsigned char for iic data format 030903 //static ssize_t i2cdev_write (struct file *file, const char *buf, size_t count, //--remove static ssize_t i2cdev_write (struct file *file, const unsigned char *buf, size_t count,  //+-modify                             loff_t *offset);static int i2cdev_ioctl (struct inode *inode, struct file *file,                          unsigned int cmd, unsigned long arg);static int i2cdev_open (struct inode *inode, struct file *file);static int i2cdev_release (struct inode *inode, struct file *file);static int i2cdev_attach_adapter(struct i2c_adapter *adap);static int i2cdev_detach_client(struct i2c_client *client);static int i2cdev_command(struct i2c_client *client, unsigned int cmd,                           void *arg);static int __init i2c_dev_init(void);static void i2cdev_cleanup(void);static struct file_operations i2cdev_fops = {#if LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0)	owner:		THIS_MODULE,#endif /* LINUX_KERNEL_VERSION >= KERNEL_VERSION(2,4,0) */#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)	llseek:		i2cdev_lseek,#else	llseek:		no_llseek,#endif	read:		i2cdev_read,	write:		i2cdev_write,	ioctl:		i2cdev_ioctl,	open:		i2cdev_open,	release:	i2cdev_release,};#define I2CDEV_ADAPS_MAX I2C_ADAP_MAXstatic struct i2c_adapter *i2cdev_adaps[I2CDEV_ADAPS_MAX];#ifdef CONFIG_DEVFS_FSstatic devfs_handle_t devfs_i2c[I2CDEV_ADAPS_MAX];static devfs_handle_t devfs_handle = NULL;#endifstatic struct i2c_driver i2cdev_driver = {	name:		"i2c-dev dummy driver",	id:		I2C_DRIVERID_I2CDEV,	flags:		I2C_DF_DUMMY,	attach_adapter:	i2cdev_attach_adapter,	detach_client:	i2cdev_detach_client,	command:	i2cdev_command,/*	inc_use:	NULL,	dec_use:	NULL, */};static struct i2c_client i2cdev_client_template = {	name:		"I2C /dev entry",	id:		1,	flags:		0,	addr:		-1,/*	adapter:	NULL, */	driver:		&i2cdev_driver,/*	data:		NULL */};static int i2cdev_initialized;#if LINUX_KERNEL_VERSION < KERNEL_VERSION(2,4,9)/* Note that the lseek function is called llseek in 2.1 kernels. But things   are complicated enough as is. */loff_t i2cdev_lseek (struct file *file, loff_t offset, int origin){#ifdef DEBUG	struct inode *inode = file->f_dentry->d_inode;	printk("i2c-dev.o: i2c-%d lseek to %ld bytes relative to %d.\n",	       MINOR(inode->i_rdev),(long) offset,origin);#endif /* DEBUG */	return -ESPIPE;}#endif//laputa must be unsgined char type for the iic data 030903//static ssize_t i2cdev_read (struct file *file, char *buf, size_t count,static ssize_t i2cdev_read (struct file *file, unsigned char *buf, size_t count,                            loff_t *offset){	//char *tmp;     	// laputa -- remove	unsigned char *tmp; // laputa +- modify 030903	int ret;#ifdef DEBUG	struct inode *inode = file->f_dentry->d_inode;#endif /* DEBUG */	struct i2c_client *client = (struct i2c_client *)file->private_data;	/* copy user space data to kernel space. */	tmp = kmalloc(count,GFP_KERNEL);	if (tmp==NULL)		return -ENOMEM;#ifdef DEBUG	printk("i2c-dev.o: i2c-%d reading %d bytes.\n",MINOR(inode->i_rdev),	       count);#endif	DbgMsg(LAPUTA_DEBUG_MSG,printk("--> reading %d bytes.\n",count));		ret = i2c_master_recv(client,tmp,count);	if (ret >= 0)		ret = copy_to_user(buf,tmp,count)?-EFAULT:ret;	kfree(tmp);	return ret;}//laputa must be unsgined char type for the iic data 030903//static ssize_t i2cdev_write (struct file *file, const char *buf, size_t count,static ssize_t i2cdev_write (struct file *file, const unsigned char *buf, size_t count,                             loff_t *offset){	int ret;	// char *tmp; 			//--remove 	unsigned char *tmp;     // +- modify 030903 	struct i2c_client *client = (struct i2c_client *)file->private_data;#ifdef DEBUG	struct inode *inode = file->f_dentry->d_inode;#endif /* DEBUG */	//laputa check for buf chip addres setting & transfer data 030901	DbgMsg(LAPUTA_DEBUG_MSG,printk("==>i2c dev  write buf [%s] addr[%x] \n",buf,client->addr));	/* copy user space data to kernel space. */	tmp = kmalloc(count,GFP_KERNEL);	if (tmp==NULL)		return -ENOMEM;	if (copy_from_user(tmp,buf,count)) {		kfree(tmp);		return -EFAULT;	}#ifdef DEBUG	printk("i2c-dev.o: i2c-%d writing %d bytes.\n",MINOR(inode->i_rdev),	       count);#endif	ret = i2c_master_send(client,tmp,count);	kfree(tmp);	return ret;}int i2cdev_ioctl (struct inode *inode, struct file *file, unsigned int cmd,                   unsigned long arg){	struct i2c_client *client = (struct i2c_client *)file->private_data;	struct i2c_rdwr_ioctl_data rdwr_arg;	struct i2c_smbus_ioctl_data data_arg;	union i2c_smbus_data temp;	struct i2c_msg *rdwr_pa;	int i,datasize,res;	unsigned long funcs;#ifdef DEBUG	printk("i2c-dev.o: i2c-%d ioctl, cmd: 0x%x, arg: %lx.\n", 	       MINOR(inode->i_rdev),cmd, arg);#endif /* DEBUG */	//laputa check for argument at ioctl 030830	DbgMsg(LAPUTA_DEBUG_MSG,printk("client->name:%s:arg=%x\n",client->name,arg));	switch ( cmd ) {	case I2C_SLAVE:	case I2C_SLAVE_FORCE:		if ((arg > 0x3ff) || 		    (((client->flags & I2C_M_TEN) == 0) && arg > 0x7f))			return -EINVAL;				if ((cmd == I2C_SLAVE) && i2c_check_addr(client->adapter,arg))			return -EBUSY;		client->addr = arg;	//laputa for to checked a address setting value 030830	DbgMsg(LAPUTA_DEBUG_MSG,printk("==>I2C_SLAVE_FORCE ADD [%x]\n",client->addr));		return 0;	case I2C_TENBIT:		if (arg)			client->flags |= I2C_M_TEN;		else			client->flags &= ~I2C_M_TEN;		return 0;	case I2C_FUNCS:		funcs = i2c_get_functionality(client->adapter);		return (copy_to_user((unsigned long *)arg,&funcs,		                     sizeof(unsigned long)))?-EFAULT:0;    case I2C_RDWR:		if (copy_from_user(&rdwr_arg, 				   (struct i2c_rdwr_ioctl_data *)arg, 				   sizeof(rdwr_arg)))			return -EFAULT;		//laputa test only return value checked 030830		DbgMsg(LAPUTA_DEBUG_MSG,printk("+++> receive data %s\n",rdwr_arg.msgs->buf));		rdwr_pa = (struct i2c_msg *)			kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), 			GFP_KERNEL);		if (rdwr_pa == NULL) return -ENOMEM;		res = 0;		for( i=0; i<rdwr_arg.nmsgs; i++ )		{		    	if(copy_from_user(&(rdwr_pa[i]),					&(rdwr_arg.msgs[i]),					sizeof(rdwr_pa[i])))			{			        res = -EFAULT;				break;			}			rdwr_pa[i].buf = kmalloc(rdwr_pa[i].len, GFP_KERNEL);			if(rdwr_pa[i].buf == NULL)			{				res = -ENOMEM;				break;			}			if(copy_from_user(rdwr_pa[i].buf,				rdwr_arg.msgs[i].buf,

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区五区| 色噜噜狠狠色综合中国| 99久久久国产精品免费蜜臀| 欧美视频完全免费看| 久久久久亚洲蜜桃| 日韩中文欧美在线| 欧美在线免费观看视频| 国产欧美精品一区二区色综合| 亚洲国产一区二区在线播放| 成人深夜福利app| 欧美一区二区精品久久911| 一区二区三区免费观看| 99riav久久精品riav| 国产午夜亚洲精品不卡| 理论片日本一区| 欧美日韩极品在线观看一区| 亚洲日本丝袜连裤袜办公室| 国产91精品免费| 久久精品夜夜夜夜久久| 久久99久久99精品免视看婷婷| 欧美日韩一区 二区 三区 久久精品| 中文字幕中文乱码欧美一区二区| 国产高清成人在线| 日本一区二区电影| 成人福利在线看| 国产精品美女久久久久久久网站| 精品在线播放免费| 精品国产在天天线2019| 精品影院一区二区久久久| 精品精品国产高清a毛片牛牛| 日本美女一区二区三区视频| 欧美精品黑人性xxxx| 亚洲va欧美va天堂v国产综合| 欧美视频在线一区| 日韩精品国产精品| 日韩欧美一区二区久久婷婷| 久久精品国产一区二区三| 日韩欧美国产不卡| 国产一区 二区 三区一级| 国产日产欧美精品一区二区三区| 国产99久久久久| 亚洲欧洲精品一区二区精品久久久 | 日本电影亚洲天堂一区| 亚洲免费观看在线视频| 在线观看视频一区二区欧美日韩| 亚洲国产日日夜夜| 精品欧美一区二区在线观看| 狠狠色综合色综合网络| 欧美激情一区在线观看| 91国内精品野花午夜精品| 亚洲bdsm女犯bdsm网站| 日韩一区二区三区视频| 国产激情91久久精品导航| 综合电影一区二区三区| 欧美日韩在线免费视频| 国内精品自线一区二区三区视频| 欧美国产精品v| 在线免费一区三区| 麻豆精品久久久| 国产精品三级久久久久三级| 欧美亚洲日本国产| 国产精品一线二线三线精华| 亚洲少妇中出一区| 欧美一区二区视频观看视频| 国产成人av电影在线观看| 亚洲一区二区三区精品在线| 欧美大片一区二区三区| 91视频免费播放| 久久精品国产在热久久| 国产精品久久久久久久久搜平片| 欧美精品在线一区二区| 福利视频网站一区二区三区| 亚洲成人黄色小说| 亚洲欧洲日韩在线| 精品动漫一区二区三区在线观看| av电影在线不卡| 蜜桃视频免费观看一区| 亚洲美女少妇撒尿| 久久免费精品国产久精品久久久久| 色综合欧美在线视频区| 国产九色sp调教91| 人人超碰91尤物精品国产| 亚洲丝袜自拍清纯另类| 精品欧美一区二区三区精品久久| 在线一区二区三区四区五区 | 欧美视频一区在线观看| 成人影视亚洲图片在线| 久久精品国产99国产精品| 亚洲五码中文字幕| 亚洲精品欧美二区三区中文字幕| 欧美大片日本大片免费观看| 欧美日韩美少妇| 色女孩综合影院| 懂色av一区二区夜夜嗨| 久久97超碰国产精品超碰| 五月天精品一区二区三区| 伊人色综合久久天天人手人婷| 国产午夜精品久久| 久久久久一区二区三区四区| 日韩美女在线视频 | 亚洲欧洲三级电影| 中文字幕精品三区| 久久精品这里都是精品| 久久综合九色欧美综合狠狠| 日韩一级二级三级精品视频| 欧美专区日韩专区| 色欧美片视频在线观看在线视频| 91在线观看免费视频| 成人激情开心网| 99re成人在线| 99国产欧美久久久精品| 成人免费高清视频| 91丨porny丨最新| 色哟哟国产精品免费观看| 99精品视频中文字幕| 91农村精品一区二区在线| 91在线小视频| 91精品福利视频| 欧美午夜精品一区二区蜜桃| 欧美日韩一区中文字幕| 欧美一区永久视频免费观看| 日韩精品中文字幕在线一区| 精品福利在线导航| 久久蜜桃一区二区| 国产精品久久看| 亚洲成人一区二区在线观看| 日韩综合在线视频| 国产一区二区三区日韩| 99在线精品观看| 欧美日韩一区国产| 日韩欧美综合在线| 中文字幕精品在线不卡| 亚洲色图清纯唯美| 日本在线不卡视频| 国产v日产∨综合v精品视频| 99麻豆久久久国产精品免费 | 午夜私人影院久久久久| 日韩成人av影视| 国产999精品久久久久久绿帽| 不卡一区中文字幕| 欧美精品丝袜中出| 国产视频亚洲色图| 亚洲欧美日韩中文播放| 青青草原综合久久大伊人精品| 国产精品一区专区| 欧美色爱综合网| 2023国产精品| 夜夜夜精品看看| 国内精品伊人久久久久av影院| av激情亚洲男人天堂| 正在播放亚洲一区| 国产精品第五页| 久久国产尿小便嘘嘘| av亚洲精华国产精华精| 欧美岛国在线观看| 亚洲一区国产视频| 国产在线播放一区二区三区| 91久久奴性调教| 国产日韩欧美a| 美女脱光内衣内裤视频久久网站 | 亚洲精品成人精品456| 久久精品国产精品亚洲红杏| 色婷婷综合久久久久中文 | 一区二区三区精品久久久| 免费在线观看不卡| 欧美日韩一区在线| 亚洲视频免费在线| 国产在线一区观看| 欧美一区二区高清| 亚洲高清三级视频| 在线亚洲欧美专区二区| 日本一区二区免费在线观看视频 | 一区二区三区四区不卡视频| 国产主播一区二区| 日韩欧美123| 天天综合日日夜夜精品| 色综合久久中文字幕| 国产精品久久久久久久久快鸭 | 久久成人18免费观看| 欧美日韩国产欧美日美国产精品| 国产精品久久久久一区二区三区 | 亚洲第一福利视频在线| 99久久精品一区二区| 国产精品免费久久| jlzzjlzz亚洲日本少妇| 国产午夜精品久久久久久免费视| 久久成人18免费观看| 日韩一区二区三区视频| 免费一级片91| 精品久久久久一区| 奇米精品一区二区三区四区 | 国产成人av资源| 久久久久久一级片| 激情偷乱视频一区二区三区| 日韩一区二区不卡| 喷白浆一区二区| 日韩欧美123| 国产露脸91国语对白| 国产亚洲精品福利| 成人三级伦理片|