解释一下struct regmap_access_table的.yes_ranges和.n_yes_ranges
时间: 2023-10-03 14:10:08 浏览: 99
u_hash_table.rar_Table For Two
struct regmap_access_table结构体中的.yes_ranges和.n_yes_ranges字段是用于指定某些地址范围内的寄存器是否可访问的。.yes_ranges是一个指针数组,每个指针指向一个struct regmap_range结构体,表示可访问的地址范围;.n_yes_ranges表示.yes_ranges数组的元素个数。
例如,以下代码定义了一个包含两个struct regmap_range结构体的数组:
```
static const struct regmap_range my_device_ranges[] = {
{ 0x00, 0x03 },
{ 0x04, 0x07 },
};
```
这个数组表示定义了两个地址范围,第一个范围是0x00到0x03,第二个范围是0x04到0x07。
然后,在使用struct regmap_access_table定义寄存器访问表时,可以将这个地址范围数组传递给.yes_ranges字段,例如:
```
static const struct regmap_access_table my_device_access_table = {
.reg_bits = 8,
.val_bits = 32,
.max_register = 0x07,
.writeable_reg = my_device_writeable_reg,
.readable_reg = my_device_readable_reg,
.volatile_reg = my_device_volatile_reg,
.precious_reg = my_device_precious_reg,
.cache_type = REGCACHE_FLAT,
.yes_ranges = my_device_ranges,
.n_yes_ranges = ARRAY_SIZE(my_device_ranges),
};
```
这个访问表表示定义了一个8位地址、32位寄存器值的寄存器访问表,最大寄存器地址为0x07,可读写的寄存器由my_device_writeable_reg和my_device_readable_reg函数定义,易失性寄存器由my_device_volatile_reg函数定义,需要保护的寄存器由my_device_precious_reg函数定义,使用平坦缓存模式。另外,访问表还指定了两个地址范围0x00到0x03和0x04到0x07是可访问的。
总的来说,.yes_ranges和.n_yes_ranges字段可以用于指定某些地址范围内的寄存器是否可访问,这对于一些特殊的寄存器访问场景非常有用。
阅读全文