// 1.构建regmap_config结构staticconststructregmap_configmlx90632_regmap={// 寄存器地址位宽.reg_bits=16,// 寄存器值的位宽,必须填写.val_bits=16,// 可选,判断寄存器是否可写,可读,是否可缓冲等回调.volatile_table=&mlx90632_volatile_regs_tbl,.rd_table=&mlx90632_readable_regs_tbl,.wr_table=&mlx9...
包括regcache.c、regcache-flag.c、regcache-lzo.c、regcache-rbtree.c。 底层总线接口:执行数据读写的底层物理总线封装,包括I2C、SPI、IRQ等等。包括regmap-spi.c、regmap-irq.c等。 另外regmap debugfs在/sys/kernel/debug/regmap下提供对regmap的调试接口。 2.1 Regmap数据结构 struct regmap_bus是底层物理总线...
regmap 框架分为三层: ①、底层物理总线:regmap 就是对不同的物理总线进行封装,目前 regmap 支持的物理总线有 i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq、spmi 和 w1。 ②、regmap 核心层,用于实现 regmap,我们不用关心具体实现。 ③、regmapAPI 抽象层,regmap 向驱动编写人员提供的 API 接口,驱动编写人员...
regmap_unlock unlock;void*lock_arg;//读操作int(*reg_read)(void*context,unsignedintreg,unsignedint*val);//写操作int(*reg_write)(void*context,unsignedintreg,unsignedintval);boolfast_io;//快速 I/O,使用 spinlock 替代 mutex 来提升锁性能。unsignedintmax_register;//有效的最大寄存器地址conststructreg...
void *status_reg_buf; unsigned int *main_status_buf; unsigned int *status_buf; unsigned int *mask_buf; unsigned int *mask_buf_def; @@ -326,6 +327,33 @@ static const struct irq_chip regmap_irq_chip = { .irq_set_wake = regmap_irq_set_wake,...
①、底层物理总线:regmap 就是对不同的物理总线进行封装,目前 regmap 支持的物理总线有 i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq、spmi 和 w1。 ②、regmap 核心层,用于实现 regmap,我们不用关心具体实现。 ③、regmapAPI 抽象层,regmap 向驱动编写人员提供的 API 接口,驱动编写人员使用这些API 接口来操作...
内核3.1引入了一套新的API机制:regmap,主要为I2C,SPI,IRQ等操作提供统一接口,提高代码可重用性,减少重复逻辑。 以I2C为例: 要让设备跟I2C通信,以前的办法是调用i2c_transfer接口,其实regmap最终还是调用到i2c_transfer,只不过中间加了一层缓冲,这样统一了接口,减少了底层I/O的操作次数。
内核3.1引入一套新的API regmap,目的是提取出关于I2C SPI irq等相关注册、使能以及读写的公共部分,以提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。 0 基础结构 1. struct regmap_config { 2. int reg_bits; // 寄存器地址的位数,必须配置,例如I2C寄存器地址位数为 8 ...
.cache_type = REGCACHE_RBTREE, .use_single_rw = true, .use_single_read = true, .use_single_write = true, }; static irqreturn_t cs35l35_irq(int irq, void *data)4 changes: 3 additions & 1 deletion 4 sound/soc/codecs/cs43130.c Original file line numberDiff line numberDiff line...
* @hwlock_mode: The hardware spinlock mode, should be HWLOCK_IRQSTATE, * HWLOCK_IRQ or 0. * @reg_format_endian: Endianness for formatted register addresses. If this is * DEFAULT, the @reg_format_endian_default value from the * regmap bus is used. * @val_format_endian: Endianness for...