Rockchip-linux驱动 --- IIC

文章目录

一、IIC子系统编程

(一)分配并初始化对象

c 复制代码
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驱动框架

c 复制代码
//入口函数
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的寄存器映射

c 复制代码
#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接口
c 复制代码
寄存器映射配置信息结构体
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. 写入寄存器

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

3.读取寄存器

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

(二)打印调试信息

c 复制代码
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 字符串中的格式化。
相关推荐
pq113_64 天前
ftdi_sio应用学习笔记 4 - I2C
笔记·学习·linux驱动·ftdi_sio
憧憬一下1 个月前
内核提供的通用I2C设备驱动I2C-dev.c分析:file_ops篇
c语言·arm开发·嵌入式·iic·源码解析·linux驱动开发
大牛攻城狮1 个月前
STM32Lx GXHT3x SHT3x iic 驱动开发应用详解
stm32·iic·stm32lx·gxht3x·sht3x·驱动设计
Projectsauron2 个月前
STM32 通过软件模拟 I2C 驱动 24Cxx 系列存储器
stm32·单片机·嵌入式硬件·iic·at24cx
玄奕子2 个月前
GPT对话知识库——编写IIC驱动的过程
stm32·单片机·gpt·嵌入式·iic
嵌入式成长家3 个月前
[linux 驱动]i2c总线设备驱动详解与实战
linux驱动·i2c驱动·i2c总线·i2c设备
嵌入式成长家3 个月前
[linux 驱动]platform总线设备驱动详解与实战
linux·linux驱动·platform总线设备驱动
小白橘颂3 个月前
Linux驱动(三):字符设备驱动之杂项
linux·运维·驱动开发·microsoft·linux驱动·瑞芯微·rk3588s
托马斯-木4 个月前
7、杂项设备驱动
linux·linux驱动