How to set GPIOs to pre-defined value
Brad Chou
chou.brad at gmail.com
Fri May 10 21:18:23 AEST 2019
> On May 10, 2019, at 11:34 AM, Andrew Jeffery <andrew at aj.id.au> wrote:
>
>
>
> On Thu, 9 May 2019, at 17:12, Brad Chou wrote:
>>
>>> On May 8, 2019, at 9:53 AM, Andrew Jeffery <andrew at aj.id.au> wrote:
>>>
>>>
>>>
>>> On Tue, 7 May 2019, at 18:23, Brad Chou wrote:
>>>> Hi Samuel,
>>>> Thanks for your reply, I am using AST2500.
>>>> I tried add gpio-hog settings into my device tree, and yes, the GPIO
>>>> works as it defined.
>>>> But all GPIOs defined by gpio-hog can not be modified in user space by
>>>> gpioset / gpioget utility.
>>>> I need to set all GPIOs to pre-defined state and can change it at run
>>>> time.
>>>> Set GPIOs in Device tree is trying to lock it by a fixed direction and
>>>> value.
>>>>
>>>
>>> This problem is probably best taken up with upstream. Currently GPIO
>>> nodes in the devicetree are ignored if they do not have the `gpio-hog`
>>> property:
>>>
>>> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/drivers/gpio/gpiolib-of.c?h=v5.1#n454
>>>
>>> Changing that might be a hard argument - it may impact existing
>>> devicetrees that expect the current behaviour.
>>>
>>> However, I'm interested in what you see wrong with doing this from
>>> userspace? What requirements do you have that would need this to
>>> be done in the kernel?
>>>
>>> Cheers,
>>>
>>> Andrew
>>
>> I don’t really need it to be set in the kernel.
>> Just curious about how openBMC initial all GPIOs, especially for
>> AST2500 that has over 200+ GPIOs.
>
> Well, the GPIOs are muxed with other functionality (LPC, I2C, SPI etc),
> and generally your platform design is going to only use a subset of the
> pins that are left for GPIO functionality, so you don't tend to need to
> initialise the state of 200+ pins. Some take fixed values, in which case
> you can use the kernel's gpio-hog mechanism to configure them.
> Accessing GPIOs at run-time generally means you want to change their
> state, in which case we usually have dedicated applications that handle
> the state transitions based on other events (e.g. "Power-on the host")
> and as such there's no need for a general "GPIO initialisation" script.
> These applications should apply the right state as part of their
> initialisation.
You are right, I should write several applications to control my GPIO state,
Instead of a general GPIO initial script to initial all of it.
Thanks for the advice.
>
> Does that help?
>
> If you have requirements outside of what's outlined above then I can't
> see a problem with using a shell script to drive the libgpiod tools to
> configure the necessary GPIOs, it just depends on your requirements
> and how you feel like doing the system integration.
>
> Cheers,
>
> Andrew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.ozlabs.org/pipermail/openbmc/attachments/20190510/f2f0d3af/attachment-0001.htm>
More information about the openbmc
mailing list