[转载]regmap使用介绍

内核3.1引入一套新的API regmap,目的是提取出关于I2C SPI irq等相关注册、使能以及读写的公共部分,以提高代码的可重用性,并且使得在使用如上内核基础组件时变得更为简单易用。

0 基础结构

  1. struct regmap_config {
  2. int reg_bits; // 寄存器地址的位数,必须配置,例如I2C寄存器地址位数为 8
  3. int pad_bits; // 寄存器值的位数,必须配置
  4. int val_bits;
  5. bool (*writeable_reg)(struct device *dev, unsigned int reg); // 可写寄存器回调,maintain一个可写寄存器表
  6. bool (*readable_reg)(struct device *dev, unsigned int reg); // 可读寄存器回调, maintain一个可读寄存器表
  7. bool (*volatile_reg)(struct device *dev, unsigned int reg); // 可要求读写立即生效的寄存器回调,不可以被cache,maintain一个可立即生效寄存器表
  8. bool (*precious_reg)(struct device *dev, unsigned int reg); // 要求寄存器数值维持在一个数值范围才正确,maintain一个数值准确表
  9. unsigned int max_register; // max_register: 最大寄存器地址
  10. const struct reg_default *reg_defaults;
  11. unsigned int num_reg_defaults;
  12. enum regcache_type cache_type;
  13. const void *reg_defaults_raw;
  14. unsigned int num_reg_defaults_raw;
  15. u8 read_flag_mask;
  16. u8 write_flag_mask;
  17. };

1 初始化regmap

  1. regmap_init_i2c(struct i2c_client *i2c, struct regmap_config *config);
  2. regmap_init_spi(struct spi_device *spi, strcut regmap_config *config);
  3. regmap_add_irq_chip(struct regmap *map, int irq, int irq_flags, int irq_base, struct regmap_irq_chip *chip, struct regmap_irq_chip_data **data);

前两个是用来关联i2c或者spi设备和regmap_config的,第三个用来在关联后的regmap上注册 irq

2 使用regmap

在初始化好regmap之后,就可以调用regmap提供的read/write/update等操作了。

  1. regmap_write(struct regmap *map, int reg, int val); // 向reg写入val
  2. regmap_raw_write(struct regmap *map, int reg, void *val, size_t val_len);  // 向reg写入指定长度的数据,数据存放在val中
  3. regmap_read(struct regmap *map, int reg, int *val); // 读取reg的数据到val中
  4. regmap_raw_read(struct regmap *map, int reg, void *val, size_t val_len); // 读取reg中指定长度的数据
  5. regmap_bulk_read(struct regmap *map, int reg, void *val, size_t val_count); // 读取从reg开始之后val_count个寄存器的数据到val中
  6. regmap_update_bits(struct regmap *map, int reg, int mask, int val); // 更新reg寄存器中mask指定的位
  7. regcache_cache_bypass(arizona->regmap, true); // 设置读写寄存器不通过cache模式而是bypass模式,读写立即生效,一般在audio等确保时序性驱动中用到

3 释放regmap

    1. regmap_exit(struct regmap *map);

文章出处:http://blog.csdn.net/hellowxwworld/article/details/10737569

时间: 2024-10-01 00:28:54

[转载]regmap使用介绍的相关文章

【转载】Spring介绍之二

Spring框架,是进行对象管理,对象关联,解耦的一个中间层框架.SSH(Struts+Spring+Hibernate)三大Spring在中间就起着一个承上启下的作用.好,首先我们先来看一下Spring框架的一些知识点,通过下边这张图来总括一下: 好,这篇博客咱们先来对Spring框架进行一个初步的了解. 一,框架介绍: 1,先看一下帮助文档的这张图,里边主要包括了Spring自身的功能,还有可以和其框架结合的一些框架,通过这张图可以看出,Spring框架和其他框架的集成能力是非常强的. 2,

[转载] Redis系统性介绍

