[PATCH 1/1] of: introduce helper to manage boolean
Simon Glass
sjg at chromium.org
Tue Jul 10 18:53:01 EDT 2012
Hi Scott,
On Tue, Jul 10, 2012 at 11:23 PM, Scott Wood <scottwood at freescale.com>wrote:
> On 07/10/2012 07:10 AM, Simon Glass wrote:
> > Hi,
> >
> > On Tue, Mar 13, 2012 at 5:16 AM, Grant Likely <grant.likely at secretlab.ca
> > <mailto:grant.likely at secretlab.ca>> wrote:
> >
> > On Tue, 13 Mar 2012 04:17:39 +0100, Jean-Christophe PLAGNIOL-VILLARD
> > <plagnioj at jcrosoft.com <mailto:plagnioj at jcrosoft.com>> wrote:
> > > On 14:39 Mon 12 Mar , Scott Wood wrote:
> > > > On 03/09/2012 10:36 AM, Jean-Christophe PLAGNIOL-VILLARD wrote:
> > > > >>>> Ugh. so any value other than 1 returns false? I think
> > that will surprise
> > > > >>>> most people.
> > > > >>>>
> > > > >>>> I don't like this api or binding. If it is a bool
> > property, then why isn't
> > > > >>>> simply testing for the property existance sufficient?
> > > > >>> no if you want to disable it
> > > > >>>
> > > > >>> if a bool is define in the dtsi and want to disable it int
> > the dts
> > > > >>>
> > > > >>> if you we can do the the invert
> > > > >>>
> > > > >>> if !0 => true
> > > > >>>
> > > > >>> is-ok; => true
> > > > >>> is-ok = <val != 0>; => true
> > > > >>> is-ok = <0>; => false
> > > > >>
> > > > >> This is a failure of the dtc tool, not the binding.
> > Accepting this binding
> > > > >> means we have to live with it for a very long time. It needs
> > to be fixed
> > > > >> in dtc instead so that properties can be deleted instead of
> > only modified.
> > > > > I understand your idea but today if you put and value in the
> > property it's true.
> > > > >
> > > > > So is-ok = <0>; is true also which is illogical as in any
> > language a boolean is
> > > > > true (1) or false (0). When I read the property I will
> > understand false not true
> > > >
> > > > You could say similar things about is-ok = "no" or is-ok = "" or
> > is-ok =
> > > > "I'd rather you didn't"... it's expected that violating the
> > binding may
> > > > produce illogical results.
> > > today is most of the binding people use a number whe the want to
> > be able to
> > > delete it and it's the same in most of the promgramming language
> >
> > It isn't yet a big pain point, so there isn't time pressure here.
> > Fixing the tool
> > is the better solution, and since the kernel carries a copy of the
> > tool we don't
> > need to worry about adding a feature that isn't available by the dtc
> > packaged by
> > a distribution.
> >
> > Fixing the tool is the correct thing to do.
> >
> >
> > I just wanted to pick up on this thread. Now in the kernel, absence of a
> > property indicates false, and presence indicates true. This is a kernel
> > convention, nothing to do with the dtb format.
>
> It's an aspect of the device binding, and was used by Open Firmware
> bindings before Linux came up with flat device trees.
>
OK. When I asked about the boolean property on the devicetree-discuss I
understood that no one really cared, and it was a matter for Linux.
>
> Also note that even non-boolean properties can mean something different
> when absent. Sometimes this is a default value; sometimes, like with
> "ranges", it's something that can't be expressed with any value (empty
> ranges means all translations go straight through; no ranges means no
> translation is possible).
>
That's fine, but I'm not sure I understand why that relates to boolean
properties, which currently mean always the same thing (false) when absent.
I don't think there is any intent to change that.
> > I think it is useful to
> > support a boolean with a non-null value which can be 0, meaning true as
> > Jean-Christophe says.
> >
> > My reasons are:
> >
> > 1. dtc does not have a way to delete a property and it isn't clear what
> > syntax could be used there.
>
> Surely some syntax can be created for this. E.g. /delete-prop/ foo;
>
Yes, in fact I saw a patch after sending this email. So for normal values
to change the value we do
prop = <23>;
but for booleans we must do EITHER:
bool;
or
/delete-prop/ bool;
depending on whether we want the make it true or false? Ick.
>
> > It also seems a little brittle to delete a
> > property in one place and define it in another (ordering? confusion when
> > people can't work out why it has gone?). So not only can dtc not do
> > this, but I'm not sure that it should.
>
> I don't see how it's worse than defining it one place and then
> redefining it elsewhere.
>
It seems worse to me, see above. Also if we end up with symbols it will be
impossible to do something like:
bool-property = <WIBBLE_VALUE>;
You will have to do:
if WIBBLE_VALUE == 0
/delete-prop/ bool-property;
#else
bool-property;
#endif
or whatever, or maybe I got that around the wrong way.... Not nice IMO.
(any comments on point 2?)
>
> > 3. Discoverability: it is nice to be able to see the possible options,
> > even if disabled.
>
> This assumes the possible options were known in advance, or that you
> don't maintain compatibility with old device trees when a new option is
> added.
>
You can still add the option with a zero value - or maybe I misunderstand
what you mean.
>
> > In particular, if a boolean value is true, and you
> > later decide with fdtput to turn it off, you effectively remove all
> > trace of it. This could be confusing for those who are looking for
> > available options.
>
> There should still be a "trace of it" in the binding document.
>
Yes true, that's the saving grace.
I'm not even saying that we ever use
bool-prop = <1>;
Clearly that is redundant. I'm just agreeing with Jean-Chrstophe that it
would be nice and clean to do something like:
bool-prop = <0>;
and it will make it false.
Regards,
Simon
>
> -Scott
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20120711/ae4b5d65/attachment-0001.html>
More information about the linux-arm-kernel
mailing list