lkml.org 
[lkml]   [2017]   [Apr]   [21]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    SubjectRe: [PATCH v13 03/10] mux: minimal mux subsystem and gpio-based mux controller
    From
    Date
    On 2017-04-21 16:23, Philipp Zabel wrote:
    > On Thu, 2017-04-13 at 18:43 +0200, Peter Rosin wrote:
    > [...]
    >> +int mux_chip_register(struct mux_chip *mux_chip)
    >> +{
    >> + int i;
    >> + int ret;
    >> +
    >> + for (i = 0; i < mux_chip->controllers; ++i) {
    >> + struct mux_control *mux = &mux_chip->mux[i];
    >> +
    >> + if (mux->idle_state == mux->cached_state)
    >> + continue;
    >
    > I think this should be changed to
    >
    > - if (mux->idle_state == mux->cached_state)
    > + if (mux->idle_state == mux->cached_state ||
    > + mux->idle_state == MUX_IDLE_AS_IS)
    > continue;
    >
    > or the following mux_control_set will be called with state ==
    > MUX_IDLE_AS_IS. Alternatively, mux_control_set should return when passed
    > this value.

    That cannot happen because ->cached_state is initialized to -1
    in mux_chip_alloc, so should always be == MUX_IDLE_AS_IS when
    registering. And drivers are not supposed to touch ->cached_state.
    I.e., ->cached_state is "owned" by the core.

    Cheers,
    peda

    >> + ret = mux_control_set(mux, mux->idle_state);
    >> + if (ret < 0) {
    >> + dev_err(&mux_chip->dev, "unable to set idle state\n");
    >> + return ret;
    >> + }
    >> + }
    >> +
    >> + ret = device_add(&mux_chip->dev);
    >> + if (ret < 0)
    >> + dev_err(&mux_chip->dev,
    >> + "device_add failed in mux_chip_register: %d\n", ret);
    >> + return ret;
    >> +}
    >> +EXPORT_SYMBOL_GPL(mux_chip_register);
    >
    > regards
    > Philipp
    >

    \
     
     \ /
      Last update: 2017-04-21 16:33    [W:4.209 / U:0.124 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site