<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="https://devzone.nordicsemi.com/cfs-file/__key/system/syndication/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/f/nordic-q-a/78340/gpio-port-definition-in-devicetree</link><description>Dear Nordic, 
 Could you please help me to understand the concept of using the DTS files and board initialization sequence? 
 We have just one GPIO port to control some external ICs on the board. It should be set to HIGH state when the peripheral is on</description><dc:language>en-US</dc:language><generator>Telligent Community 13</generator><lastBuildDate>Fri, 20 Aug 2021 12:39:49 GMT</lastBuildDate><atom:link rel="self" type="application/rss+xml" href="https://devzone.nordicsemi.com/f/nordic-q-a/78340/gpio-port-definition-in-devicetree" /><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/325967?ContentTypeID=1</link><pubDate>Fri, 20 Aug 2021 12:39:49 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:2f6ba024-6980-4d1b-9078-ebba710c69ce</guid><dc:creator>Sigurd</dc:creator><description>[quote user="Dmitry Kr"]Is it a right way to use regulator_enable API function?[/quote]
&lt;p&gt;&amp;nbsp;Looking at the description of &lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v2.6.0-rc1-ncs1/include/sys/notify.h#L307"&gt;sys_notify_init_callback&lt;/a&gt;&lt;span&gt;: ,&amp;nbsp;&lt;br /&gt;&lt;pre class="ui-code" data-mode="text"&gt; * On completion of the operation the client object must be
 * reinitialized before it can be re-used.&lt;/pre&gt;&lt;br /&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;it seems like the&amp;nbsp;client object must be&amp;nbsp;reinitialized, yes.&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;span&gt;&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/325581?ContentTypeID=1</link><pubDate>Wed, 18 Aug 2021 17:34:28 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:90625678-a270-492f-83b1-ae5174f81813</guid><dc:creator>Dmitry Kr</dc:creator><description>&lt;p&gt;Hi Sigurd,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Checking that code:&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/e4f87fba1b8785dcdcd1a3872e592bd7f7b53039/tests/lib/onoff/src/main.c"&gt;https://github.com/nrfconnect/sdk-zephyr/blob/e4f87fba1b8785dcdcd1a3872e592bd7f7b53039/tests/lib/onoff/src/main.c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve found that there was reset_client() function called before the every call to regulator_enable().&lt;/p&gt;
