博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
在kernel里添加一个i2c外围设备
阅读量:4285 次
发布时间:2019-05-27

本文共 1245 字,大约阅读时间需要 4 分钟。

在kernel里添加一个已知芯片地址的外围设备的驱动,主要包含申请注册使用等

1. 定义主要变量:

static struct i2c_client *key_ic_client;static struct i2c_board_info key_ic_info = {	/*  0x11 is the slave ic addr  */	I2C_BOARD_INFO("carplay_key_ic", 0x11),};
2. 注册申请i2c外围设备:

struct i2c_adapter *i2c_adap;	printk(KERN_ALERT "%s\n", __func__);	i2c_adap = i2c_get_adapter(5);  // i2c_5	if (i2c_adap == NULL) {		printk(KERN_ERR "%s No adapter available!\n", __func__);		return 0;	}	key_ic_client = i2c_new_device(i2c_adap, &key_ic_info);	if (NULL == key_ic_client) {		printk(KERN_ERR "%s i2c_new_device is Err!\n", __func__);		return 0;	}	if (i2c_adap) {		printk(KERN_ERR "%s i2c_adap is OK!\n", __func__);		i2c_put_adapter(i2c_adap);	}
3. 使用写函数向寄存器写入数据:

      不同的i2c芯片要求的写函数,未必一样,要根据芯片的数据手册,来决定使用什么样的kernel里的写入驱动函数;

int ret = 0;		ret = i2c_smbus_write_byte_data(key_ic_client, 0x10, 0x33);		if (ret < 0)		{			printk(KERN_ERR "%s: i2c_smbus_write_byte_data err\n", __func__);		}
4. 使用读函数读取寄存器里的数据:

      不同的i2c芯片要求的读函数,未必一样,要根据芯片的数据手册,来决定使用什么样的kernel里的读取驱动函数;

i2c_smbus_write_byte(key_ic_client, 0x00);		udelay(500);  // this delay is Necessary		value = i2c_smbus_read_byte(key_ic_client);		printk(KERN_ALERT "%s: value = 0x%x\n", __func__, value);
      这个例子中,读取函数之间有延时,是因为,这个芯片来不及处理读取请求,需要延时一段时间,再读取。大部分芯片不需要这种延时。

转载地址:http://usngi.baihongyu.com/

你可能感兴趣的文章
DOM笔记(二):Node接口
查看>>
DOM笔记(三):Element接口和HTMLElement接口
查看>>
DOM笔记(四):HTML 5 DOM复杂数据类型
查看>>
DOM笔记(五):JavaScript的常见事件和Ajax小结
查看>>
DOM笔记(六):怎么进行JQuery扩展?
查看>>
搜索和网页排名的数学原理
查看>>
DOM笔记(八):JavaScript执行环境和垃圾收集
查看>>
响应式下的下拉菜单
查看>>
DOM笔记(九):引用类型、基本包装类型和单体内置对象
查看>>
也谈学习
查看>>
DOM笔记(十):JavaScript正则表达式
查看>>
如何高效编写可维护代码?
查看>>
DOM笔记(十一):JavaScript对象的基本认识和创建
查看>>
DOM笔记(十二):又谈原型对象
查看>>
DOM笔记(十三):JavaScript的继承方式
查看>>
CSS:响应式下的折叠菜单(条纹式)
查看>>
响应式设计三部曲
查看>>
45种Javascript技巧大全
查看>>
PDO学习笔记
查看>>
MarkDown语法
查看>>