blob: 534a53a80b9531e09ede130cd7ea189b06a00993 [file] [log] [blame]
<!--
Documentation/_templates/layout.html
Licensed to the Apache Software Foundation (ASF) under one or more
contributor license agreements. See the NOTICE file distributed with
this work for additional information regarding copyright ownership. The
ASF licenses this file to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance with the
License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
License for the specific language governing permissions and limitations
under the License.
-->
<!DOCTYPE html>
<html class="writer-html5" lang="en">
<head>
<meta charset="utf-8" /><meta name="generator" content="Docutils 0.18.1: http://docutils.sourceforge.net/" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>drivers/regmap &mdash; NuttX latest documentation</title>
<link rel="stylesheet" type="text/css" href="../../../_static/pygments.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/css/theme.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/copybutton.css" />
<link rel="stylesheet" type="text/css" href="../../../_static/custom.css" />
<link rel="shortcut icon" href="../../../_static/favicon.ico"/>
<script src="../../../_static/jquery.js"></script>
<script src="../../../_static/_sphinx_javascript_frameworks_compat.js"></script>
<script data-url_root="../../../" id="documentation_options" src="../../../_static/documentation_options.js"></script>
<script src="../../../_static/doctools.js"></script>
<script src="../../../_static/sphinx_highlight.js"></script>
<script src="../../../_static/clipboard.min.js"></script>
<script src="../../../_static/copybutton.js"></script>
<script src="../../../_static/js/theme.js"></script>
<link rel="index" title="Index" href="../../../genindex.html" />
<link rel="search" title="Search" href="../../../search.html" />
<link rel="next" title="Reset Driver" href="reset.html" />
<link rel="prev" title="Memory Technology Device Drivers" href="mtd.html" />
</head>
<body class="wy-body-for-nav">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side">
<div class="wy-side-scroll">
<div class="wy-side-nav-search" >
<a href="../../../index.html" class="icon icon-home"> NuttX
</a>
<!-- this version selector is quite ugly, should be probably replaced by something
more modern -->
<div class="version-selector">
<select onchange="javascript:location.href = this.value;">
<option value="../../../../latest" selected="selected">latest</option>
<option value="../../../../10.0.0" >10.0.0</option>
<option value="../../../../10.0.1" >10.0.1</option>
<option value="../../../../10.1.0" >10.1.0</option>
<option value="../../../../10.2.0" >10.2.0</option>
<option value="../../../../10.3.0" >10.3.0</option>
<option value="../../../../11.0.0" >11.0.0</option>
<option value="../../../../12.0.0" >12.0.0</option>
<option value="../../../../12.1.0" >12.1.0</option>
<option value="../../../../12.2.0" >12.2.0</option>
<option value="../../../../12.2.1" >12.2.1</option>
<option value="../../../../12.3.0" >12.3.0</option>
<option value="../../../../12.4.0" >12.4.0</option>
<option value="../../../../12.5.0" >12.5.0</option>
<option value="../../../../12.5.1" >12.5.1</option>
<option value="../../../../12.6.0" >12.6.0</option>
<option value="../../../../12.7.0" >12.7.0</option>
<option value="../../../../12.8.0" >12.8.0</option>
<option value="../../../../12.9.0" >12.9.0</option>
<option value="../../../../12.10.0" >12.10.0</option>
<option value="../../../../12.11.0" >12.11.0</option>
</select>
</div>
<div role="search">
<form id="rtd-search-form" class="wy-form" action="../../../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" aria-label="Search docs" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
</div>
</div><div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="Navigation menu">
<p class="caption" role="heading"><span class="caption-text">Table of Contents</span></p>
<ul class="current">
<li class="toctree-l1"><a class="reference internal" href="../../../index.html">Home</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../introduction/index.html">Introduction</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../quickstart/index.html">Getting Started</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../contributing/index.html">Contributing</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../introduction/inviolables.html">The Inviolable Principles of NuttX</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../platforms/index.html">Supported Platforms</a></li>
<li class="toctree-l1 current"><a class="reference internal" href="../../index.html">OS Components</a><ul class="current">
<li class="toctree-l2"><a class="reference internal" href="../../binfmt.html">Binary Loader</a></li>
<li class="toctree-l2 current"><a class="reference internal" href="../index.html">Device Drivers</a><ul class="current">
<li class="toctree-l3"><a class="reference internal" href="../character/index.html">Character Device Drivers</a></li>
<li class="toctree-l3"><a class="reference internal" href="../block/index.html">Block Device Drivers</a></li>
<li class="toctree-l3 current"><a class="reference internal" href="index.html">Specialized Device Drivers</a><ul class="current">
<li class="toctree-l4"><a class="reference internal" href="audio.html">Audio Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="clk.html">Clock management (CLK)</a></li>
<li class="toctree-l4"><a class="reference internal" href="devicetree.html">Device Tree support</a></li>
<li class="toctree-l4"><a class="reference internal" href="devmem.html">DEVMEM Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="dma.html">DMA Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="framebuffer.html">Frame Buffer Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="i2c.html">I2C Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="ioexpander.html">IO Expander Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="lcd.html">LCD Character Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="mtd.html">Memory Technology Device Drivers</a></li>
<li class="toctree-l4 current"><a class="current reference internal" href="#">drivers/regmap</a><ul>
<li class="toctree-l5"><a class="reference internal" href="#regmap-header-files">Regmap Header files</a></li>
<li class="toctree-l5"><a class="reference internal" href="#examples">Examples</a></li>
</ul>
</li>
<li class="toctree-l4"><a class="reference internal" href="reset.html">Reset Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="rptun.html">Remote Proc Tunnel Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="rwbuffer.html"><code class="docutils literal notranslate"><span class="pre">rwbuffer.c</span></code></a></li>
<li class="toctree-l4"><a class="reference internal" href="sensors.html">Sensor Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="segger.html">Segger RTT drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="spi.html">SPI Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="syslog.html">SYSLOG</a></li>
<li class="toctree-l4"><a class="reference internal" href="sdio.html">SDIO Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="usbdev.html">USB Device-Side Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="usbhost.html">USB Host-Side Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="usbmisc.html">USB Miscellaneous Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="usbmonitor.html">USB Monitor support</a></li>
<li class="toctree-l4"><a class="reference internal" href="usrsock.html">Usrsock Driver</a></li>
<li class="toctree-l4"><a class="reference internal" href="mmcsd.html">MMCSD Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="net/index.html">Network interface drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="pinctrl.html">Pinctrl Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="pipes.html">FIFO and named pipe drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="power/index.html">Power-related Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="virtio.html">Virtio Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="video.html">Video Device Drivers</a></li>
<li class="toctree-l4"><a class="reference internal" href="wireless.html">Wireless Drivers</a></li>
</ul>
</li>
<li class="toctree-l3"><a class="reference internal" href="../thermal/index.html">Thermal Framework</a></li>
<li class="toctree-l3"><a class="reference internal" href="../index.html#lower-half-and-upper-half">Lower-half and upper-half</a></li>
<li class="toctree-l3"><a class="reference internal" href="../index.html#subdirectories-of-nuttx-drivers">Subdirectories of <code class="docutils literal notranslate"><span class="pre">nuttx/drivers</span></code></a></li>
<li class="toctree-l3"><a class="reference internal" href="../index.html#skeleton-files">Skeleton Files</a></li>
<li class="toctree-l3"><a class="reference internal" href="../index.html#drivers-early-initialization">Drivers Early Initialization</a></li>
</ul>
</li>
<li class="toctree-l2"><a class="reference internal" href="../../nxflat.html">NXFLAT</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../nxgraphics/index.html">NX Graphics Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../paging.html">On-Demand Paging</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../audio/index.html">Audio Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../filesystem/index.html">NuttX File System</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../libs/index.html">NuttX libraries</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../net/index.html">Network Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../mm/index.html">Memory Management</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../syscall.html">Syscall Layer</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../tools/index.html"><code class="docutils literal notranslate"><span class="pre">/tools</span></code> Host Tools</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../arch/index.html">Architecture-Specific Code</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../boards.html">Boards Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../cmake.html">CMake Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../openamp.html">OpenAMP Support</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../video.html">Video Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../crypto.html">Crypto API Subsystem</a></li>
<li class="toctree-l2"><a class="reference internal" href="../../wireless.html">Wireless Subsystem</a></li>
</ul>
</li>
<li class="toctree-l1"><a class="reference internal" href="../../../applications/index.html">Applications</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../implementation/index.html">Implementation Details</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../reference/index.html">API Reference</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../faq/index.html">FAQ</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../guides/index.html">Guides</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../glossary.html">Glossary</a></li>
<li class="toctree-l1"><a class="reference internal" href="../../../logos/index.html">NuttX Logos</a></li>
</ul>
</div>
</div>
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"><nav class="wy-nav-top" aria-label="Mobile navigation menu" >
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="../../../index.html">NuttX</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="Page navigation">
<ul class="wy-breadcrumbs">
<li><a href="../../../index.html" class="icon icon-home" aria-label="Home"></a></li>
<li class="breadcrumb-item"><a href="../../index.html">OS Components</a></li>
<li class="breadcrumb-item"><a href="../index.html">Device Drivers</a></li>
<li class="breadcrumb-item"><a href="index.html">Specialized Device Drivers</a></li>
<li class="breadcrumb-item active">drivers/regmap</li>
<li class="wy-breadcrumbs-aside">
<a href="../../../_sources/components/drivers/special/regmap.rst.txt" rel="nofollow"> View page source</a>
</li>
</ul>
<hr/>
</div>
<div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article">
<div itemprop="articleBody">
<section id="drivers-regmap">
<h1>drivers/regmap<a class="headerlink" href="#drivers-regmap" title="Permalink to this heading"></a></h1>
<p>This is the documentation page for the drivers/regmap/.</p>
<section id="regmap-header-files">
<h2>Regmap Header files<a class="headerlink" href="#regmap-header-files" title="Permalink to this heading"></a></h2>
<ul>
<li><p><code class="docutils literal notranslate"><span class="pre">include/nuttx/regmap/regmap.h</span></code></p>
<p>The structures and APIS used in regimap are in this header file.</p>
</li>
<li><p><code class="docutils literal notranslate"><span class="pre">struct</span> <span class="pre">regmap_bus_s</span></code></p>
<p>Each bus must implement an instance of struct regmap_bus_s. That structure
defines a call table with the following methods:</p>
<blockquote>
<div><ul>
<li><p>Single byte reading of the register (8bits)</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">CODE</span><span class="w"> </span><span class="nf">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">reg_read_t</span><span class="p">)(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_bus_s</span><span class="w"> </span><span class="o">*</span><span class="n">bus</span><span class="p">,</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">val</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Single byte writing of the register (8bits)</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">CODE</span><span class="w"> </span><span class="nf">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">reg_write_t</span><span class="p">)(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_bus_s</span><span class="w"> </span><span class="o">*</span><span class="n">bus</span><span class="p">,</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Bulk register data reading.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">CODE</span><span class="w"> </span><span class="nf">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">read_t</span><span class="p">)(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_bus_s</span><span class="w"> </span><span class="o">*</span><span class="n">bus</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">reg_buf</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg_size</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">val_buf</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val_size</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Bulk register data writing.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">typedef</span><span class="w"> </span><span class="n">CODE</span><span class="w"> </span><span class="nf">int</span><span class="w"> </span><span class="p">(</span><span class="o">*</span><span class="n">write_t</span><span class="p">)(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_bus_s</span><span class="w"> </span><span class="o">*</span><span class="n">bus</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">data</span><span class="p">,</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">count</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Initialize the internal configuration of regmap. The first parameter must
be the handle of the bus, and the second parameter is the configuration
parameter of the bus. Finally, these two parameters will be transparent
to the corresponding bus. If you want to implement the bus interface by
yourself, you need to realize the corresponding bus initialization function,
refer to regimap_i2c.c and regmap_spi.c.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">regmap_init</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_bus_s</span><span class="w"> </span><span class="o">*</span><span class="n">bus</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_config_s</span><span class="w"> </span><span class="o">*</span><span class="n">config</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Regmap init i2c bus.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">regmap_init_i2c</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">i2c_master_s</span><span class="w"> </span><span class="o">*</span><span class="n">i2c</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">i2c_config_s</span><span class="w"> </span><span class="o">*</span><span class="n">i2c_config</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_config_s</span><span class="w"> </span><span class="o">*</span><span class="n">config</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>regmap init spi bus.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">regmap_init_spi</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">spi_dev_s</span><span class="w"> </span><span class="o">*</span><span class="n">spi</span><span class="p">,</span><span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">freq</span><span class="p">,</span>
<span class="w"> </span><span class="kt">uint32_t</span><span class="w"> </span><span class="n">devid</span><span class="p">,</span><span class="w"> </span><span class="k">enum</span><span class="w"> </span><span class="n">spi_mode_e</span><span class="w"> </span><span class="n">mode</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_config_s</span><span class="w"> </span><span class="o">*</span><span class="n">config</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Exit and destroy regmap</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">void</span><span class="w"> </span><span class="nf">regmap_exit</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">map</span><span class="p">);</span>
</pre></div>
</div>
</li>
<li><p>Regmap write() bulk_write() read() bulk_read(), called after initializing
the regmap bus device. the first parameter is regmap_s pointer.</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">regmap_write</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">map</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">regmap_bulk_write</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">map</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">const</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">val</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val_count</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">regmap_read</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">map</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">val</span><span class="p">);</span>
<span class="kt">int</span><span class="w"> </span><span class="nf">regmap_bulk_read</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="n">map</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">reg</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="kt">void</span><span class="w"> </span><span class="o">*</span><span class="n">val</span><span class="p">,</span><span class="w"> </span><span class="kt">unsigned</span><span class="w"> </span><span class="kt">int</span><span class="w"> </span><span class="n">val_count</span><span class="p">);</span>
</pre></div>
</div>
</li>
</ul>
</div></blockquote>
</li>
</ul>
</section>
<section id="examples">
<h2>Examples<a class="headerlink" href="#examples" title="Permalink to this heading"></a></h2>
<p>BMI160 sensor as an example:
- Head file</p>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;nuttx/i2c/i2c_master.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;nuttx/sensors/bmi160.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;nuttx/regmap/regmap.h&gt;</span>
<span class="cp">#include</span><span class="w"> </span><span class="cpf">&lt;stdlib.h&gt;</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Define the regmap_s handle in the driver’s life cycle</p></li>
</ul>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="k">struct</span><span class="w"> </span><span class="nc">bmi160_dev_s</span>
<span class="p">{</span>
<span class="cp">#ifdef CONFIG_SENSORS_BMI160_I2C</span>
<span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_s</span><span class="w"> </span><span class="o">*</span><span class="w"> </span><span class="n">regmap</span><span class="p">;</span><span class="w"> </span><span class="cm">/* Regmap interface */</span>
<span class="cp">#else </span><span class="cm">/* CONFIG_SENSORS_BMI160_SPI */</span>
<span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">spi_dev_s</span><span class="w"> </span><span class="o">*</span><span class="n">spi</span><span class="p">;</span><span class="w"> </span><span class="cm">/* SPI interface */</span>
<span class="cp">#endif</span>
<span class="p">};</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Initialize regmap</p></li>
</ul>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="nf">bmi160_i2c_regmap_init</span><span class="p">(</span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">bmi160_dev_s</span><span class="w"> </span><span class="o">*</span><span class="n">priv</span><span class="p">,</span>
<span class="w"> </span><span class="n">FAR</span><span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">i2c_master_s</span><span class="w"> </span><span class="o">*</span><span class="n">i2c</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">regmap_config_s</span><span class="w"> </span><span class="n">config</span><span class="p">;</span>
<span class="w"> </span><span class="k">struct</span><span class="w"> </span><span class="nc">i2c_config_s</span><span class="w"> </span><span class="n">dev_config</span><span class="p">;</span>
<span class="w"> </span><span class="n">config</span><span class="p">.</span><span class="n">reg_bits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span>
<span class="w"> </span><span class="n">config</span><span class="p">.</span><span class="n">val_bits</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">8</span><span class="p">;</span>
<span class="w"> </span><span class="n">config</span><span class="p">.</span><span class="n">disable_locking</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="nb">true</span><span class="p">;</span>
<span class="w"> </span><span class="n">dev_config</span><span class="p">.</span><span class="n">frequency</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">BMI160_I2C_FREQ</span><span class="p">;</span>
<span class="w"> </span><span class="n">dev_config</span><span class="p">.</span><span class="n">address</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">BMI160_I2C_ADDR</span><span class="p">;</span>
<span class="w"> </span><span class="n">dev_config</span><span class="p">.</span><span class="n">addrlen</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="mi">7</span><span class="p">;</span>
<span class="w"> </span><span class="n">priv</span><span class="o">-&gt;</span><span class="n">regmap</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">regmap_init_i2c</span><span class="p">(</span><span class="n">i2c</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">dev_config</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">config</span><span class="p">);</span>
<span class="w"> </span><span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">priv</span><span class="o">-&gt;</span><span class="n">regmap</span><span class="w"> </span><span class="o">==</span><span class="w"> </span><span class="nb">NULL</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">snerr</span><span class="p">(</span><span class="s">&quot;bmi160 Initialize regmap configuration failed!&quot;</span><span class="p">);</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="o">-</span><span class="n">ENXIO</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
<span class="w"> </span><span class="k">return</span><span class="w"> </span><span class="n">OK</span><span class="p">;</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
</div>
<ul class="simple">
<li><p>Use:</p></li>
</ul>
<div class="highlight-C notranslate"><div class="highlight"><pre><span></span><span class="kt">int</span><span class="w"> </span><span class="n">ret</span><span class="p">;</span>
<span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">regmap_read</span><span class="p">(</span><span class="n">priv</span><span class="o">-&gt;</span><span class="n">regmap</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="o">&amp;</span><span class="n">regval</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">snerr</span><span class="p">(</span><span class="s">&quot;regmap read address[%2X] failed: %d!</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">regmap_write</span><span class="p">(</span><span class="n">priv</span><span class="o">-&gt;</span><span class="n">regmap</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="n">regval</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">snerr</span><span class="p">(</span><span class="s">&quot;regmap write address[%2X] failed: %d!</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
<span class="n">ret</span><span class="w"> </span><span class="o">=</span><span class="w"> </span><span class="n">regmap_bulk_read</span><span class="p">(</span><span class="n">priv</span><span class="o">-&gt;</span><span class="n">regmap</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="n">regval</span><span class="p">,</span><span class="w"> </span><span class="n">len</span><span class="p">);</span>
<span class="k">if</span><span class="w"> </span><span class="p">(</span><span class="n">ret</span><span class="w"> </span><span class="o">&lt;</span><span class="w"> </span><span class="mi">0</span><span class="p">)</span>
<span class="w"> </span><span class="p">{</span>
<span class="w"> </span><span class="n">snerr</span><span class="p">(</span><span class="s">&quot;regmap read bulk address[%2X] failed: %d!</span><span class="se">\n</span><span class="s">&quot;</span><span class="p">,</span><span class="w"> </span><span class="n">regaddr</span><span class="p">,</span><span class="w"> </span><span class="n">ret</span><span class="p">);</span>
<span class="w"> </span><span class="p">}</span>
</pre></div>
</div>
</section>
</section>
</div>
</div>
<footer><div class="rst-footer-buttons" role="navigation" aria-label="Footer">
<a href="mtd.html" class="btn btn-neutral float-left" title="Memory Technology Device Drivers" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left" aria-hidden="true"></span> Previous</a>
<a href="reset.html" class="btn btn-neutral float-right" title="Reset Driver" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right" aria-hidden="true"></span></a>
</div>
<hr/>
<div role="contentinfo">
<p>&#169; Copyright 2023, The Apache Software Foundation.</p>
</div>
</footer>
</div>
</div>
</section>
</div>
<script>
jQuery(function () {
SphinxRtdTheme.Navigation.enable(true);
});
</script>
</body>
</html>