0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Linux Regmap 操作函数

麦辣鸡腿堡 来源:嵌入式Linux系统开发 作者:嵌入式Linux系统开 2023-07-06 17:31 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

Regmap 操作函数

1、Regmap 申请与初始化

regmap 支持多种物理总线,比如 I2C 和 SPI,我们需要根据所使用的接口来选择合适的 regmap 初始化函数。Linux 内核提供了针对不同接口的 regmap 初始化函数。

SPI 接口初始化函数为 regmap_init_spi

I2C 接口的初始化函数为 regmap_init_i2c

不管是什么接口,全部使用 regmap_exit 这个函数来释放 regmap

我们一般会在 probe 函数中初始化 regmap_config,然后申请并初始化 regmap。

2、regmap 设备访问 API 函数

不管是 I2C 还是 SPI 等接口,还是 SOC 内部的寄存器,对于寄存器的操作就两种:读和写。regmap 提供了最核心的两个读写操作:regmap_read 和 regmap_write。这两个函数分别用来读/写寄存器

在 regmap_read 和 regmap_write 的基础上还衍生出了其他一些 regmap 的 API 函数,首先是regmap_update_bits 函数。看名字就知道,此函数用来修改寄存器指定的 bit,函数原型如下:

int

regmap_update_bits

(structregmap*

map

,

unsigned

int

reg,

unsigned

int

mask,

unsigned

int

val,

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要操作的寄存器。

mask:掩码,需要更新的位必须在掩码中设置为 1。

val:需要更新的位值。

返回值:0,写成功;其他值,写失败。

比如要将寄存器的 bit1 和 bit2 置 1,那么 mask 应该设置为 0X00000011,此时 val 的 bit1 和 bit2 应该设置为 1,也就是 0Xxxxxxx11。

如果要清除寄存器的 bit4 和 bit7,那么 mask 应该设置为 0X10010000,val 的 bit4 和 bit7 设置为 0,也就是 0X0xx0xxxx。

接下来看一下 regmap_bulk_read 函数,此函数用于读取多个寄存器的值,函数原型如下:

int

regmap_bulk_read

(structregmap*

map

,

unsigned

int

reg,

void

*val,

size_t

val_count)

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要读取的第一个寄存器。

val:读取到的数据缓冲区。

val_count:要读取的寄存器数量。

返回值:0,写成功;其他值,读失败。

另外也有多个寄存器写函数 regmap_bulk_write,函数原型如下:

int

regmap_bulk_write

(structregmap*

map

,

unsigned

int

reg,

const

void

*val,

size_t

val_count)

函数参数和返回值含义如下:

map:要操作的 regmap。

reg:要写的第一个寄存器。

val:要写的寄存器数据缓冲区。

val_count:要写的寄存器数量。

返回值:0,写成功;其他值,读失败。

关于 regmap 常用到 API 函数就讲解到这里,还有很多其他功能的 API 函数,大家自行查 阅 Linux 内核即可,内核里面对每个 API 函数都有详细的讲解。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • Linux
    +关注

    关注

    88

    文章

    11628

    浏览量

    217986
  • 函数
    +关注

    关注

    3

    文章

    4406

    浏览量

    66841
  • 系统
    +关注

    关注

    1

    文章

    1043

    浏览量

    22174
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    飞凌嵌入式ElfBoard ELF 1板卡-Regmap子系统之Regmap简介

    的物理地址、寄存器位宽、寄存器缩放因子等信息,以及底层设备的通信接口(如I2C或SPI)。一旦regmap对象被初始化,驱动程序可以使用 Regmap API 中提供的函数来读取和写入寄存器的值,执行位
    发表于 04-16 11:03

    嵌入式学习-飞凌嵌入式ElfBoard ELF 1板卡-Regmap子系统之Regmap框架结构

    与实际硬件之间的通信。不同的总线类型(如SPI、I2C、MMIO)可以通过适当的驱动程序与Regmap物理总线进行集成。每种物理总线都提供了一组操作函数,用于读取和写入寄存器。Regmap
    发表于 04-17 13:59

    飞凌嵌入式ElfBoard ELF 1板卡-Regmap的优势

    和可扩展性。 综上所述,Regmap 相对于传统的 spi_write/spi_read 函数提供了更高级的抽象接口、灵活的配置、寄存器缓存、寄存器位域操作和可扩展性等优势,使得驱动程序的开发更加简单、可维护和可移植。
    发表于 05-22 10:39

    飞凌嵌入式ElfBoard ELF 1板卡-Regmap使用

    )。它首先分配内存以存储Regmap对象,然后设置Regmap的相关字段和操作函数,以便与SPI总线进行通信。最后,函数返回指向初始化的
    发表于 05-22 10:40

    「正点原子Linux连载」第六十章Linux RTC驱动实验

    址对应的虚拟地址。第259行,Linux3.1引入了一个全新的regmap机制,regmap用于提供一套方便的API函数操作底层硬件寄存器
    发表于 03-18 10:20

    「正点原子Linux连载」第六十章Linux RTC驱动实验

    址对应的虚拟地址。第259行,Linux3.1引入了一个全新的regmap机制,regmap用于提供一套方便的API函数操作底层硬件寄存器
    发表于 03-23 09:52

    以rk808驱动为例子讲解i2c regmap方式读写

    I2C读写时序regmap i2cIntroRegmap主要目的是减少慢速I/O驱动上的重复逻辑,提供一种通用的接口来操作底层硬件上的寄存器.Regmap除了能做到统一的I/O接口,还可以在驱动
    发表于 08-11 16:43

    Linux C函数手册

    Linux C函数库参考,一本linux学习的参考备查手册
    发表于 11-03 17:33 0次下载

    linux_C函数库中文手册

    linux_C函数库中文手册linux_C函数库中文手册
    发表于 03-20 10:42 15次下载

    Linux C函数参考手册

    Linux C函数参考手册
    发表于 10-25 15:32 6次下载
    <b class='flag-5'>Linux</b> C<b class='flag-5'>函数</b>参考手册

    Linux教程之Linux C函数参考教程免费下载

    本文档的主要内容详细介绍的是Linux教程之Linux C函数参考教程免费下载。
    发表于 03-20 08:00 4次下载
    <b class='flag-5'>Linux</b>教程之<b class='flag-5'>Linux</b> C<b class='flag-5'>函数</b>参考教程免费下载

    Linux内核GPIO操作函数的详解分析

    本文档的主要内容详细介绍的是Linux内核GPIO操作函数的详解分析免费下载。
    发表于 01-22 16:58 28次下载

    Linux中什么是 Regmap

    Linux 下大部分设备的驱动开发都是操作其内部寄存器,比如 I2C/SPI 设备的本质都是一样的,通过 I2C/SPI 接口读写芯片内部寄存器。芯片内部寄存器也是同样的道理,比如 I.MX6ULL
    的头像 发表于 07-06 17:25 1031次阅读

    Linux Regmap 驱动框架

    regmap 向驱动编写人员提供的 API 接口,驱动编写人员使用这些API 接口来操作具体的芯片设备,也是驱动编写人员重点要掌握的。 2、regmap 结构体 Linux 内 核
    的头像 发表于 07-06 17:29 1694次阅读
    <b class='flag-5'>Linux</b> <b class='flag-5'>Regmap</b> 驱动框架

    Linux内核如何使用结构体和函数指针?

    我将结合具体的Linux内核驱动框架代码来展示Linux内核如何使用结构体和函数指针。
    的头像 发表于 09-06 14:17 1674次阅读
    <b class='flag-5'>Linux</b>内核如何使用结构体和<b class='flag-5'>函数</b>指针?