Lines Matching refs:data
230 static int bmc150_magn_set_power_mode(struct bmc150_magn_data *data, in bmc150_magn_set_power_mode() argument
238 ret = regmap_update_bits(data->regmap, BMC150_MAGN_REG_POWER, in bmc150_magn_set_power_mode()
245 return regmap_update_bits(data->regmap, in bmc150_magn_set_power_mode()
251 return regmap_update_bits(data->regmap, in bmc150_magn_set_power_mode()
261 static int bmc150_magn_set_power_state(struct bmc150_magn_data *data, bool on) in bmc150_magn_set_power_state() argument
267 ret = pm_runtime_get_sync(&data->client->dev); in bmc150_magn_set_power_state()
269 pm_runtime_mark_last_busy(&data->client->dev); in bmc150_magn_set_power_state()
270 ret = pm_runtime_put_autosuspend(&data->client->dev); in bmc150_magn_set_power_state()
274 dev_err(&data->client->dev, in bmc150_magn_set_power_state()
277 pm_runtime_put_noidle(&data->client->dev); in bmc150_magn_set_power_state()
286 static int bmc150_magn_get_odr(struct bmc150_magn_data *data, int *val) in bmc150_magn_get_odr() argument
291 ret = regmap_read(data->regmap, BMC150_MAGN_REG_OPMODE_ODR, ®_val); in bmc150_magn_get_odr()
305 static int bmc150_magn_set_odr(struct bmc150_magn_data *data, int val) in bmc150_magn_set_odr() argument
312 ret = regmap_update_bits(data->regmap, in bmc150_magn_set_odr()
327 static int bmc150_magn_set_max_odr(struct bmc150_magn_data *data, int rep_xy, in bmc150_magn_set_max_odr() argument
333 ret = regmap_read(data->regmap, BMC150_MAGN_REG_REP_XY, in bmc150_magn_set_max_odr()
340 ret = regmap_read(data->regmap, BMC150_MAGN_REG_REP_Z, in bmc150_magn_set_max_odr()
347 ret = bmc150_magn_get_odr(data, &odr); in bmc150_magn_set_max_odr()
354 dev_err(&data->client->dev, in bmc150_magn_set_max_odr()
359 data->max_odr = max_odr; in bmc150_magn_set_max_odr()
428 static int bmc150_magn_read_xyz(struct bmc150_magn_data *data, s32 *buffer) in bmc150_magn_read_xyz() argument
436 ret = regmap_bulk_read(data->regmap, BMC150_MAGN_REG_X_L, in bmc150_magn_read_xyz()
446 ret = regmap_bulk_read(data->regmap, BMC150_MAGN_REG_TRIM_START, in bmc150_magn_read_xyz()
462 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_read_raw() local
470 mutex_lock(&data->mutex); in bmc150_magn_read_raw()
472 ret = bmc150_magn_set_power_state(data, true); in bmc150_magn_read_raw()
474 mutex_unlock(&data->mutex); in bmc150_magn_read_raw()
478 ret = bmc150_magn_read_xyz(data, values); in bmc150_magn_read_raw()
480 bmc150_magn_set_power_state(data, false); in bmc150_magn_read_raw()
481 mutex_unlock(&data->mutex); in bmc150_magn_read_raw()
486 ret = bmc150_magn_set_power_state(data, false); in bmc150_magn_read_raw()
488 mutex_unlock(&data->mutex); in bmc150_magn_read_raw()
492 mutex_unlock(&data->mutex); in bmc150_magn_read_raw()
504 ret = bmc150_magn_get_odr(data, val); in bmc150_magn_read_raw()
512 ret = regmap_read(data->regmap, BMC150_MAGN_REG_REP_XY, in bmc150_magn_read_raw()
519 ret = regmap_read(data->regmap, BMC150_MAGN_REG_REP_Z, in bmc150_magn_read_raw()
537 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_write_raw() local
542 if (val > data->max_odr) in bmc150_magn_write_raw()
544 mutex_lock(&data->mutex); in bmc150_magn_write_raw()
545 ret = bmc150_magn_set_odr(data, val); in bmc150_magn_write_raw()
546 mutex_unlock(&data->mutex); in bmc150_magn_write_raw()
554 mutex_lock(&data->mutex); in bmc150_magn_write_raw()
555 ret = bmc150_magn_set_max_odr(data, val, 0, 0); in bmc150_magn_write_raw()
557 mutex_unlock(&data->mutex); in bmc150_magn_write_raw()
560 ret = regmap_update_bits(data->regmap, in bmc150_magn_write_raw()
565 mutex_unlock(&data->mutex); in bmc150_magn_write_raw()
570 mutex_lock(&data->mutex); in bmc150_magn_write_raw()
571 ret = bmc150_magn_set_max_odr(data, 0, val, 0); in bmc150_magn_write_raw()
573 mutex_unlock(&data->mutex); in bmc150_magn_write_raw()
576 ret = regmap_update_bits(data->regmap, in bmc150_magn_write_raw()
581 mutex_unlock(&data->mutex); in bmc150_magn_write_raw()
596 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_show_samp_freq_avail() local
601 if (bmc150_magn_samp_freq_table[i].freq > data->max_odr) in bmc150_magn_show_samp_freq_avail()
662 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_trigger_handler() local
665 mutex_lock(&data->mutex); in bmc150_magn_trigger_handler()
666 ret = bmc150_magn_read_xyz(data, data->buffer); in bmc150_magn_trigger_handler()
670 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in bmc150_magn_trigger_handler()
674 mutex_unlock(&data->mutex); in bmc150_magn_trigger_handler()
680 static int bmc150_magn_init(struct bmc150_magn_data *data) in bmc150_magn_init() argument
685 ret = bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, in bmc150_magn_init()
688 dev_err(&data->client->dev, in bmc150_magn_init()
693 ret = regmap_read(data->regmap, BMC150_MAGN_REG_CHIP_ID, &chip_id); in bmc150_magn_init()
695 dev_err(&data->client->dev, "Failed reading chip id\n"); in bmc150_magn_init()
699 dev_err(&data->client->dev, "Invalid chip id 0x%x\n", chip_id); in bmc150_magn_init()
703 dev_dbg(&data->client->dev, "Chip id %x\n", chip_id); in bmc150_magn_init()
706 ret = bmc150_magn_set_odr(data, preset.odr); in bmc150_magn_init()
708 dev_err(&data->client->dev, "Failed to set ODR to %d\n", in bmc150_magn_init()
713 ret = regmap_write(data->regmap, BMC150_MAGN_REG_REP_XY, in bmc150_magn_init()
716 dev_err(&data->client->dev, "Failed to set REP XY to %d\n", in bmc150_magn_init()
721 ret = regmap_write(data->regmap, BMC150_MAGN_REG_REP_Z, in bmc150_magn_init()
724 dev_err(&data->client->dev, "Failed to set REP Z to %d\n", in bmc150_magn_init()
729 ret = bmc150_magn_set_max_odr(data, preset.rep_xy, preset.rep_z, in bmc150_magn_init()
734 ret = bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_NORMAL, in bmc150_magn_init()
737 dev_err(&data->client->dev, "Failed to power on device\n"); in bmc150_magn_init()
744 bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); in bmc150_magn_init()
748 static int bmc150_magn_reset_intr(struct bmc150_magn_data *data) in bmc150_magn_reset_intr() argument
756 return regmap_read(data->regmap, BMC150_MAGN_REG_X_L, &tmp); in bmc150_magn_reset_intr()
762 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_trig_try_reen() local
765 if (!data->dready_trigger_on) in bmc150_magn_trig_try_reen()
768 mutex_lock(&data->mutex); in bmc150_magn_trig_try_reen()
769 ret = bmc150_magn_reset_intr(data); in bmc150_magn_trig_try_reen()
770 mutex_unlock(&data->mutex); in bmc150_magn_trig_try_reen()
779 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_data_rdy_trigger_set_state() local
782 mutex_lock(&data->mutex); in bmc150_magn_data_rdy_trigger_set_state()
783 if (state == data->dready_trigger_on) in bmc150_magn_data_rdy_trigger_set_state()
786 ret = regmap_update_bits(data->regmap, BMC150_MAGN_REG_INT_DRDY, in bmc150_magn_data_rdy_trigger_set_state()
792 data->dready_trigger_on = state; in bmc150_magn_data_rdy_trigger_set_state()
795 ret = bmc150_magn_reset_intr(data); in bmc150_magn_data_rdy_trigger_set_state()
799 mutex_unlock(&data->mutex); in bmc150_magn_data_rdy_trigger_set_state()
804 mutex_unlock(&data->mutex); in bmc150_magn_data_rdy_trigger_set_state()
816 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_buffer_preenable() local
818 return bmc150_magn_set_power_state(data, true); in bmc150_magn_buffer_preenable()
823 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_buffer_postdisable() local
825 return bmc150_magn_set_power_state(data, false); in bmc150_magn_buffer_postdisable()
849 struct bmc150_magn_data *data; in bmc150_magn_probe() local
854 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in bmc150_magn_probe()
858 data = iio_priv(indio_dev); in bmc150_magn_probe()
860 data->client = client; in bmc150_magn_probe()
869 mutex_init(&data->mutex); in bmc150_magn_probe()
870 data->regmap = devm_regmap_init_i2c(client, &bmc150_magn_regmap_config); in bmc150_magn_probe()
871 if (IS_ERR(data->regmap)) { in bmc150_magn_probe()
873 return PTR_ERR(data->regmap); in bmc150_magn_probe()
876 ret = bmc150_magn_init(data); in bmc150_magn_probe()
889 data->dready_trig = devm_iio_trigger_alloc(&client->dev, in bmc150_magn_probe()
893 if (!data->dready_trig) { in bmc150_magn_probe()
899 data->dready_trig->dev.parent = &client->dev; in bmc150_magn_probe()
900 data->dready_trig->ops = &bmc150_magn_trigger_ops; in bmc150_magn_probe()
901 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in bmc150_magn_probe()
902 ret = iio_trigger_register(data->dready_trig); in bmc150_magn_probe()
913 data->dready_trig); in bmc150_magn_probe()
956 free_irq(client->irq, data->dready_trig); in bmc150_magn_probe()
958 if (data->dready_trig) in bmc150_magn_probe()
959 iio_trigger_unregister(data->dready_trig); in bmc150_magn_probe()
961 bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); in bmc150_magn_probe()
968 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_remove() local
978 free_irq(data->client->irq, data->dready_trig); in bmc150_magn_remove()
980 if (data->dready_trig) in bmc150_magn_remove()
981 iio_trigger_unregister(data->dready_trig); in bmc150_magn_remove()
983 mutex_lock(&data->mutex); in bmc150_magn_remove()
984 bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SUSPEND, true); in bmc150_magn_remove()
985 mutex_unlock(&data->mutex); in bmc150_magn_remove()
994 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_runtime_suspend() local
997 mutex_lock(&data->mutex); in bmc150_magn_runtime_suspend()
998 ret = bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, in bmc150_magn_runtime_suspend()
1000 mutex_unlock(&data->mutex); in bmc150_magn_runtime_suspend()
1002 dev_err(&data->client->dev, "powering off device failed\n"); in bmc150_magn_runtime_suspend()
1014 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_runtime_resume() local
1016 return bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_NORMAL, in bmc150_magn_runtime_resume()
1025 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_suspend() local
1028 mutex_lock(&data->mutex); in bmc150_magn_suspend()
1029 ret = bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_SLEEP, in bmc150_magn_suspend()
1031 mutex_unlock(&data->mutex); in bmc150_magn_suspend()
1039 struct bmc150_magn_data *data = iio_priv(indio_dev); in bmc150_magn_resume() local
1042 mutex_lock(&data->mutex); in bmc150_magn_resume()
1043 ret = bmc150_magn_set_power_mode(data, BMC150_MAGN_POWER_MODE_NORMAL, in bmc150_magn_resume()
1045 mutex_unlock(&data->mutex); in bmc150_magn_resume()