设备驱动中 Regmap API 的使用
1. Regmap 简介
在 Linux 系统里,I2C 和 SPI 等子系统常被用于连接总线上的设备。这些总线的一个共同功能是对连接设备的寄存器进行读写操作,这就导致在带有寄存器读写功能的子系统中出现大量冗余代码。
为避免这种情况,减少重复代码,同时便于驱动的维护和开发,从 Linux 3.1 版本开始,开发者引入了名为 regmap 的新内核 API。该基础设施原本存在于 Linux ASoC(ALSA)子系统中,现在通过 regmap API(在 include/linux/regmap.h 中声明,在 drivers/based/regmap/ 中实现)为整个 Linux 系统所用。
regmap 子系统的作用是对 SPI 和 I2C 设备的寄存器访问进行抽象,同时也支持内存映射寄存器(MMIO)。它还提供了缓存机制,能够减少对设备的访问次数,并且可以处理 IRQ 芯片和 IRQ。
2. Regmap 相关结构体
regmap 子系统主要包含以下几个结构体:
- struct regmap :定义于 drivers/base/regmap/internal.h,代表慢速 I/O 设备寄存器操作的映射。
- struct regmap_bus :定义于 include/linux/regmap.h,代表某类慢速 I/O 设备(如 SPI 或 I2C 设备)的寄存器操作,与 regmap 结构体绑定。
- struct regmap_config
超级会员免费看
订阅专栏 解锁全文
236

被折叠的 条评论
为什么被折叠?



