Re: gpiolib: why does gpio_set_bias() suppress ENOTSUPP?

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

 



On Thu, Mar 31, 2022 at 10:52:03AM +0800, Kent Gibson wrote:
> Hi all,

+Cc: Hans

> It has recently come to my attention that the setting of bias by the
> cdev uAPI is a best effort operation that quietly succeeds if bias is
> not supported by the hardware. That strikes me as being a bug.
> It seems I was aware of this when adding bias to the uAPI and intended
> to fix it, as shown in the comments of v4 of the corrsponding patch
> series[1]:

> > > The setting of bias is performed by gpio_set_bias, which is hooked into
> > > gpiod_direction_input and gpiod_direction_output.  It extends the setting
> > > of bias that was already present in gpiod_direction_input.
> > > In keeping with the existing behaviour, the bias is set on a best-effort
> > > basis - no error is returned to the user if an error is returned by the
> > > pinctrl driver.  Returning an error makes sense to me, particularly for
> > > the uAPI, but that conflicts with the existing gpiod_direction_input
> > > behaviour. So leave as best-effort, change gpiod_direction_input
> > > behaviour, or restructure to support both behaviours?
> 
> > Thomas: is there any reason not to check the return value of these
> > calls for errors other than -EOPNOTSUPP?
> 
> that being my comment, and Bart's followup question to Thomas.
> 
> That went unanswered AFAICT and the issue subsequently fell through the
> cracks.

My understanding that all constraints we have in kernel is due to
in-kernel use and possible (non-critical) issues.

For example, driver can set only selected values of bias. What to do when
the given value is not supported by hardware?

Followup question: Why do you think your choice is any better than another
one?

> I would like to fix the uAPI such that if the hardware does not support
> the requested configuration, or if it can't be emulated in the kernel,
> that fact is returned to userspace - bias being the sole counter example
> as far as I am aware.
> 
> The simplest fix involves changing gpio_set_bias() to call gpio_set_config()
> rather than gpio_set_config_with_argument_optional(), but as mentioned in
> my comment above, that would impact any existing users of
> gpiod_direction_input() that assume the best-effort behaviour.

Exactly, best effort is to supply it to the driver and <s>pray</s> hope for
the best form the hardware driver.

> I haven't been able to find any such usage, but that could just be proof
> that I'm not looking in the right place.
> Any input on that front would be greatly appreciated.
> 
> Also, fixing this as mentioned could be considered an uAPI ABI change.
> Is this a bug, so that is ok, or do I need to consider adding a strict
> mode flag or somesuch to the API?
> 
> Bart, I'm also hoping to extend the gpiosim to optionally not support
> bias in gc->set_config() to test this case.
> Any suggstions on a configfs interface extension to do that?
> 
> My apologies for the verbage rather than proffering a patch, but the
> different paths have vastly different costs, and the simplest solution
> has the potential to introduce breakage.

> [1] https://www.spinics.net/lists/linux-gpio/msg43579.html

-- 
With Best Regards,
Andy Shevchenko





[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