lkml.org 
[lkml]   [2020]   [Sep]   [8]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    From
    SubjectRe: [PATCH v4 1/2] pinctrl: single: parse #pinctrl-cells = 2
    Date
    On Tuesday, June 30, 2020 6:33:19 PM PDT Drew Fustini wrote:
    > If "pinctrl-single,pins" has 3 arguments (offset, conf, mux), then
    > pcs_parse_one_pinctrl_entry() does an OR operation on conf and mux to
    > get the value to store in the register.


    > - vals[found].val = pinctrl_spec.args[1];
    > +
    > + switch (pinctrl_spec.args_count) {
    > + case 2:
    > + vals[found].val = pinctrl_spec.args[1];
    > + break;
    > + case 3:
    > + vals[found].val = (pinctrl_spec.args[1] |
    pinctrl_spec.args[2]);
    > + break;
    > + }
    >
    > dev_dbg(pcs->dev, "%pOFn index: 0x%x value: 0x%x\n",
    > pinctrl_spec.np, offset,
    pinctrl_spec.args[1]);

    If #pinctrl-cells value is greater than 2, nothing will set vals[found].val to
    anything other than zero (from when it's calloc'ed) and the pinctrl will
    silently be programmed to zero.

    The debug printout was not change to print vals[found].val, so it will
    continue to print the value of the 2nd cell.

    The result is that a #pinctrl-cells of 3 will produce no warning or error,
    program the pinctrl to zero, whilst at the same time emit debug log messages
    that it is programming the expected values.

    The device tree documentation still states that #pinctrl-cells must be 1 when
    using pinctrl-single,pins. This new special case of ORing two values is not
    documented.



    \
     
     \ /
      Last update: 2020-09-09 02:02    [W:2.654 / U:0.612 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site