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
    +关注

    关注

    87

    文章

    11304

    浏览量

    209499
  • 函数
    +关注

    关注

    3

    文章

    4331

    浏览量

    62618
  • 系统
    +关注

    关注

    1

    文章

    1017

    浏览量

    21344
收藏 人收藏

    评论

    相关推荐

    「正点原子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

    linux基本操作与C语言基础

    目录C语言基础C++linux基本操作io操作数据结构进程线程网络编程实战项目C语言基础基本数据类型指针结构体、联合体、枚举C++拓展classnew继承 子类父类、虚函数、友元
    发表于 12-17 07:53

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

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

    Linux操作系统

    linux的教学内容1 、Linux概述 2 、Linux操作系统安装3、 Linux的内核 4 、Li
    发表于 04-10 16:54 0次下载
    <b class='flag-5'>Linux</b><b class='flag-5'>操作</b>系统

    Linux C函数手册

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

    linux_C函数库中文手册

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

    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系统更新的操作操作原理

    linux系统更新的简单操作操作原理。
    发表于 05-27 09:34 1865次阅读

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

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

    linux操作系统中的进程创建和销毁函数解析

    第一次遇见创建进程是在Linux启动流程中,reset_init函数调用kernel_thread函数创建了2个内核进程:kernel_init和kthreadd。
    发表于 06-26 09:12 730次阅读
    <b class='flag-5'>linux</b><b class='flag-5'>操作</b>系统中的进程创建和销毁<b class='flag-5'>函数</b>解析

    Linux中什么是 Regmap

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

    Linux Regmap 驱动框架

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

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

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