Rockchip --- I2C

一、IIC子系统编程

(一)分配并初始化对象

struct i2c_driver {
	//入口函数
	int (*probe)(struct i2c_client *client, const struct i2c_device_id *id);
	//出口函数
	void (*remove)(struct i2c_client *client);
	//关闭设备执行的函数
	void (*shutdown)(struct i2c_client *client);
	struct device_driver driver;
};

(二)IIC驱动框架

//入口函数
int myiic_probe(struct i2c_client *client, const struct i2c_device_id *id){
	return 0;
}

//出口函数
void myiic_remove(struct i2c_client *client){}

static struct i2c_driver myiic_driver = {
	.probe = myiic_probe,
	.remove = myiic_remove,
	.shutdown = myiic_shutdown,
	.driver = {
		.name = "myiic",
		.of_match_table = myiic_dt_ids,
	},
};

module_i2c_driver(myiic_driver);
MODULE_LICENSE("GPL v2");

(三)IIC的regmap函数

1. 初始化IIC的寄存器映射

#define devm_regmap_init_i2c(i2c, config) __regmap_lockdep_wrapper(__devm_regmap_init_i2c, #config, i2c, config)
功能:初始化一个专用于IIC设备的寄存器映射
参数:
	@i2c:指向 struct i2c_client 的指针,表示要与之交互的 I2C 设备
	@config:指向remap_config结构体
返回值:
	成功,返回一个指向regmap的指针
	失败,返回一个错误码指针
备注:可以直接使用regmap的API,而无需直接操作IIC接口
寄存器映射配置信息结构体
struct regmap_config {
	int reg_bits;
	int val_bits;
	const struct regmap_access_table *volatile_table;
	enum regcache_type cache_type;
	...
}

结构体成员 --- volatile_table
指定哪些寄存器是易变的

结构体成员 --- cache_type
	enum regcache_type {
		REGCACHE_NONE,
		REGCACHE_RBTREE,
		REGCACHE_COMPRESSED,
		REGCACHE_FLAT,
	};

2. 写入寄存器

int regmap_write(struct regmap *map, unsigned int reg, unsigned int val);
功能:将指定的值写入到硬件设备的寄存器
参数:
	@map:remap实例的指针
	@reg:要写入的寄存器的地址
	@val:要写入的寄存器的值
返回值:
	成功,返回0
	失败,返回错误码
备注:
	需要先初始化regmap实例

3.读取寄存器

int regmap_read(struct regmap *map, unsigned int reg, unsigned int *val);
功能:读取指定寄存器的值
参数:
	@map:指向regmap实例的指针
	@reg:要读的寄存器地址
	@val:指向变量的指针,存储从寄存器读取的值
返回值:
	成功,返回0
	失败,返回错误码

(二)打印调试信息

dev_emerg(dev, fmt, ...) 
dev_crit(dev, fmt, ...)
dev_alert(dev, fmt, ...)
dev_err(dev, fmt, ...) 
dev_warn(dev, fmt, ...)
dev_notice(dev, fmt, ...) 
dev_info(dev, fmt, ...) 
功能:打印日志信息,日志级别从上到下优先级递减
参数:
	@dev:指向 struct device 的指针,用于指定日志消息关联的设备。
	@fmt:格式化字符串,遵循 printf 风格的格式。
	@...:可变参数列表,用于 fmt 字符串中的格式化。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值