你的位置:首页 > 软件开发 > 操作系统 > linuxok6410的I2C驱动分析

linuxok6410的I2C驱动分析

发布时间:2016-02-24 21:00:03
3 i2c-dev3.1 概述之前在介绍I2C子系统时,提到过使用i2c-dev.c文件在应用程序中实现我们的I2C从设备驱动。不过,它实现的是一个虚拟,临时的i2c_client,随着设备文件的打开而产生,并随着设备文件的关闭而撤销。I2c-dev.c针对每个I2C适配器 ...

linuxok6410的I2C驱动分析

3  i2c-dev

3.1 概述

之前在介绍I2C子系统时,提到过使用i2c-dev.c文件在应用程序中实现我们的I2C从设备驱动。不过,它实现的是一个虚拟,临时的i2c_client,随着设备文件的打开而产生,并随着设备文件的关闭而撤销。I2c-dev.c针对每个I2C适配器生成一个主设备号为89的设备文件,实现了i2c_driver的成员函数以及文件操作接口,所以i2c-dev.c的主题是”i2c_driver成员函数+字符设备驱动”。

 

3.2 i2c-dev.c源码分析

初始化模块

[cpp] view plaincopy
  1. static int __init i2c_dev_init(void)  
  2. {  
  3.          res= register_chrdev(I2C_MAJOR, "i2c", &i2cdev_fops);  
  4.    
  5.          i2c_dev_class= class_create(THIS_MODULE, "i2c-dev");  
  6.    
  7.          /*Keep track of adapters which will be added or removed later */  
  8.          res= bus_register_notifier(&i2c_bus_type, &i2cdev_notifier);  
  9.    
  10.          /*绑定已经存在的适配器 */  
  11.          i2c_for_each_dev(NULL,i2cdev_attach_adapter);  
  12. }  
  1. /* This is the structure as used in theI2C_RDWR ioctl call */  
  2. struct i2c_rdwr_ioctl_data {  
  3.          structi2c_msg __user *msgs;         /* pointersto i2c_msgs */  
  4.          __u32nmsgs;                    /* number ofi2c_msgs */  
  5. };  
  1. struct i2c_msg {  
  2.          __u16addr;     /* slave address                         */  
  3.          __u16flags;  /* 默认为写入 */  
  4. #define I2C_M_TEN                  0x0010     /*this is a ten bit chip address */  
  5. #define I2C_M_RD           0x0001     /* read data,from slave to master */  
  6. #define I2C_M_NOSTART                  0x4000     /* if I2C_FUNC_PROTOCOL_MANGLING */  
  7. #define I2C_M_REV_DIR_ADDR     0x2000     /*if I2C_FUNC_PROTOCOL_MANGLING */  
  8. #define I2C_M_IGNORE_NAK          0x1000     /*if I2C_FUNC_PROTOCOL_MANGLING */  
  9. #define I2C_M_NO_RD_ACK           0x0800     /* if I2C_FUNC_PROTOCOL_MANGLING */  
  10. #define I2C_M_RECV_LEN               0x0400     /* length will be first received byte */  
  11.          __u16len;                  /* msg length                              */  
  12.          __u8*buf;                 /* pointer to msgdata                       */  
  13. };  

原标题:linuxok6410的I2C驱动分析

关键词:linux

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录