转载自http://blog.nosqlfan.com/html/3139.html?ref=rediszt 虽然Redis已经很火了,相信还是有很多同学对Redis只是有所听闻或者了解并不全面,下面是一个比较系统的Redis介绍,对Redis的特性及各种数据类型及操作进行了介绍.是一个很不错的Redis入门教程. 1.介绍 1.1 Redis是什么 REmote DIctionary Server(Redis) 是一个由Salvatore Sanfilippo写的key-value存储系统.R

[转载] 十五分钟介绍 Redis数据结构

转载自http://blog.nosqlfan.com/html/3202.html?ref=rediszt Redis是一种面向“键/值”对类型数据的分布式NoSQL数据库系统,特点是高性能,持久存储,适应高并发的应用场景.它起步较晚,发展迅速,目前已被许多大型机构采用,比如Github,看看谁在用它.本文翻译自Redis的一篇官方文档:A fifteen minute introduction to Redis data types方便感兴趣的朋友,快速介绍Redis的数据类型. 中英文对照

[转载] 搜索引擎技术介绍

转载自http://backend.blog.163.com/blog/static/202294126201252872124208/ 需求与历史 搜索引擎的诞生源自互联网最根本的用途之一:信息获取.在搜索引擎出现之前,互联网缺少入口,用户往往需要自己记住有用的网站和网页. 为了满足这种需求,最早的“搜索引擎”,即分类目录浏览式的引擎便出现了,Yahoo就是其中的代表. 当时只是把一些有用的网站通过分类的方式手工组织起来,便于用户找到有用的信息. 能够手工组织也是基于早年整个互联网的网站数量也

(转载)重新介绍 JavaScript(JS 教程)

引言 为什么会有这一篇“重新介绍”呢?因为 JavaScript 堪称世界上被人误解最深的编程语言.虽然常被视作“玩具语言”,但它看似简洁外衣下,还隐藏着强大的语言特性. JavaScript 目前广泛应用于一大批知名应用中,对于网页和移动开发者来说,深入理解 JavaScript 就尤有必要. 先从这门语言的历史谈起.1995 年 Netscape 一位名为 Brendan Eich 的员工创造了 JavaScript,随后在 1996 年初,JavaScript 首先被应用于 Netscap

转载:AWR介绍使用

转载自 http://www.cnblogs.com/lanzi/archive/2011/03/07/1975096.html 自动工作负载库(Automatic Workload Repository,AWR) AWR的由来:    10g之前的oracle:用户的连接将产生会话,当前会话记录保存在v$session中:处于等待状态的会话会被复制一份放在v$session_wait中.当该连接 断开后,其原来的连接信息在v$session和v$session_wait中就会被删除;oracl

[转载]步进电机原理介绍与基于STM32的SPWM驱动步进电机,使用软件实现电机细分

文章摘自: http://bbs.eeworld.com.cn/thread-370591-1-1.html 一.混合式步进电机的结构和驱动原理 电机原理这部分不想讲的太复杂了,拆开一台电机看看就明白了.      电机的转子是一个永磁体, 它的上面有若干个磁极SN组成,这些磁极固定的摆放成一定角度.电机的定子是几个串联的线圈构成的磁体. 出线一般是四条线标记为A+,A-,B+,B-.A相与B相是不通的,用万用表很容易区分出来,至于各相的+-出线实际是不用考虑的,任意一相正负对调电机将反转.另外

【转载】Kafka介绍及升级经验分享

http://blog.talkingdata.net/?p=3165 背景 当时的现状:开始使用Kafka的时候,使用的版本是0.7.2,当时的目的是为了替代kestrel,主要是使用Kafka来做消息传输中间件.Kafka解决了我们当时使用Kestrel遇到的最大的三个问题:吞吐量.数据量.一份数据多次消费. 为什么要升级 相比其它开源项目,Kafka的升级比较麻烦,其根本原因主要是作为消息传输中间件,涉及的系统多.既然升级麻烦,而且Kafka 0.7在这一年多来运行稳定,性能优异,那么我们

【转载】存储过程介绍

原文作者:Dave 原文地址:http://blog.csdn.net/tianlesoftware/article/details/5261364