On 03/03/16 08:24, Martin Kepplinger wrote: > The devices' config registers can only be changed in standby mode. > Up until now the driver just held the device *always* active, so for > changing a config it was *always* necessary to switch to standby. > > For upcoming support for runtime pm, the device can as well be in standby > mode. Instead of putting runtime pm functions in there, just keep the > device in standby if it already is. This section is protected by a lock > after all. > > Signed-off-by: Martin Kepplinger <martink@xxxxxxxxx> > Signed-off-by: Christoph Muellner <christoph.muellner@xxxxxxxxxxxxxxxxxxxxx> Applied to the togreg branch of iio.git - initially pushed out as testing Thanks, Jonathan > --- > drivers/iio/accel/mma8452.c | 35 +++++++++++++++++++++++++++++------ > 1 file changed, 29 insertions(+), 6 deletions(-) > > diff --git a/drivers/iio/accel/mma8452.c b/drivers/iio/accel/mma8452.c > index 17d72bc..9c4a84a 100644 > --- a/drivers/iio/accel/mma8452.c > +++ b/drivers/iio/accel/mma8452.c > @@ -393,24 +393,47 @@ static int mma8452_active(struct mma8452_data *data) > data->ctrl_reg1); > } > > +/* returns >0 if active, 0 if in standby and <0 on error */ > +static int mma8452_is_active(struct mma8452_data *data) > +{ > + int reg; > + > + reg = i2c_smbus_read_byte_data(data->client, MMA8452_CTRL_REG1); > + if (reg < 0) > + return reg; > + > + return reg & MMA8452_CTRL_ACTIVE; > +} > + > static int mma8452_change_config(struct mma8452_data *data, u8 reg, u8 val) > { > int ret; > + int is_active; > > mutex_lock(&data->lock); > > - /* config can only be changed when in standby */ > - ret = mma8452_standby(data); > - if (ret < 0) > + is_active = mma8452_is_active(data); > + if (is_active < 0) { > + ret = is_active; > goto fail; > + } > + > + /* config can only be changed when in standby */ > + if (is_active > 0) { > + ret = mma8452_standby(data); > + if (ret < 0) > + goto fail; > + } > > ret = i2c_smbus_write_byte_data(data->client, reg, val); > if (ret < 0) > goto fail; > > - ret = mma8452_active(data); > - if (ret < 0) > - goto fail; > + if (is_active > 0) { > + ret = mma8452_active(data); > + if (ret < 0) > + goto fail; > + } > > ret = 0; > fail: > -- To unsubscribe from this list: send the line "unsubscribe linux-iio" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html