mini2440 linuxi2c驱动
#include <linux/kernel.h> #include <linux/init.h> #include <linux/module.h> #include <linux/slab.h> #include <linux/delay.h> #include <linux/mutex.h> #include <linux/sysfs.h> #include <linux/mod_devicetable.h> #include <linux/log2.h> #include <linux/bitops.h> #include <linux/jiffies.h> #include <linux/i2c.h> #include <linux/i2c/at24.h> #include <linux/fs.h> #include <asm/uaccess.h>
static struct i2c_client *at24_client;
static int major=0;
static struct class *cls;
static const struct i2c_device_id at24_ids[] = {
{"at24",8}, {}, };
MODULE_DEVICE_TABLE(i2c,at24_ids);
static ssize_t at24_read(struct file *file, char __user *buf, size_t len, loff_t *offset)
{ unsigned char address;
unsigned char data;
struct i2c_msg msg[2];
int ret;
if(len!=1) return -EINVAL; copy_from_user(&address,buf,1); msg[0].addr=at24_client->addr; msg[0].buf=&address; msg[0].len=1; msg[0].flags=0; msg[1].addr=at24_client->addr; msg[1].buf=&data; msg[1].len=1; msg[1].flags =I2C_M_RD; ret=i2c_transfer(at24_client->adapter,msg,2); if(ret==2) { copy_to_user(buf,&data,1); return 1; } else return -EIO; printk("read !\n"); return 0; } static ssize_t at24_write(struct file *file, const char __user *buf, size_t len, loff_t *offset) { unsigned char val[2]; struct i2c_msg msg[1]; int ret; if(len!=2) return -EINVAL; copy_from_user(val,buf,2); msg[0].addr=at24_client->addr; msg[0].buf=val; msg[0].len=2; msg[0].flags=0; ret=i2c_transfer(at24_client->adapter,msg,1); if(ret==1) { return 2; } else return -EIO; printk("write !\n"); return 0; }
static struct file_operations fop={ .owner =THIS_MODULE, .write =at24_write, .read =at24_read, }; static int at24_probe(struct i2c_client *client, const struct i2c_device_id *ids) { printk("probe ok!\n"); at24_client=client; major=register_chrdev(0,"at24",&fop); cls=class_create(THIS_MODULE,"at24"); device_create(cls,NULL,MKDEV(major,0),NULL,"at24"); return 0; } static int at24_remove(struct i2c_client *client) { kfree(at24_client); unregister_chrdev(major,"at24"); device_destroy(cls,MKDEV(major,0)); class_destroy(cls); printk("remove ok!\n"); return 0; }
static struct i2c_driver at24cx_driver = { .driver = { .name = "at24", .owner = THIS_MODULE, }, .probe = at24_probe, .remove = at24_remove, .id_table =at24_ids, };
static int at24cx_init(void) { return i2c_add_driver(&at24cx_driver); }
static void at24cx_exit(void) { i2c_del_driver(&at24cx_driver); } module_init(at24cx_init); module_exit(at24cx_exit); MODULE_LICENSE("GPL");
static struct at24_platform_data at24_i2c_info = {
.byte_len = 8, .page_size = 8, };
static struct i2c_board_info at24_i2c_devices[] =
{ { I2C_BOARD_INFO("at24", 0x50),
.platform_data = &at24_i2c_info, },
};
mini2440 linuxi2c驱动的更多相关文章
- Mini2440 DM9000 驱动分析(一)
Mini2440 DM9000 驱动分析(一) 硬件特性 Mini2440开发板上DM9000的电气连接和Mach-mini2440.c文件的关系: PW_RST 连接到复位按键,复位按键按下,低电平 ...
- mini2440触摸屏驱动分析
mini2440驱动分析系列之 ---------------------------------------Mini2440触摸屏程序分析 By JeefJiang July,8th,2009 这是 ...
- Mini2440 LED驱动程序设计
1 LED初始化: 2 LED闪烁设计 位或操作:| 取反操作:~ 位与操作:& http://www.tuicool.com/articles/eQzEJv
- Linux网络设备驱动架構學習(二)
Linux网络设备驱动架構學習(二) 接下來會從以下幾個方面介紹網絡設備驅動的編寫流程: 1.網絡設備的註冊與註銷 2.網絡設備的初始化 3.網絡設備的打開與釋放 4.網絡數據發送流程 5.網絡數據接 ...
- io重定向打开关闭 Eclipse中c开发printf无法输出解决办法
if(freopen("e:\\lstm-comparec\\lstm\\lstm\\output.txt","a",stdout)==NULL)fprintf ...
- DM9000驱动移植在mini2440(linux2.6.29)和FS4412(linux3.14.78)上的实现(deep dive)篇一
关于dm9000的驱动移植分为两篇,第一篇在mini2440上实现,基于linux2.6.29,也成功在在6410上移植了一遍,和2440非常类似,第二篇在fs4412(Cortex A9)上实现,基 ...
- mini2440移植uboot-2008.10 (二) DM9000网卡驱动移植
还是利用 mini2440移植uboot-2008.10 (一) 修改好的代码 通过观察可以发现,mini2400使用的网卡芯片是DM9000,在uboot-2008.10源码中已经支持该芯片的驱动 ...
- mini2440驱动奇谭——ADC驱动与測试(动态挂载驱动)
博客:http://blog.csdn.net/muyang_ren 实现功能:开发板动态载入adc驱动模块并能通过測试程序 系统:Ubuntu 14.04 驱动交叉编译内核:linux-2. ...
- LinuxI2C核心、总线驱动与设备驱动
I2C体系结构分为三个部分:I2C核心.总线驱动.设备驱动 I2C核心: I2C核心提供了一组不依赖硬件的接口函数,I2C总线驱动和设备驱动之间依赖于I2C核心作为纽带 (1)增加/删除i2c_ada ...
随机推荐
- ng-class ionic
我发现 ng-class="{yourclass:true,outerclass:false}" 竟然不起作用...囧.... 幸好有Google .... <p ng-c ...
- MySQL 按日期分表
一.表不存在时则创建 之前做项目实在是太赶了,很多东西都没记录.是时候补回来了 MySQL做一个大表,由于要存历史记录,所以数据量很大,查询很慢.恰好查询的时候,又不需要时间太久的冷数据.现在将其实现 ...
- Dede后台验证码不显示解决方法详解(dedecms 5.7)
今天朋友问我他本地与服务器上安装了dedecms5.7无法显示验证码,一般这种情况很少见,一般情况就是服务器设置问题,还有临时目录的权限问题 Dede后台验证码不显示或不正常分三种情况,下面来逐一分析 ...
- C# 发送邮件方法2
一. 发送邮件程序:(使用System.Web.Mail下的类) "; //SMTP服务密码 strFrom = "jailu@163.com"; //发送方邮件地址 C ...
- 法线贴图——Normal Mapping
对于不曾学过.用过法线贴图的人来说,提到法线贴图,经常会提到的问题是什么是法线贴图?法线贴图用于解决什么问题?法线贴图的原理是什么?本文将就这三个问题阐述本人的一些见解,各位不喜勿喷!!! 谈到法线贴 ...
- SQL 数据库 复制 与订阅 实现数据同步
摘自: http://www.jb51.net/article/18039.htm
- Vim中的正则表达式[转]
来自:http://blog.csdn.net/endall/archive/2007/08/29/1764554.aspx Vim中的正则表达式功能很强大,如果能自由运用,则可以完成很多难以想象的操 ...
- linux网络bond技术
http://blog.chinaunix.net/uid-20799583-id-3117665.html1.创建bond0配置文件vi /etc/sysconfig/network-scripts ...
- SDUST 软件工程2016-作业4-A 百钱买鸡问题
解决百钱买鸡问题原本并不困难,关键的是这道题对其进行了升级,测试数据太大,传统的解法,像三重循环,二重循环都会导致超时. 这道题正确的解法应该是结合数学方程进行化简,将其转化为1层循环: x+y+z= ...
- MongoDb 2.4 beta新特性——全文索引
期待已久的特性,但目前仍然在beta阶段,所以官方建议不要在生产环境使用.也因此需要手动打开这个特性. 在命令行指定 mongod --setParameter textSearchEnabled=t ...