了解Linux RegMap' d devm_regmap_init_mmio
我想知道,如何使用Devm_regmap_init_mmio()将16个字节的regmap导出(跨越两个子区域)。例如,从Linux中的一个驱动程序中:
regs = devm_platform_ioremap_resource_byname(pdev, "ehb");
if (IS_ERR(regs)) {
dev_err(apb->dev, "Couldn't map APB EHB registers\n");
return PTR_ERR(regs);
}
apb->regs = devm_regmap_init_mmio(apb->dev, regs, &bt1_apb_regmap_cfg);
if (IS_ERR(apb->regs)) {
dev_err(apb->dev, "Couldn't create APB EHB regmap\n");
return PTR_ERR(apb->regs);
'带有BT1_APB_REGMAP_CFG填充的填充,
static const struct regmap_config bt1_apb_regmap_cfg = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
.max_register = APB_EHB_TIMEOUT,
.fast_io = true
};
看起来整个寄存器范围是使用devm_regmap_init_mmio导出的整个寄存器范围,但是是否有一种方法可以将仅导出16个野蛮人跨越四个寄存器?
另外,这些字段是什么.max_register和.reg_stride在这里意味着?
I would like to know, how devm_regmap_init_mmio() can be used to export a regmap for 16 bytes (span over two subregions). For instance, from one of the driver in Linux:
regs = devm_platform_ioremap_resource_byname(pdev, "ehb");
if (IS_ERR(regs)) {
dev_err(apb->dev, "Couldn't map APB EHB registers\n");
return PTR_ERR(regs);
}
apb->regs = devm_regmap_init_mmio(apb->dev, regs, &bt1_apb_regmap_cfg);
if (IS_ERR(apb->regs)) {
dev_err(apb->dev, "Couldn't create APB EHB regmap\n");
return PTR_ERR(apb->regs);
' with bt1_apb_regmap_cfg filled as
static const struct regmap_config bt1_apb_regmap_cfg = {
.reg_bits = 32,
.val_bits = 32,
.reg_stride = 4,
.max_register = APB_EHB_TIMEOUT,
.fast_io = true
};
here looks like whole register range is exported using devm_regmap_init_mmio but is there a way to export only 16 byters span across four register ?
Also, what are these fields .max_register and .reg_stride means here ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
max_register表示寄存器范围从0x1000到0x1040,而不是
max_register = 0x40
reg_stride表示寄存器地址应为此值的多个
max_register means if the register range is from 0x1000 to 0x1040 than than
max_register = 0x40
reg_stride means the register address should be multiple of this value