Lines Matching full:data

138 static int bmg160_set_mode(struct bmg160_data *data, u8 mode)  in bmg160_set_mode()  argument
140 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_mode()
143 ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode); in bmg160_set_mode()
164 static int bmg160_set_bw(struct bmg160_data *data, int val) in bmg160_set_bw() argument
166 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_bw()
174 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits); in bmg160_set_bw()
183 static int bmg160_get_filter(struct bmg160_data *data, int *val) in bmg160_get_filter() argument
185 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_filter()
190 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits); in bmg160_get_filter()
210 static int bmg160_set_filter(struct bmg160_data *data, int val) in bmg160_set_filter() argument
212 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_filter()
221 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, in bmg160_set_filter()
231 static int bmg160_chip_init(struct bmg160_data *data) in bmg160_chip_init() argument
233 struct device *dev = regmap_get_device(data->regmap); in bmg160_chip_init()
241 regmap_write(data->regmap, BMG160_GYRO_REG_RESET, in bmg160_chip_init()
245 ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val); in bmg160_chip_init()
257 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_chip_init()
265 ret = bmg160_set_bw(data, BMG160_DEF_BW); in bmg160_chip_init()
270 ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS); in bmg160_chip_init()
275 data->dps_range = BMG160_RANGE_500DPS; in bmg160_chip_init()
277 ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val); in bmg160_chip_init()
282 data->slope_thres = val; in bmg160_chip_init()
285 ret = regmap_clear_bits(data->regmap, BMG160_REG_INT_EN_1, in bmg160_chip_init()
292 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_chip_init()
304 static int bmg160_set_power_state(struct bmg160_data *data, bool on) in bmg160_set_power_state() argument
307 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_power_state()
330 static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data, in bmg160_setup_any_motion_interrupt() argument
333 struct device *dev = regmap_get_device(data->regmap); in bmg160_setup_any_motion_interrupt()
337 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0, in bmg160_setup_any_motion_interrupt()
348 ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES, in bmg160_setup_any_motion_interrupt()
349 data->slope_thres); in bmg160_setup_any_motion_interrupt()
355 ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR, in bmg160_setup_any_motion_interrupt()
364 * New data interrupt is always non-latched, in bmg160_setup_any_motion_interrupt()
368 if (!data->dready_trigger_on) { in bmg160_setup_any_motion_interrupt()
369 ret = regmap_write(data->regmap, in bmg160_setup_any_motion_interrupt()
379 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_any_motion_interrupt()
383 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_any_motion_interrupt()
394 static int bmg160_setup_new_data_interrupt(struct bmg160_data *data, in bmg160_setup_new_data_interrupt() argument
397 struct device *dev = regmap_get_device(data->regmap); in bmg160_setup_new_data_interrupt()
401 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1, in bmg160_setup_new_data_interrupt()
410 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
418 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_new_data_interrupt()
423 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
431 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_new_data_interrupt()
442 static int bmg160_get_bw(struct bmg160_data *data, int *val) in bmg160_get_bw() argument
444 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_bw()
449 ret = regmap_read(data->regmap, BMG160_REG_PMU_BW, &bw_bits); in bmg160_get_bw()
468 static int bmg160_set_scale(struct bmg160_data *data, int val) in bmg160_set_scale() argument
470 struct device *dev = regmap_get_device(data->regmap); in bmg160_set_scale()
475 ret = regmap_write(data->regmap, BMG160_REG_RANGE, in bmg160_set_scale()
481 data->dps_range = bmg160_scale_table[i].dps_range; in bmg160_set_scale()
489 static int bmg160_get_temp(struct bmg160_data *data, int *val) in bmg160_get_temp() argument
491 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_temp()
495 mutex_lock(&data->mutex); in bmg160_get_temp()
496 ret = bmg160_set_power_state(data, true); in bmg160_get_temp()
498 mutex_unlock(&data->mutex); in bmg160_get_temp()
502 ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val); in bmg160_get_temp()
505 bmg160_set_power_state(data, false); in bmg160_get_temp()
506 mutex_unlock(&data->mutex); in bmg160_get_temp()
511 ret = bmg160_set_power_state(data, false); in bmg160_get_temp()
512 mutex_unlock(&data->mutex); in bmg160_get_temp()
519 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val) in bmg160_get_axis() argument
521 struct device *dev = regmap_get_device(data->regmap); in bmg160_get_axis()
525 mutex_lock(&data->mutex); in bmg160_get_axis()
526 ret = bmg160_set_power_state(data, true); in bmg160_get_axis()
528 mutex_unlock(&data->mutex); in bmg160_get_axis()
532 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val, in bmg160_get_axis()
536 bmg160_set_power_state(data, false); in bmg160_get_axis()
537 mutex_unlock(&data->mutex); in bmg160_get_axis()
542 ret = bmg160_set_power_state(data, false); in bmg160_get_axis()
543 mutex_unlock(&data->mutex); in bmg160_get_axis()
554 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_raw() local
561 return bmg160_get_temp(data, val); in bmg160_read_raw()
566 return bmg160_get_axis(data, chan->scan_index, in bmg160_read_raw()
578 return bmg160_get_filter(data, val); in bmg160_read_raw()
590 data->dps_range) { in bmg160_read_raw()
603 mutex_lock(&data->mutex); in bmg160_read_raw()
604 ret = bmg160_get_bw(data, val); in bmg160_read_raw()
605 mutex_unlock(&data->mutex); in bmg160_read_raw()
616 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_raw() local
621 mutex_lock(&data->mutex); in bmg160_write_raw()
629 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
631 mutex_unlock(&data->mutex); in bmg160_write_raw()
634 ret = bmg160_set_bw(data, val); in bmg160_write_raw()
636 bmg160_set_power_state(data, false); in bmg160_write_raw()
637 mutex_unlock(&data->mutex); in bmg160_write_raw()
640 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
641 mutex_unlock(&data->mutex); in bmg160_write_raw()
647 mutex_lock(&data->mutex); in bmg160_write_raw()
648 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
650 bmg160_set_power_state(data, false); in bmg160_write_raw()
651 mutex_unlock(&data->mutex); in bmg160_write_raw()
654 ret = bmg160_set_filter(data, val); in bmg160_write_raw()
656 bmg160_set_power_state(data, false); in bmg160_write_raw()
657 mutex_unlock(&data->mutex); in bmg160_write_raw()
660 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
661 mutex_unlock(&data->mutex); in bmg160_write_raw()
667 mutex_lock(&data->mutex); in bmg160_write_raw()
669 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
671 mutex_unlock(&data->mutex); in bmg160_write_raw()
674 ret = bmg160_set_scale(data, val2); in bmg160_write_raw()
676 bmg160_set_power_state(data, false); in bmg160_write_raw()
677 mutex_unlock(&data->mutex); in bmg160_write_raw()
680 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
681 mutex_unlock(&data->mutex); in bmg160_write_raw()
697 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event() local
702 *val = data->slope_thres & BMG160_SLOPE_THRES_MASK; in bmg160_read_event()
718 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event() local
722 if (data->ev_enable_state) in bmg160_write_event()
724 data->slope_thres &= ~BMG160_SLOPE_THRES_MASK; in bmg160_write_event()
725 data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK); in bmg160_write_event()
740 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event_config() local
742 return data->ev_enable_state; in bmg160_read_event_config()
751 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event_config() local
754 if (state && data->ev_enable_state) in bmg160_write_event_config()
757 mutex_lock(&data->mutex); in bmg160_write_event_config()
759 if (!state && data->motion_trigger_on) { in bmg160_write_event_config()
760 data->ev_enable_state = 0; in bmg160_write_event_config()
761 mutex_unlock(&data->mutex); in bmg160_write_event_config()
773 ret = bmg160_set_power_state(data, state); in bmg160_write_event_config()
775 mutex_unlock(&data->mutex); in bmg160_write_event_config()
779 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_write_event_config()
781 bmg160_set_power_state(data, false); in bmg160_write_event_config()
782 mutex_unlock(&data->mutex); in bmg160_write_event_config()
786 data->ev_enable_state = state; in bmg160_write_event_config()
787 mutex_unlock(&data->mutex); in bmg160_write_event_config()
796 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_get_mount_matrix() local
798 return &data->orientation; in bmg160_get_mount_matrix()
880 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trigger_handler() local
883 mutex_lock(&data->mutex); in bmg160_trigger_handler()
884 ret = regmap_bulk_read(data->regmap, BMG160_REG_XOUT_L, in bmg160_trigger_handler()
885 data->scan.chans, AXIS_MAX * 2); in bmg160_trigger_handler()
886 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
890 iio_push_to_buffers_with_timestamp(indio_dev, &data->scan, in bmg160_trigger_handler()
901 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trig_reen() local
902 struct device *dev = regmap_get_device(data->regmap); in bmg160_trig_reen()
905 /* new data interrupts don't need ack */ in bmg160_trig_reen()
906 if (data->dready_trigger_on) in bmg160_trig_reen()
910 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_trig_reen()
921 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trigger_set_state() local
924 mutex_lock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
926 if (!state && data->ev_enable_state && data->motion_trigger_on) { in bmg160_data_rdy_trigger_set_state()
927 data->motion_trigger_on = false; in bmg160_data_rdy_trigger_set_state()
928 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
936 ret = bmg160_set_power_state(data, state); in bmg160_data_rdy_trigger_set_state()
938 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
941 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
942 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
944 ret = bmg160_setup_new_data_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
946 bmg160_set_power_state(data, false); in bmg160_data_rdy_trigger_set_state()
947 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
950 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
951 data->motion_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
953 data->dready_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
955 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
968 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_event_handler() local
969 struct device *dev = regmap_get_device(data->regmap); in bmg160_event_handler()
974 ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val); in bmg160_event_handler()
1008 if (!data->dready_trigger_on) { in bmg160_event_handler()
1009 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_event_handler()
1022 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trig_poll() local
1024 if (data->dready_trigger_on) in bmg160_data_rdy_trig_poll()
1025 iio_trigger_poll(data->dready_trig); in bmg160_data_rdy_trig_poll()
1026 else if (data->motion_trigger_on) in bmg160_data_rdy_trig_poll()
1027 iio_trigger_poll(data->motion_trig); in bmg160_data_rdy_trig_poll()
1029 if (data->ev_enable_state) in bmg160_data_rdy_trig_poll()
1038 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_preenable() local
1040 return bmg160_set_power_state(data, true); in bmg160_buffer_preenable()
1045 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_postdisable() local
1047 return bmg160_set_power_state(data, false); in bmg160_buffer_postdisable()
1059 struct bmg160_data *data; in bmg160_core_probe() local
1063 indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); in bmg160_core_probe()
1067 data = iio_priv(indio_dev); in bmg160_core_probe()
1069 data->irq = irq; in bmg160_core_probe()
1070 data->regmap = regmap; in bmg160_core_probe()
1077 ret = iio_read_mount_matrix(dev, &data->orientation); in bmg160_core_probe()
1081 ret = bmg160_chip_init(data); in bmg160_core_probe()
1085 mutex_init(&data->mutex); in bmg160_core_probe()
1094 if (data->irq > 0) { in bmg160_core_probe()
1096 data->irq, in bmg160_core_probe()
1105 data->dready_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1109 if (!data->dready_trig) in bmg160_core_probe()
1112 data->motion_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1116 if (!data->motion_trig) in bmg160_core_probe()
1119 data->dready_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1120 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in bmg160_core_probe()
1121 ret = iio_trigger_register(data->dready_trig); in bmg160_core_probe()
1125 data->motion_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1126 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in bmg160_core_probe()
1127 ret = iio_trigger_register(data->motion_trig); in bmg160_core_probe()
1129 data->motion_trig = NULL; in bmg160_core_probe()
1167 if (data->dready_trig) in bmg160_core_probe()
1168 iio_trigger_unregister(data->dready_trig); in bmg160_core_probe()
1169 if (data->motion_trig) in bmg160_core_probe()
1170 iio_trigger_unregister(data->motion_trig); in bmg160_core_probe()
1179 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_core_remove() local
1189 if (data->dready_trig) { in bmg160_core_remove()
1190 iio_trigger_unregister(data->dready_trig); in bmg160_core_remove()
1191 iio_trigger_unregister(data->motion_trig); in bmg160_core_remove()
1194 mutex_lock(&data->mutex); in bmg160_core_remove()
1195 bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND); in bmg160_core_remove()
1196 mutex_unlock(&data->mutex); in bmg160_core_remove()
1204 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_suspend() local
1206 mutex_lock(&data->mutex); in bmg160_suspend()
1207 bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_suspend()
1208 mutex_unlock(&data->mutex); in bmg160_suspend()
1216 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_resume() local
1218 mutex_lock(&data->mutex); in bmg160_resume()
1219 if (data->dready_trigger_on || data->motion_trigger_on || in bmg160_resume()
1220 data->ev_enable_state) in bmg160_resume()
1221 bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_resume()
1222 mutex_unlock(&data->mutex); in bmg160_resume()
1232 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_suspend() local
1235 ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_runtime_suspend()
1247 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_resume() local
1250 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_runtime_resume()