Lines Matching full:data
136 static int bmg160_set_mode(struct bmg160_data *data, u8 mode) in bmg160_set_mode() argument
138 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_mode()
141 ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode); in bmg160_set_mode()
162 static int bmg160_set_bw(struct bmg160_data *data, int val) in bmg160_set_bw() argument
164 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_bw()
172 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits); in bmg160_set_bw()
181 static int bmg160_get_filter(struct bmg160_data *data, int *val) in bmg160_get_filter() argument
183 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_filter()
188 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits); in bmg160_get_filter()
208 static int bmg160_set_filter(struct bmg160_data *data, int val) in bmg160_set_filter() argument
210 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_filter()
219 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, in bmg160_set_filter()
229 static int bmg160_chip_init(struct bmg160_data *data) in bmg160_chip_init() argument
231 struct device *dev = regmap_get_device(data->regmap); in bmg160_chip_init()
239 regmap_write(data->regmap, BMG160_GYRO_REG_RESET, in bmg160_chip_init()
243 ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val); in bmg160_chip_init()
255 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_chip_init()
263 ret = bmg160_set_bw(data, BMG160_DEF_BW); in bmg160_chip_init()
268 ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS); in bmg160_chip_init()
273 data->dps_range = BMG160_RANGE_500DPS; in bmg160_chip_init()
275 ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val); in bmg160_chip_init()
280 data->slope_thres = val; in bmg160_chip_init()
283 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_EN_1, in bmg160_chip_init()
290 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_chip_init()
302 static int bmg160_set_power_state(struct bmg160_data *data, bool on) in bmg160_set_power_state() argument
305 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_power_state()
328 static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data, in bmg160_setup_any_motion_interrupt() argument
331 struct device *dev = regmap_get_device(data->regmap); in bmg160_setup_any_motion_interrupt()
335 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0, in bmg160_setup_any_motion_interrupt()
346 ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES, in bmg160_setup_any_motion_interrupt()
347 data->slope_thres); in bmg160_setup_any_motion_interrupt()
353 ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR, in bmg160_setup_any_motion_interrupt()
362 * New data interrupt is always non-latched, in bmg160_setup_any_motion_interrupt()
366 if (!data->dready_trigger_on) { in bmg160_setup_any_motion_interrupt()
367 ret = regmap_write(data->regmap, in bmg160_setup_any_motion_interrupt()
377 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_any_motion_interrupt()
381 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_any_motion_interrupt()
392 static int bmg160_setup_new_data_interrupt(struct bmg160_data *data, in bmg160_setup_new_data_interrupt() argument
395 struct device *dev = regmap_get_device(data->regmap); in bmg160_setup_new_data_interrupt()
399 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1, in bmg160_setup_new_data_interrupt()
408 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
416 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_new_data_interrupt()
421 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
429 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_new_data_interrupt()
440 static int bmg160_get_bw(struct bmg160_data *data, int *val) in bmg160_get_bw() argument
442 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_bw()
447 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits); in bmg160_get_bw()
466 static int bmg160_set_scale(struct bmg160_data *data, int val) in bmg160_set_scale() argument
468 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_scale()
473 ret = regmap_write(data->regmap, BMG160_REG_RANGE, in bmg160_set_scale()
479 data->dps_range = bmg160_scale_table[i].dps_range; in bmg160_set_scale()
487 static int bmg160_get_temp(struct bmg160_data *data, int *val) in bmg160_get_temp() argument
489 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_temp()
493 mutex_lock(&data->mutex); in bmg160_get_temp()
494 ret = bmg160_set_power_state(data, true); in bmg160_get_temp()
496 mutex_unlock(&data->mutex); in bmg160_get_temp()
500 ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val); in bmg160_get_temp()
503 bmg160_set_power_state(data, false); in bmg160_get_temp()
504 mutex_unlock(&data->mutex); in bmg160_get_temp()
509 ret = bmg160_set_power_state(data, false); in bmg160_get_temp()
510 mutex_unlock(&data->mutex); in bmg160_get_temp()
517 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val) in bmg160_get_axis() argument
519 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_axis()
523 mutex_lock(&data->mutex); in bmg160_get_axis()
524 ret = bmg160_set_power_state(data, true); in bmg160_get_axis()
526 mutex_unlock(&data->mutex); in bmg160_get_axis()
530 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val, in bmg160_get_axis()
534 bmg160_set_power_state(data, false); in bmg160_get_axis()
535 mutex_unlock(&data->mutex); in bmg160_get_axis()
540 ret = bmg160_set_power_state(data, false); in bmg160_get_axis()
541 mutex_unlock(&data->mutex); in bmg160_get_axis()
552 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_raw() local
559 return bmg160_get_temp(data, val); in bmg160_read_raw()
564 return bmg160_get_axis(data, chan->scan_index, in bmg160_read_raw()
576 return bmg160_get_filter(data, val); in bmg160_read_raw()
588 data->dps_range) { in bmg160_read_raw()
601 mutex_lock(&data->mutex); in bmg160_read_raw()
602 ret = bmg160_get_bw(data, val); in bmg160_read_raw()
603 mutex_unlock(&data->mutex); in bmg160_read_raw()
614 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_raw() local
619 mutex_lock(&data->mutex); in bmg160_write_raw()
627 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
629 mutex_unlock(&data->mutex); in bmg160_write_raw()
632 ret = bmg160_set_bw(data, val); in bmg160_write_raw()
634 bmg160_set_power_state(data, false); in bmg160_write_raw()
635 mutex_unlock(&data->mutex); in bmg160_write_raw()
638 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
639 mutex_unlock(&data->mutex); in bmg160_write_raw()
645 mutex_lock(&data->mutex); in bmg160_write_raw()
646 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
648 bmg160_set_power_state(data, false); in bmg160_write_raw()
649 mutex_unlock(&data->mutex); in bmg160_write_raw()
652 ret = bmg160_set_filter(data, val); in bmg160_write_raw()
654 bmg160_set_power_state(data, false); in bmg160_write_raw()
655 mutex_unlock(&data->mutex); in bmg160_write_raw()
658 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
659 mutex_unlock(&data->mutex); in bmg160_write_raw()
665 mutex_lock(&data->mutex); in bmg160_write_raw()
667 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
669 mutex_unlock(&data->mutex); in bmg160_write_raw()
672 ret = bmg160_set_scale(data, val2); in bmg160_write_raw()
674 bmg160_set_power_state(data, false); in bmg160_write_raw()
675 mutex_unlock(&data->mutex); in bmg160_write_raw()
678 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
679 mutex_unlock(&data->mutex); in bmg160_write_raw()
695 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event() local
700 *val = data->slope_thres & BMG160_SLOPE_THRES_MASK; in bmg160_read_event()
716 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event() local
720 if (data->ev_enable_state) in bmg160_write_event()
722 data->slope_thres &= ~BMG160_SLOPE_THRES_MASK; in bmg160_write_event()
723 data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK); in bmg160_write_event()
738 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event_config() local
740 return data->ev_enable_state; in bmg160_read_event_config()
749 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event_config() local
752 if (state && data->ev_enable_state) in bmg160_write_event_config()
755 mutex_lock(&data->mutex); in bmg160_write_event_config()
757 if (!state && data->motion_trigger_on) { in bmg160_write_event_config()
758 data->ev_enable_state = 0; in bmg160_write_event_config()
759 mutex_unlock(&data->mutex); in bmg160_write_event_config()
771 ret = bmg160_set_power_state(data, state); in bmg160_write_event_config()
773 mutex_unlock(&data->mutex); in bmg160_write_event_config()
777 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_write_event_config()
779 bmg160_set_power_state(data, false); in bmg160_write_event_config()
780 mutex_unlock(&data->mutex); in bmg160_write_event_config()
784 data->ev_enable_state = state; in bmg160_write_event_config()
785 mutex_unlock(&data->mutex); in bmg160_write_event_config()
794 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_get_mount_matrix() local
796 return &data->orientation; in bmg160_get_mount_matrix()
878 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trigger_handler() local
881 mutex_lock(&data->mutex); in bmg160_trigger_handler()
882 ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L, in bmg160_trigger_handler()
883 data->buffer, AXIS_MAX * 2); in bmg160_trigger_handler()
884 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
888 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in bmg160_trigger_handler()
899 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trig_try_reen() local
900 struct device *dev = regmap_get_device(data->regmap); in bmg160_trig_try_reen()
903 /* new data interrupts don't need ack */ in bmg160_trig_try_reen()
904 if (data->dready_trigger_on) in bmg160_trig_try_reen()
908 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_trig_try_reen()
923 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trigger_set_state() local
926 mutex_lock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
928 if (!state && data->ev_enable_state && data->motion_trigger_on) { in bmg160_data_rdy_trigger_set_state()
929 data->motion_trigger_on = false; in bmg160_data_rdy_trigger_set_state()
930 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
938 ret = bmg160_set_power_state(data, state); in bmg160_data_rdy_trigger_set_state()
940 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
943 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
944 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
946 ret = bmg160_setup_new_data_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
948 bmg160_set_power_state(data, false); in bmg160_data_rdy_trigger_set_state()
949 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
952 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
953 data->motion_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
955 data->dready_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
957 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
970 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_event_handler() local
971 struct device *dev = regmap_get_device(data->regmap); in bmg160_event_handler()
976 ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val); in bmg160_event_handler()
1010 if (!data->dready_trigger_on) { in bmg160_event_handler()
1011 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_event_handler()
1024 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trig_poll() local
1026 if (data->dready_trigger_on) in bmg160_data_rdy_trig_poll()
1027 iio_trigger_poll(data->dready_trig); in bmg160_data_rdy_trig_poll()
1028 else if (data->motion_trigger_on) in bmg160_data_rdy_trig_poll()
1029 iio_trigger_poll(data->motion_trig); in bmg160_data_rdy_trig_poll()
1031 if (data->ev_enable_state) in bmg160_data_rdy_trig_poll()
1040 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_preenable() local
1042 return bmg160_set_power_state(data, true); in bmg160_buffer_preenable()
1047 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_postdisable() local
1049 return bmg160_set_power_state(data, false); in bmg160_buffer_postdisable()
1073 struct bmg160_data *data; in bmg160_core_probe() local
1077 indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); in bmg160_core_probe()
1081 data = iio_priv(indio_dev); in bmg160_core_probe()
1083 data->irq = irq; in bmg160_core_probe()
1084 data->regmap = regmap; in bmg160_core_probe()
1087 &data->orientation); in bmg160_core_probe()
1091 ret = bmg160_chip_init(data); in bmg160_core_probe()
1095 mutex_init(&data->mutex); in bmg160_core_probe()
1108 if (data->irq > 0) { in bmg160_core_probe()
1110 data->irq, in bmg160_core_probe()
1119 data->dready_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1123 if (!data->dready_trig) in bmg160_core_probe()
1126 data->motion_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1130 if (!data->motion_trig) in bmg160_core_probe()
1133 data->dready_trig->dev.parent = dev; in bmg160_core_probe()
1134 data->dready_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1135 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in bmg160_core_probe()
1136 ret = iio_trigger_register(data->dready_trig); in bmg160_core_probe()
1140 data->motion_trig->dev.parent = dev; in bmg160_core_probe()
1141 data->motion_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1142 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in bmg160_core_probe()
1143 ret = iio_trigger_register(data->motion_trig); in bmg160_core_probe()
1145 data->motion_trig = NULL; in bmg160_core_probe()
1180 if (data->dready_trig) in bmg160_core_probe()
1181 iio_trigger_unregister(data->dready_trig); in bmg160_core_probe()
1182 if (data->motion_trig) in bmg160_core_probe()
1183 iio_trigger_unregister(data->motion_trig); in bmg160_core_probe()
1192 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_core_remove() local
1202 if (data->dready_trig) { in bmg160_core_remove()
1203 iio_trigger_unregister(data->dready_trig); in bmg160_core_remove()
1204 iio_trigger_unregister(data->motion_trig); in bmg160_core_remove()
1207 mutex_lock(&data->mutex); in bmg160_core_remove()
1208 bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND); in bmg160_core_remove()
1209 mutex_unlock(&data->mutex); in bmg160_core_remove()
1217 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_suspend() local
1219 mutex_lock(&data->mutex); in bmg160_suspend()
1220 bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_suspend()
1221 mutex_unlock(&data->mutex); in bmg160_suspend()
1229 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_resume() local
1231 mutex_lock(&data->mutex); in bmg160_resume()
1232 if (data->dready_trigger_on || data->motion_trigger_on || in bmg160_resume()
1233 data->ev_enable_state) in bmg160_resume()
1234 bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_resume()
1235 mutex_unlock(&data->mutex); in bmg160_resume()
1245 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_suspend() local
1248 ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_runtime_suspend()
1260 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_resume() local
1263 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_runtime_resume()