没有合适的资源?快使用搜索试试~ 我知道了~
i2c驱动各层分析
资源推荐
资源详情
资源评论
i2c架构中涉及的重要接口函数
/*注册一个i2c驱动*/
int i2c_add_driver(struct i2c_driver *driver)
/*注销一个i2c驱动*/
int i2c_del_driver(struct i2c_driver *driver)
/*创建一个新的i2c设备*/
struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
参数1: client对应的adapter
参数2: 从设备的描述信息--用于i2c的私有数据
void i2c_unregister_device(struct i2c_client *client)
/*发送i2c数据*/ ----> 在通用驱动/私有特定驱动中用
int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
参数1: 驱动对象对应的client对象
参数2: 发送的数据
参数3: 个数
/*接收i2c数据*/
int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
/*传输一个i2c数据包*/--->能够完成发送和接收
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
参数1: i2c的适配器
参数2: 数据包
参数3: 数据包的个数
/*注册一个i2c适配器*/
int i2c_add_adapter(struct i2c_adapter *adapter)
// 这个函数比较重要, 会去构建client
int i2c_add_numbered_adapter(struct i2c_adapter *adap)
/*注册一个i2c驱动*/
int i2c_add_driver(struct i2c_driver *driver)
/*注销一个i2c驱动*/
int i2c_del_driver(struct i2c_driver *driver)
/*创建一个新的i2c设备*/
struct i2c_client *i2c_new_device(struct i2c_adapter *adap, struct i2c_board_info const *info)
参数1: client对应的adapter
参数2: 从设备的描述信息--用于i2c的私有数据
void i2c_unregister_device(struct i2c_client *client)
/*发送i2c数据*/ ----> 在通用驱动/私有特定驱动中用
int i2c_master_send(const struct i2c_client *client, const char *buf, int count)
参数1: 驱动对象对应的client对象
参数2: 发送的数据
参数3: 个数
/*接收i2c数据*/
int i2c_master_recv(const struct i2c_client *client, char *buf, int count)
/*传输一个i2c数据包*/--->能够完成发送和接收
int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num)
参数1: i2c的适配器
参数2: 数据包
参数3: 数据包的个数
/*注册一个i2c适配器*/
int i2c_add_adapter(struct i2c_adapter *adapter)
// 这个函数比较重要, 会去构建client
int i2c_add_numbered_adapter(struct i2c_adapter *adap)
int i2c_del_adapter(struct i2c_adapter *adapter)
/*注册板级信息*/---> 将 i2c_board_info对象注册到__i2c_board_list
int __init i2c_register_board_info(int busnum,struct i2c_board_info const *info, unsigned len)
参数1: i2c总线号码
参数2: 需要被添加的 i2c_board_info对象
参数3: i2c_board_info对象个数
-------------------------------------------------------------------------------
编写特定i2c从设备驱动的方法:
1, i2c client设备驱动----> 构建一个{ I2C_BOARD_INFO("24c02", 0x50), },
a, mach-smdkv210.c
static struct i2c_board_info smdkv210_i2c_devs0[] __initdata = {
{ I2C_BOARD_INFO("24c02", 0x50), }, /* Samsung S524AD0XD1 */
{ I2C_BOARD_INFO("wm8580", 0x1b), },
};
// 将I2C_BOARD_INFO添加到一个链表中__i2c_board_list
//adpater会扫描链表__i2c_board_list, 构建一个client,将client注册到i2c总线
i2c_register_board_info(0, smdkv210_i2c_devs0,
ARRAY_SIZE(smdkv210_i2c_devs0));
2, i2c driver 驱动
1, 构建一个struct i2c_driver
2, 构建一个id列表const struct i2c_device_id *id_table;
struct i2c_device_id xx_idtable[] = {
{"24c02", 0x456},
{"24c08", 0x457},
}
3, 将i2c_driver注册到i2c总线
剩余10页未读,继续阅读
资源评论
zhangwulin1207
- 粉丝: 0
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功