Thread (15 messages) 15 messages, 8 authors, 2017-08-14

Re: [PATCH 000/102] Convert drivers to explicit reset API

From: Dmitry Torokhov <dmitry.torokhov@gmail.com>
Date: 2017-07-20 20:46:17
Also in: alsa-devel, dri-devel, linux-arm-msm, linux-clk, linux-crypto, linux-gpio, linux-i2c, linux-ide, linux-iio, linux-mediatek, linux-mips, linux-mmc, linux-pm, linux-pwm, linux-remoteproc, linux-rockchip, linux-serial, linux-spi, linux-tegra, netdev, nouveau

On Thu, Jul 20, 2017 at 5:55 AM, Philipp Zabel [off-list ref] wrote:
Hi Thomas,

On Thu, 2017-07-20 at 12:36 +0200, Thomas Petazzoni wrote:
quoted
Hello,

On Thu, 20 Jul 2017 11:36:55 +0200, Philipp Zabel wrote:
quoted
quoted
I don't know if it has been discussed in the past, so forgive me if it
has been. Have you considered adding a "int flags" argument to the
existing reset_control_get_*() functions, rather than introducing
separate exclusive variants ?

Indeed, with a "int flags" argument you could in the future add more
variants/behaviors without actually multiplying the number of
functions. Something like the "flags" argument for request_irq() for
example.
I can't find the discussion right now, but I remember we had talked
about this in the past.
Behind the scenes, all the inline API functions already call common
entry points with flags (well, currently separate bool parameters for
shared and optional).
One reason against exposing those as an int flags in the user facing API
is the possibility to accidentally provide a wrong value.
This is a quite strange argument. You could also accidentally use the
wrong variant of the function, just like you could use the wrong flag.
You can't accidentally use no flag at all or a completely bogus value
with the "plethora of inline functions" variant.
quoted
Once again, the next time you have another parameter for those reset
functions, beyond the exclusive/shared variant, you will multiply again
by two the number of functions ? You already have the  exclusive/shared
and optional/mandatory variants, so 4 variants. When you'll add a new
parameter, you'll have 8 variants. Doesn't seem really good.
I'd rather avoid adding more variants, if possible. The complexity
increases regardless of whether the API is expressed as a bunch of
functions or as a single function with a bunch of flags.
quoted
What about reset_control_get(struct device *, const char *, int flags)
to replace all those variants ?
While I like how this looks, unfortunately (devm_)reset_control_get
already exists without the flags, so we can't change to that with a
gentle transition.
This was done for gpiod_get() and its flags argument with horrifying
#define-ry, which thankfully was completely hidden from users.

-- 
Dmitry
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help