Re: libgpiod gpiod_line_request output and keep existing value

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



pt., 6 mar 2020 o 14:45 Mark Deneen <mdeneen@xxxxxxxxx> napisał(a):
>
> Hi Bartosz,
>
> Thanks for the response, it is greatly appreciated. I've added a few
> comments below.
>
> On Fri, Mar 6, 2020 at 6:50 AM Bartosz Golaszewski <brgl@xxxxxxxx> wrote:
> >
> > czw., 5 mar 2020 o 15:57 Mark Deneen <mdeneen@xxxxxxxxx> napisał(a):
> > >
> > > Is it possible to use gpiod_line_request to set a given line as an
> > > output but retain the current state of the line?  I can not use
> > > gpiod_line_get_value to query the state since the line in question has
> > > not been requested yet.
> >
> > No, because it doesn't make sense. If you're driving the line, you
> > define its state.
>
> I can test this, but does the line state reset when the chip is closed?
>

This depends on your HW and the kernel driver. If the pin is pulled
high/low than it will revert to the default state. If it floats than
its state may be retained.

> > >
> > > Let's say that I have a userspace process which sets a gpio to high
> > > and I restart the process.  I would like for the output to remain high
> > > when I request the line again in the new process.  This was possible
> > > with gpiolib+sysfs, is it possible with libgpiod?
> > >
> >
> > This was rather a side effect of sysfs keeping the line exported
> > without any user-space process controlling it. This is not the case
> > with a character device where if the process exits, all resources are
> > freed ie. GPIOs are tied to processes rather than to a sysfs
> > interface.
>
> I understand.  For some purposes this is a step backward although it
> is definitely far more deterministic and that's probably a good thing.
>
> Let's say, for example, that a GPIO output is connected to a circuit
> which controls a relay.  My process initialzes this gpio and engages
> the relay.  At some point this process is restarted, possibly due to a
> new version of the software being installed, and I wish for the relay
> to remain engaged during this operation.  I can do this with the sysfs
> interface by initializing the state to a predetermined value if the
> direction had not been set to output yet.  With libgpiod I would have
> to record the last state of the gpio somewhere and use this value when
> requesting the line.
>
> Should I be writing a kernel module instead of using libgpiod if I
> need this sort of control?

Depends on your use-case. Do you have a specific kernel subsystem in
mind? What would the role of this kernel driver be?

Bart




[Index of Archives]     [Linux SPI]     [Linux Kernel]     [Linux ARM (vger)]     [Linux ARM MSM]     [Linux Omap]     [Linux Arm]     [Linux Tegra]     [Fedora ARM]     [Linux for Samsung SOC]     [eCos]     [Linux Fastboot]     [Gcc Help]     [Git]     [DCCP]     [IETF Announce]     [Security]     [Linux MIPS]     [Yosemite Campsites]

  Powered by Linux