static int mma8452_change_config(struct mma8452_data *data, u8 reg, u8 val) { int ret; mutex_lock(&data->lock); /* config can only be changed when in standby */ 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; ret = 0; fail: mutex_unlock(&data->lock); return ret; }
static int mma8452_remove(struct i2c_client *client) { struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); iio_triggered_buffer_cleanup(indio_dev); mma8452_standby(iio_priv(indio_dev)); return 0; }
static int mma8452_runtime_suspend(struct device *dev) { struct iio_dev *indio_dev = i2c_get_clientdata(to_i2c_client(dev)); struct mma8452_data *data = iio_priv(indio_dev); int ret; mutex_lock(&data->lock); ret = mma8452_standby(data); mutex_unlock(&data->lock); if (ret < 0) { dev_err(&data->client->dev, "powering off device failed\n"); return -EAGAIN; } return 0; }
static int mma8452_remove(struct i2c_client *client) { struct iio_dev *indio_dev = i2c_get_clientdata(client); iio_device_unregister(indio_dev); pm_runtime_disable(&client->dev); pm_runtime_set_suspended(&client->dev); pm_runtime_put_noidle(&client->dev); iio_triggered_buffer_cleanup(indio_dev); mma8452_trigger_cleanup(indio_dev); mma8452_standby(iio_priv(indio_dev)); return 0; }
static int mma8452_suspend(struct device *dev) { return mma8452_standby(iio_priv(i2c_get_clientdata( to_i2c_client(dev)))); }