&lt;p&gt;That reset_client() function clears onoff_client structure and reinstalls callback binding.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;Is it a right way to use regulator_enable API function?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/325239?ContentTypeID=1</link><pubDate>Tue, 17 Aug 2021 08:25:46 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:1ead909f-2086-4a51-9bce-774364e9b078</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;I think this means that you have not registered a callback with&amp;nbsp;&lt;span&gt;sys_notify_init_callback()&lt;/span&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/324904?ContentTypeID=1</link><pubDate>Fri, 13 Aug 2021 21:13:47 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:d8b933a5-cd7c-4575-ad54-bde5061cc446</guid><dc:creator>Dmitry Kr</dc:creator><description>&lt;p&gt;Hi, Sigurd,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;yes,&amp;nbsp;&lt;/p&gt;
&lt;p&gt;* regulator_enable() returns -EINVAL (-22)&lt;/p&gt;
&lt;p&gt;* regulator_disable() returns -134&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/324796?ContentTypeID=1</link><pubDate>Fri, 13 Aug 2021 10:05:34 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:b292baaf-6f24-4453-b2da-059daa47f068</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
[quote user="Dmitry Kr"]Is there any things to check why the regulator_xxx functions don&amp;#39;t work?[/quote]
&lt;p&gt;&amp;nbsp;Did the function call return any errors?&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/324552?ContentTypeID=1</link><pubDate>Wed, 11 Aug 2021 19:23:44 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:6535b9b7-853f-479b-aa74-3b834789db38</guid><dc:creator>Dmitry Kr</dc:creator><description>&lt;p&gt;Hi, Sigurd,&lt;/p&gt;
&lt;p&gt;Many thanks for the recommendation.&amp;nbsp;&lt;/p&gt;
&lt;p&gt;I&amp;#39;ve added regulator element in DTS file:&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&lt;code&gt; pwr_sf: sensor-flash-supply {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; /* Power regulator for sensors &amp;amp; flash mem */&lt;/code&gt;&lt;br /&gt;&lt;code&gt; compatible = &amp;quot;regulator-fixed&amp;quot;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; label = &amp;quot;sensor-flash-supply&amp;quot;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; regulator-name = &amp;quot;sensor-flash-supply&amp;quot;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; enable-gpios = &amp;lt;&amp;amp;gpio1 9 GPIO_ACTIVE_HIGH&amp;gt;;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; /* startup-delay-us = &amp;lt;1000&amp;gt;; -- uncomment this to specify the startup time delay */ &lt;/code&gt;&lt;br /&gt;&lt;code&gt; off-on-delay-us = &amp;lt;1000&amp;gt;; /* 600 us for TPS706xx */&lt;/code&gt;&lt;br /&gt;&lt;code&gt; /* regulator-boot-on; -- uncomment this to enable the regulator in bootloader mode */&lt;/code&gt;&lt;br /&gt;&lt;code&gt; /* regulator-always-on; -- uncomment this to enable the regulator unconditionally */&lt;/code&gt;&lt;br /&gt;&lt;code&gt; };&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;Still, the code (regulator_enable, _disable) doen&amp;#39;t work completely (the commented lines has been replaced by direct gpio_pin_set to check if GPIO initialization was done properly). Is there any things to check why the regulator_xxx functions don&amp;#39;t work?&lt;/p&gt;
&lt;p&gt;&lt;code&gt;const struct device *pwr_sf_dev;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;const struct device *pwr_gpio;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;struct onoff_client onoff_cli = {};&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#define REGULATOR_NODE DT_NODELABEL(pwr_sf)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;#define BOOT_ON DT_PROP(REGULATOR_NODE, regulator_boot_on)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#define ALWAYS_ON DT_PROP(REGULATOR_NODE, regulator_always_on)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#define STARTUP_DELAY_US DT_PROP(REGULATOR_NODE, startup_delay_us)&lt;/code&gt;&lt;br /&gt;&lt;code&gt;#define OFF_ON_DELAY_US DT_PROP(REGULATOR_NODE, off_on_delay_us)&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;int pwrct_sf_init() &lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt; //!!!&amp;nbsp;move to&amp;nbsp;boards.c&lt;/code&gt;&lt;br /&gt;&lt;code&gt; pwr_sf_dev = device_get_binding(DT_LABEL(REGULATOR_NODE));&lt;/code&gt;&lt;br /&gt;&lt;code&gt; if (pwr_sf_dev == NULL) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; return -ENODEV;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;/* Set power control pin as output */&lt;/code&gt;&lt;br /&gt;&lt;code&gt; pwr_gpio = device_get_binding(DT_GPIO_LABEL(REGULATOR_NODE, enable_gpios)); &lt;/code&gt;&lt;br /&gt;&lt;code&gt; if (pwr_gpio == NULL) {&lt;/code&gt;&lt;br /&gt;&lt;code&gt; return -ENODEV;&lt;/code&gt;&lt;br /&gt;&lt;code&gt; }&lt;/code&gt;&lt;br /&gt;&lt;code&gt; int ret = gpio_pin_configure(pwr_gpio, DT_GPIO_PIN(REGULATOR_NODE, enable_gpios), GPIO_OUTPUT_INACTIVE | DT_GPIO_FLAGS(REGULATOR_NODE, enable_gpios));&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;printk(&amp;quot;Regulator: %s%s\n&amp;quot;, IS_ENABLED(BOOT_ON) ? &amp;quot;, boot-on&amp;quot; : &amp;quot;&amp;quot;, IS_ENABLED(ALWAYS_ON) ? &amp;quot;, always-on&amp;quot; : &amp;quot;&amp;quot;);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; printk(&amp;quot;startup-delay: %u us\n&amp;quot;, STARTUP_DELAY_US);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; printk(&amp;quot;off-on-delay: %u us\n&amp;quot;, OFF_ON_DELAY_US);&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;return ret;&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;void pwrct_sf_on() &lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt; gpio_pin_set(pwr_gpio, DT_GPIO_PIN(REGULATOR_NODE, enable_gpios), 1);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; //regulator_enable(pwr_sf_dev, &amp;amp;onoff_cli);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;&lt;code&gt;void pwrct_sf_off() &lt;/code&gt;&lt;br /&gt;&lt;code&gt;{&lt;/code&gt;&lt;br /&gt;&lt;code&gt; gpio_pin_set(pwr_gpio, DT_GPIO_PIN(REGULATOR_NODE, enable_gpios), 0);&lt;/code&gt;&lt;br /&gt;&lt;code&gt; //regulator_disable(pwr_sf_dev);&lt;/code&gt;&lt;br /&gt;&lt;code&gt;}&lt;/code&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item><item><title>RE: GPIO port definition in devicetree</title><link>https://devzone.nordicsemi.com/thread/324041?ContentTypeID=1</link><pubDate>Mon, 09 Aug 2021 13:45:13 GMT</pubDate><guid isPermaLink="false">137ad170-7792-4731-bb38-c0d22fbe4515:ab2ebc8e-2b8c-4b2c-9ea6-70e814532fda</guid><dc:creator>Sigurd</dc:creator><description>&lt;p&gt;Hi,&lt;/p&gt;
&lt;p&gt;There are several ways to do this, but typically you create some sort of board.c file where you do the board specific initialization.&lt;/p&gt;
&lt;p&gt;Take a look at these files to see how it can be done:&lt;/p&gt;
&lt;p&gt;Thingy:91 ,&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-nrf/blob/master/boards/arm/thingy91_nrf9160/board_secure.c#L16"&gt;https://github.com/nrfconnect/sdk-nrf/blob/master/boards/arm/thingy91_nrf9160/board_secure.c#L16&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thingy:53,&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v2.6.0-rc1-ncs1/boards/arm/thingy53_nrf5340/board.c#L85"&gt;https://github.com/nrfconnect/sdk-zephyr/blob/v2.6.0-rc1-ncs1/boards/arm/thingy53_nrf5340/board.c#L85&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Thingy:52,&amp;nbsp;&lt;a href="https://github.com/nrfconnect/sdk-zephyr/blob/v2.6.0-rc1-ncs1/boards/arm/thingy52_nrf52832/board.c"&gt;https://github.com/nrfconnect/sdk-zephyr/blob/v2.6.0-rc1-ncs1/boards/arm/thingy52_nrf52832/board.c&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;</description></item></channel></rss>