Lines Matching refs:data

139 static int bmg160_set_mode(struct bmg160_data *data, u8 mode)  in bmg160_set_mode()  argument
143 ret = regmap_write(data->regmap, BMG160_REG_PMU_LPW, mode); in bmg160_set_mode()
145 dev_err(data->dev, "Error writing reg_pmu_lpw\n"); in bmg160_set_mode()
164 static int bmg160_set_bw(struct bmg160_data *data, int val) in bmg160_set_bw() argument
173 ret = regmap_write(data->regmap, BMG160_REG_PMU_BW, bw_bits); in bmg160_set_bw()
175 dev_err(data->dev, "Error writing reg_pmu_bw\n"); in bmg160_set_bw()
179 data->bw_bits = bw_bits; in bmg160_set_bw()
184 static int bmg160_chip_init(struct bmg160_data *data) in bmg160_chip_init() argument
189 ret = regmap_read(data->regmap, BMG160_REG_CHIP_ID, &val); in bmg160_chip_init()
191 dev_err(data->dev, "Error reading reg_chip_id\n"); in bmg160_chip_init()
195 dev_dbg(data->dev, "Chip Id %x\n", val); in bmg160_chip_init()
197 dev_err(data->dev, "invalid chip %x\n", val); in bmg160_chip_init()
201 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_chip_init()
209 ret = bmg160_set_bw(data, BMG160_DEF_BW); in bmg160_chip_init()
214 ret = regmap_write(data->regmap, BMG160_REG_RANGE, BMG160_RANGE_500DPS); in bmg160_chip_init()
216 dev_err(data->dev, "Error writing reg_range\n"); in bmg160_chip_init()
219 data->dps_range = BMG160_RANGE_500DPS; in bmg160_chip_init()
221 ret = regmap_read(data->regmap, BMG160_REG_SLOPE_THRES, &val); in bmg160_chip_init()
223 dev_err(data->dev, "Error reading reg_slope_thres\n"); in bmg160_chip_init()
226 data->slope_thres = val; in bmg160_chip_init()
229 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_EN_1, in bmg160_chip_init()
232 dev_err(data->dev, "Error updating bits in reg_int_en_1\n"); in bmg160_chip_init()
236 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_chip_init()
240 dev_err(data->dev, in bmg160_chip_init()
248 static int bmg160_set_power_state(struct bmg160_data *data, bool on) in bmg160_set_power_state() argument
254 ret = pm_runtime_get_sync(data->dev); in bmg160_set_power_state()
256 pm_runtime_mark_last_busy(data->dev); in bmg160_set_power_state()
257 ret = pm_runtime_put_autosuspend(data->dev); in bmg160_set_power_state()
261 dev_err(data->dev, in bmg160_set_power_state()
264 pm_runtime_put_noidle(data->dev); in bmg160_set_power_state()
273 static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data, in bmg160_setup_any_motion_interrupt() argument
279 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_0, in bmg160_setup_any_motion_interrupt()
283 dev_err(data->dev, "Error updating bits reg_int_map0\n"); in bmg160_setup_any_motion_interrupt()
290 ret = regmap_write(data->regmap, BMG160_REG_SLOPE_THRES, in bmg160_setup_any_motion_interrupt()
291 data->slope_thres); in bmg160_setup_any_motion_interrupt()
293 dev_err(data->dev, in bmg160_setup_any_motion_interrupt()
298 ret = regmap_write(data->regmap, BMG160_REG_MOTION_INTR, in bmg160_setup_any_motion_interrupt()
302 dev_err(data->dev, in bmg160_setup_any_motion_interrupt()
312 if (!data->dready_trigger_on) { in bmg160_setup_any_motion_interrupt()
313 ret = regmap_write(data->regmap, in bmg160_setup_any_motion_interrupt()
318 dev_err(data->dev, in bmg160_setup_any_motion_interrupt()
324 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_any_motion_interrupt()
328 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_any_motion_interrupt()
332 dev_err(data->dev, "Error writing reg_int_en0\n"); in bmg160_setup_any_motion_interrupt()
339 static int bmg160_setup_new_data_interrupt(struct bmg160_data *data, in bmg160_setup_new_data_interrupt() argument
345 ret = regmap_update_bits(data->regmap, BMG160_REG_INT_MAP_1, in bmg160_setup_new_data_interrupt()
349 dev_err(data->dev, "Error updating bits in reg_int_map1\n"); in bmg160_setup_new_data_interrupt()
354 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
358 dev_err(data->dev, in bmg160_setup_new_data_interrupt()
363 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, in bmg160_setup_new_data_interrupt()
368 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_setup_new_data_interrupt()
372 dev_err(data->dev, in bmg160_setup_new_data_interrupt()
377 ret = regmap_write(data->regmap, BMG160_REG_INT_EN_0, 0); in bmg160_setup_new_data_interrupt()
381 dev_err(data->dev, "Error writing reg_int_en0\n"); in bmg160_setup_new_data_interrupt()
388 static int bmg160_get_bw(struct bmg160_data *data, int *val) in bmg160_get_bw() argument
393 if (bmg160_samp_freq_table[i].bw_bits == data->bw_bits) { in bmg160_get_bw()
402 static int bmg160_set_scale(struct bmg160_data *data, int val) in bmg160_set_scale() argument
408 ret = regmap_write(data->regmap, BMG160_REG_RANGE, in bmg160_set_scale()
411 dev_err(data->dev, in bmg160_set_scale()
415 data->dps_range = bmg160_scale_table[i].dps_range; in bmg160_set_scale()
423 static int bmg160_get_temp(struct bmg160_data *data, int *val) in bmg160_get_temp() argument
428 mutex_lock(&data->mutex); in bmg160_get_temp()
429 ret = bmg160_set_power_state(data, true); in bmg160_get_temp()
431 mutex_unlock(&data->mutex); in bmg160_get_temp()
435 ret = regmap_read(data->regmap, BMG160_REG_TEMP, &raw_val); in bmg160_get_temp()
437 dev_err(data->dev, "Error reading reg_temp\n"); in bmg160_get_temp()
438 bmg160_set_power_state(data, false); in bmg160_get_temp()
439 mutex_unlock(&data->mutex); in bmg160_get_temp()
444 ret = bmg160_set_power_state(data, false); in bmg160_get_temp()
445 mutex_unlock(&data->mutex); in bmg160_get_temp()
452 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val) in bmg160_get_axis() argument
457 mutex_lock(&data->mutex); in bmg160_get_axis()
458 ret = bmg160_set_power_state(data, true); in bmg160_get_axis()
460 mutex_unlock(&data->mutex); in bmg160_get_axis()
464 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(axis), &raw_val, in bmg160_get_axis()
467 dev_err(data->dev, "Error reading axis %d\n", axis); in bmg160_get_axis()
468 bmg160_set_power_state(data, false); in bmg160_get_axis()
469 mutex_unlock(&data->mutex); in bmg160_get_axis()
474 ret = bmg160_set_power_state(data, false); in bmg160_get_axis()
475 mutex_unlock(&data->mutex); in bmg160_get_axis()
486 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_raw() local
493 return bmg160_get_temp(data, val); in bmg160_read_raw()
498 return bmg160_get_axis(data, chan->scan_index, in bmg160_read_raw()
521 data->dps_range) { in bmg160_read_raw()
533 mutex_lock(&data->mutex); in bmg160_read_raw()
534 ret = bmg160_get_bw(data, val); in bmg160_read_raw()
535 mutex_unlock(&data->mutex); in bmg160_read_raw()
546 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_raw() local
551 mutex_lock(&data->mutex); in bmg160_write_raw()
559 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
561 mutex_unlock(&data->mutex); in bmg160_write_raw()
564 ret = bmg160_set_bw(data, val); in bmg160_write_raw()
566 bmg160_set_power_state(data, false); in bmg160_write_raw()
567 mutex_unlock(&data->mutex); in bmg160_write_raw()
570 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
571 mutex_unlock(&data->mutex); in bmg160_write_raw()
577 mutex_lock(&data->mutex); in bmg160_write_raw()
579 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
581 mutex_unlock(&data->mutex); in bmg160_write_raw()
584 ret = bmg160_set_scale(data, val2); in bmg160_write_raw()
586 bmg160_set_power_state(data, false); in bmg160_write_raw()
587 mutex_unlock(&data->mutex); in bmg160_write_raw()
590 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
591 mutex_unlock(&data->mutex); in bmg160_write_raw()
607 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event() local
612 *val = data->slope_thres & BMG160_SLOPE_THRES_MASK; in bmg160_read_event()
628 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event() local
632 if (data->ev_enable_state) in bmg160_write_event()
634 data->slope_thres &= ~BMG160_SLOPE_THRES_MASK; in bmg160_write_event()
635 data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK); in bmg160_write_event()
650 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event_config() local
652 return data->ev_enable_state; in bmg160_read_event_config()
661 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event_config() local
664 if (state && data->ev_enable_state) in bmg160_write_event_config()
667 mutex_lock(&data->mutex); in bmg160_write_event_config()
669 if (!state && data->motion_trigger_on) { in bmg160_write_event_config()
670 data->ev_enable_state = 0; in bmg160_write_event_config()
671 mutex_unlock(&data->mutex); in bmg160_write_event_config()
683 ret = bmg160_set_power_state(data, state); in bmg160_write_event_config()
685 mutex_unlock(&data->mutex); in bmg160_write_event_config()
689 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_write_event_config()
691 bmg160_set_power_state(data, false); in bmg160_write_event_config()
692 mutex_unlock(&data->mutex); in bmg160_write_event_config()
696 data->ev_enable_state = state; in bmg160_write_event_config()
697 mutex_unlock(&data->mutex); in bmg160_write_event_config()
771 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trigger_handler() local
775 mutex_lock(&data->mutex); in bmg160_trigger_handler()
778 ret = regmap_bulk_read(data->regmap, BMG160_AXIS_TO_REG(bit), in bmg160_trigger_handler()
781 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
784 data->buffer[i++] = val; in bmg160_trigger_handler()
786 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
788 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in bmg160_trigger_handler()
799 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trig_try_reen() local
803 if (data->dready_trigger_on) in bmg160_trig_try_reen()
807 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_trig_try_reen()
811 dev_err(data->dev, "Error writing reg_rst_latch\n"); in bmg160_trig_try_reen()
822 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trigger_set_state() local
825 mutex_lock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
827 if (!state && data->ev_enable_state && data->motion_trigger_on) { in bmg160_data_rdy_trigger_set_state()
828 data->motion_trigger_on = false; in bmg160_data_rdy_trigger_set_state()
829 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
837 ret = bmg160_set_power_state(data, state); in bmg160_data_rdy_trigger_set_state()
839 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
842 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
843 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
845 ret = bmg160_setup_new_data_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
847 bmg160_set_power_state(data, false); in bmg160_data_rdy_trigger_set_state()
848 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
851 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
852 data->motion_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
854 data->dready_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
856 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
870 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_event_handler() local
875 ret = regmap_read(data->regmap, BMG160_REG_INT_STATUS_2, &val); in bmg160_event_handler()
877 dev_err(data->dev, "Error reading reg_int_status2\n"); in bmg160_event_handler()
909 if (!data->dready_trigger_on) { in bmg160_event_handler()
910 ret = regmap_write(data->regmap, BMG160_REG_INT_RST_LATCH, in bmg160_event_handler()
914 dev_err(data->dev, in bmg160_event_handler()
924 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trig_poll() local
926 if (data->dready_trigger_on) in bmg160_data_rdy_trig_poll()
927 iio_trigger_poll(data->dready_trig); in bmg160_data_rdy_trig_poll()
928 else if (data->motion_trigger_on) in bmg160_data_rdy_trig_poll()
929 iio_trigger_poll(data->motion_trig); in bmg160_data_rdy_trig_poll()
931 if (data->ev_enable_state) in bmg160_data_rdy_trig_poll()
940 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_preenable() local
942 return bmg160_set_power_state(data, true); in bmg160_buffer_preenable()
947 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_buffer_postdisable() local
949 return bmg160_set_power_state(data, false); in bmg160_buffer_postdisable()
959 static int bmg160_gpio_probe(struct bmg160_data *data) in bmg160_gpio_probe() argument
965 dev = data->dev; in bmg160_gpio_probe()
974 data->irq = gpiod_to_irq(gpio); in bmg160_gpio_probe()
977 data->irq); in bmg160_gpio_probe()
996 struct bmg160_data *data; in bmg160_core_probe() local
1000 indio_dev = devm_iio_device_alloc(dev, sizeof(*data)); in bmg160_core_probe()
1004 data = iio_priv(indio_dev); in bmg160_core_probe()
1006 data->dev = dev; in bmg160_core_probe()
1007 data->irq = irq; in bmg160_core_probe()
1008 data->regmap = regmap; in bmg160_core_probe()
1010 ret = bmg160_chip_init(data); in bmg160_core_probe()
1014 mutex_init(&data->mutex); in bmg160_core_probe()
1026 if (data->irq <= 0) in bmg160_core_probe()
1027 bmg160_gpio_probe(data); in bmg160_core_probe()
1029 if (data->irq > 0) { in bmg160_core_probe()
1031 data->irq, in bmg160_core_probe()
1040 data->dready_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1044 if (!data->dready_trig) in bmg160_core_probe()
1047 data->motion_trig = devm_iio_trigger_alloc(dev, in bmg160_core_probe()
1051 if (!data->motion_trig) in bmg160_core_probe()
1054 data->dready_trig->dev.parent = dev; in bmg160_core_probe()
1055 data->dready_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1056 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in bmg160_core_probe()
1057 ret = iio_trigger_register(data->dready_trig); in bmg160_core_probe()
1061 data->motion_trig->dev.parent = dev; in bmg160_core_probe()
1062 data->motion_trig->ops = &bmg160_trigger_ops; in bmg160_core_probe()
1063 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in bmg160_core_probe()
1064 ret = iio_trigger_register(data->motion_trig); in bmg160_core_probe()
1066 data->motion_trig = NULL; in bmg160_core_probe()
1103 if (data->dready_trig) in bmg160_core_probe()
1104 iio_trigger_unregister(data->dready_trig); in bmg160_core_probe()
1105 if (data->motion_trig) in bmg160_core_probe()
1106 iio_trigger_unregister(data->motion_trig); in bmg160_core_probe()
1115 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_core_remove() local
1124 if (data->dready_trig) { in bmg160_core_remove()
1125 iio_trigger_unregister(data->dready_trig); in bmg160_core_remove()
1126 iio_trigger_unregister(data->motion_trig); in bmg160_core_remove()
1129 mutex_lock(&data->mutex); in bmg160_core_remove()
1130 bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND); in bmg160_core_remove()
1131 mutex_unlock(&data->mutex); in bmg160_core_remove()
1139 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_suspend() local
1141 mutex_lock(&data->mutex); in bmg160_suspend()
1142 bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_suspend()
1143 mutex_unlock(&data->mutex); in bmg160_suspend()
1151 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_resume() local
1153 mutex_lock(&data->mutex); in bmg160_resume()
1154 if (data->dready_trigger_on || data->motion_trigger_on || in bmg160_resume()
1155 data->ev_enable_state) in bmg160_resume()
1156 bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_resume()
1157 mutex_unlock(&data->mutex); in bmg160_resume()
1167 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_suspend() local
1170 ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_runtime_suspend()
1172 dev_err(data->dev, "set mode failed\n"); in bmg160_runtime_suspend()
1182 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_resume() local
1185 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_runtime_resume()