@@ -35,6 +35,7 @@ struct regmap_irq_chip_data { int wake_count;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 = { ...
Linux内核:regmap机制 在Linu 3.1开始,Linux引入了regmap来统一管理内核的I2C,SPI等总线,将I2C, SPI驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。只需初始化时指定总线类型、寄存器位宽等关键参数,即可通过regmap模型接口来操作器件寄存器。 当然,regmap同样适用于操作cpu自身的寄存器。将i2c、spi、mmio、irq...
regmap是为了方便操作寄存器而设计的,它将所有模块的寄存器(包括soc上模块的寄存器和外围设备的寄存器等) 抽象出来,用一套统一接口来操作寄存器,统一操作i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq等。 regmap框架分为三层: ①、底层物理总线:regmap支持的物理总线有i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq...
regmap 框架分为三层: ①、底层物理总线:regmap 就是对不同的物理总线进行封装,目前 regmap 支持的物理总线有 i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq、spmi 和 w1。 ②、regmap 核心层,用于实现 regmap,我们不用关心具体实现。 ③、regmapAPI 抽象层,regmap 向驱动编写人员提供的 API 接口,驱动编写人员...
当然,regmap同样适用于操作cpu自身的寄存器。将i2c、spi、mmio、irq都抽象出统一的接口regmap_read、regmap_write、regmap_update_bits等接口 ,从而提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。 regmap是在 linux 内核为减少慢速 I/O 驱动上的重复逻辑,提供一种通用的接口来操作底层硬件寄...
内核3.1引入一套新的API regmap,目的是提取出关于I2C SPI irq等相关注册、使能以及读写的公共部分,以提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。 0 基础结构 1. struct regmap_config { 2. int reg_bits; // 寄存器地址的位数,必须配置,例如I2C寄存器地址位数为 8 ...
regmap是Linux内核中用于简化硬件寄存器操作的一种机制,它通过提供统一的接口来操作I2C、SPI、MMIO、IRQ等总线的寄存器,从而减少了代码冗余并提高了驱动的可移植性。以下是其实现原理的详细介绍: regmap的实现原理 目的:减少I/O驱动上的重复逻辑代码,提供一种通用的接口来操作底层硬件上的寄存器。 核心结构:regmap_...
1、regmap 框架结构 regmap 驱动框架如下图所示: regmap 框架分为三层: ①、底层物理总线:regmap 就是对不同的物理总线进行封装,目前 regmap 支持的物理总线有 i2c、i3c、spi、mmio、sccb、sdw、slimbus、irq、spmi 和 w1。 ②、regmap 核心层,用于实现 regmap,我们不
内核3.1引入了一套新的API机制:regmap,主要为I2C,SPI,IRQ等操作提供统一接口,提高代码可重用性,减少重复逻辑。 以I2C为例: 要让设备跟I2C通信,以前的办法是调用i2c_transfer接口,其实regmap最终还是调用到i2c_transfer,只不过中间加了一层缓冲,这样统一了接口,减少了底层I/O的操作次数。
Linux引入regmap是为了统一管理内核的i2c,spi等总线,将i2c、spi驱动做了一次重构,把I/O读写的重复逻辑在regmap中实现。只需初始化时指定总线类型、寄存器位宽等关键参数,即可通过regmap模型接口来操作器件寄存器。 将i2c、spi、mmio、irq等抽象出统一接口regmap_read,regmap_write,regmap_update_bits等接口,从而提高代码...