Lines Matching refs:data
138 static int bmg160_set_mode(struct bmg160_data *data, u8 mode) in bmg160_set_mode() argument
142 ret = i2c_smbus_write_byte_data(data->client, in bmg160_set_mode()
145 dev_err(&data->client->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 = i2c_smbus_write_byte_data(data->client, BMG160_REG_PMU_BW, in bmg160_set_bw()
176 dev_err(&data->client->dev, "Error writing reg_pmu_bw\n"); in bmg160_set_bw()
180 data->bw_bits = bw_bits; in bmg160_set_bw()
185 static int bmg160_chip_init(struct bmg160_data *data) in bmg160_chip_init() argument
189 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_CHIP_ID); in bmg160_chip_init()
191 dev_err(&data->client->dev, "Error reading reg_chip_id\n"); in bmg160_chip_init()
195 dev_dbg(&data->client->dev, "Chip Id %x\n", ret); in bmg160_chip_init()
197 dev_err(&data->client->dev, "invalid chip %x\n", ret); 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 = i2c_smbus_write_byte_data(data->client, in bmg160_chip_init()
218 dev_err(&data->client->dev, "Error writing reg_range\n"); in bmg160_chip_init()
221 data->dps_range = BMG160_RANGE_500DPS; in bmg160_chip_init()
223 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_SLOPE_THRES); in bmg160_chip_init()
225 dev_err(&data->client->dev, "Error reading reg_slope_thres\n"); in bmg160_chip_init()
228 data->slope_thres = ret; in bmg160_chip_init()
231 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_EN_1); in bmg160_chip_init()
233 dev_err(&data->client->dev, "Error reading reg_int_en_1\n"); in bmg160_chip_init()
237 ret = i2c_smbus_write_byte_data(data->client, in bmg160_chip_init()
240 dev_err(&data->client->dev, "Error writing reg_int_en_1\n"); in bmg160_chip_init()
244 ret = i2c_smbus_write_byte_data(data->client, in bmg160_chip_init()
249 dev_err(&data->client->dev, in bmg160_chip_init()
257 static int bmg160_set_power_state(struct bmg160_data *data, bool on) in bmg160_set_power_state() argument
263 ret = pm_runtime_get_sync(&data->client->dev); in bmg160_set_power_state()
265 pm_runtime_mark_last_busy(&data->client->dev); in bmg160_set_power_state()
266 ret = pm_runtime_put_autosuspend(&data->client->dev); in bmg160_set_power_state()
270 dev_err(&data->client->dev, in bmg160_set_power_state()
273 pm_runtime_put_noidle(&data->client->dev); in bmg160_set_power_state()
282 static int bmg160_setup_any_motion_interrupt(struct bmg160_data *data, in bmg160_setup_any_motion_interrupt() argument
288 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_MAP_0); in bmg160_setup_any_motion_interrupt()
290 dev_err(&data->client->dev, "Error reading reg_int_map0\n"); in bmg160_setup_any_motion_interrupt()
298 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
302 dev_err(&data->client->dev, "Error writing reg_int_map0\n"); in bmg160_setup_any_motion_interrupt()
309 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
311 data->slope_thres); in bmg160_setup_any_motion_interrupt()
313 dev_err(&data->client->dev, in bmg160_setup_any_motion_interrupt()
318 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
324 dev_err(&data->client->dev, in bmg160_setup_any_motion_interrupt()
334 if (!data->dready_trigger_on) { in bmg160_setup_any_motion_interrupt()
335 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
340 dev_err(&data->client->dev, in bmg160_setup_any_motion_interrupt()
346 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
351 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_any_motion_interrupt()
356 dev_err(&data->client->dev, "Error writing reg_int_en0\n"); in bmg160_setup_any_motion_interrupt()
363 static int bmg160_setup_new_data_interrupt(struct bmg160_data *data, in bmg160_setup_new_data_interrupt() argument
369 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_MAP_1); in bmg160_setup_new_data_interrupt()
371 dev_err(&data->client->dev, "Error reading reg_int_map1\n"); in bmg160_setup_new_data_interrupt()
380 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_new_data_interrupt()
384 dev_err(&data->client->dev, "Error writing reg_int_map1\n"); in bmg160_setup_new_data_interrupt()
389 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_new_data_interrupt()
394 dev_err(&data->client->dev, in bmg160_setup_new_data_interrupt()
399 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_new_data_interrupt()
405 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_new_data_interrupt()
410 dev_err(&data->client->dev, in bmg160_setup_new_data_interrupt()
415 ret = i2c_smbus_write_byte_data(data->client, in bmg160_setup_new_data_interrupt()
421 dev_err(&data->client->dev, "Error writing reg_int_en0\n"); in bmg160_setup_new_data_interrupt()
428 static int bmg160_get_bw(struct bmg160_data *data, int *val) in bmg160_get_bw() argument
433 if (bmg160_samp_freq_table[i].bw_bits == data->bw_bits) { in bmg160_get_bw()
442 static int bmg160_set_scale(struct bmg160_data *data, int val) in bmg160_set_scale() argument
449 data->client, in bmg160_set_scale()
453 dev_err(&data->client->dev, in bmg160_set_scale()
457 data->dps_range = bmg160_scale_table[i].dps_range; in bmg160_set_scale()
465 static int bmg160_get_temp(struct bmg160_data *data, int *val) in bmg160_get_temp() argument
469 mutex_lock(&data->mutex); in bmg160_get_temp()
470 ret = bmg160_set_power_state(data, true); in bmg160_get_temp()
472 mutex_unlock(&data->mutex); in bmg160_get_temp()
476 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_TEMP); in bmg160_get_temp()
478 dev_err(&data->client->dev, "Error reading reg_temp\n"); in bmg160_get_temp()
479 bmg160_set_power_state(data, false); in bmg160_get_temp()
480 mutex_unlock(&data->mutex); in bmg160_get_temp()
485 ret = bmg160_set_power_state(data, false); in bmg160_get_temp()
486 mutex_unlock(&data->mutex); in bmg160_get_temp()
493 static int bmg160_get_axis(struct bmg160_data *data, int axis, int *val) in bmg160_get_axis() argument
497 mutex_lock(&data->mutex); in bmg160_get_axis()
498 ret = bmg160_set_power_state(data, true); in bmg160_get_axis()
500 mutex_unlock(&data->mutex); in bmg160_get_axis()
504 ret = i2c_smbus_read_word_data(data->client, BMG160_AXIS_TO_REG(axis)); in bmg160_get_axis()
506 dev_err(&data->client->dev, "Error reading axis %d\n", axis); in bmg160_get_axis()
507 bmg160_set_power_state(data, false); in bmg160_get_axis()
508 mutex_unlock(&data->mutex); in bmg160_get_axis()
513 ret = bmg160_set_power_state(data, false); in bmg160_get_axis()
514 mutex_unlock(&data->mutex); in bmg160_get_axis()
525 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_raw() local
532 return bmg160_get_temp(data, val); in bmg160_read_raw()
537 return bmg160_get_axis(data, chan->scan_index, in bmg160_read_raw()
560 data->dps_range) { in bmg160_read_raw()
572 mutex_lock(&data->mutex); in bmg160_read_raw()
573 ret = bmg160_get_bw(data, val); in bmg160_read_raw()
574 mutex_unlock(&data->mutex); in bmg160_read_raw()
585 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_raw() local
590 mutex_lock(&data->mutex); in bmg160_write_raw()
598 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
600 mutex_unlock(&data->mutex); in bmg160_write_raw()
603 ret = bmg160_set_bw(data, val); in bmg160_write_raw()
605 bmg160_set_power_state(data, false); in bmg160_write_raw()
606 mutex_unlock(&data->mutex); in bmg160_write_raw()
609 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
610 mutex_unlock(&data->mutex); in bmg160_write_raw()
616 mutex_lock(&data->mutex); in bmg160_write_raw()
618 ret = bmg160_set_power_state(data, true); in bmg160_write_raw()
620 mutex_unlock(&data->mutex); in bmg160_write_raw()
623 ret = bmg160_set_scale(data, val2); in bmg160_write_raw()
625 bmg160_set_power_state(data, false); in bmg160_write_raw()
626 mutex_unlock(&data->mutex); in bmg160_write_raw()
629 ret = bmg160_set_power_state(data, false); in bmg160_write_raw()
630 mutex_unlock(&data->mutex); in bmg160_write_raw()
646 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event() local
651 *val = data->slope_thres & BMG160_SLOPE_THRES_MASK; in bmg160_read_event()
667 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event() local
671 if (data->ev_enable_state) in bmg160_write_event()
673 data->slope_thres &= ~BMG160_SLOPE_THRES_MASK; in bmg160_write_event()
674 data->slope_thres |= (val & BMG160_SLOPE_THRES_MASK); in bmg160_write_event()
689 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_read_event_config() local
691 return data->ev_enable_state; in bmg160_read_event_config()
700 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_write_event_config() local
703 if (state && data->ev_enable_state) in bmg160_write_event_config()
706 mutex_lock(&data->mutex); in bmg160_write_event_config()
708 if (!state && data->motion_trigger_on) { in bmg160_write_event_config()
709 data->ev_enable_state = 0; in bmg160_write_event_config()
710 mutex_unlock(&data->mutex); in bmg160_write_event_config()
722 ret = bmg160_set_power_state(data, state); in bmg160_write_event_config()
724 mutex_unlock(&data->mutex); in bmg160_write_event_config()
728 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_write_event_config()
730 bmg160_set_power_state(data, false); in bmg160_write_event_config()
731 mutex_unlock(&data->mutex); in bmg160_write_event_config()
735 data->ev_enable_state = state; in bmg160_write_event_config()
736 mutex_unlock(&data->mutex); in bmg160_write_event_config()
744 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_validate_trigger() local
746 if (data->dready_trig != trig && data->motion_trig != trig) in bmg160_validate_trigger()
821 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trigger_handler() local
824 mutex_lock(&data->mutex); in bmg160_trigger_handler()
827 ret = i2c_smbus_read_word_data(data->client, in bmg160_trigger_handler()
830 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
833 data->buffer[i++] = ret; in bmg160_trigger_handler()
835 mutex_unlock(&data->mutex); in bmg160_trigger_handler()
837 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in bmg160_trigger_handler()
838 data->timestamp); in bmg160_trigger_handler()
848 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_trig_try_reen() local
852 if (data->dready_trigger_on) in bmg160_trig_try_reen()
856 ret = i2c_smbus_write_byte_data(data->client, in bmg160_trig_try_reen()
861 dev_err(&data->client->dev, "Error writing reg_rst_latch\n"); in bmg160_trig_try_reen()
872 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trigger_set_state() local
875 mutex_lock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
877 if (!state && data->ev_enable_state && data->motion_trigger_on) { in bmg160_data_rdy_trigger_set_state()
878 data->motion_trigger_on = false; in bmg160_data_rdy_trigger_set_state()
879 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
887 ret = bmg160_set_power_state(data, state); in bmg160_data_rdy_trigger_set_state()
889 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
892 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
893 ret = bmg160_setup_any_motion_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
895 ret = bmg160_setup_new_data_interrupt(data, state); in bmg160_data_rdy_trigger_set_state()
897 bmg160_set_power_state(data, false); in bmg160_data_rdy_trigger_set_state()
898 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
901 if (data->motion_trig == trig) in bmg160_data_rdy_trigger_set_state()
902 data->motion_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
904 data->dready_trigger_on = state; in bmg160_data_rdy_trigger_set_state()
906 mutex_unlock(&data->mutex); in bmg160_data_rdy_trigger_set_state()
920 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_event_handler() local
924 ret = i2c_smbus_read_byte_data(data->client, BMG160_REG_INT_STATUS_2); in bmg160_event_handler()
926 dev_err(&data->client->dev, "Error reading reg_int_status2\n"); in bmg160_event_handler()
941 data->timestamp); in bmg160_event_handler()
948 data->timestamp); in bmg160_event_handler()
955 data->timestamp); in bmg160_event_handler()
958 if (!data->dready_trigger_on) { in bmg160_event_handler()
959 ret = i2c_smbus_write_byte_data(data->client, in bmg160_event_handler()
964 dev_err(&data->client->dev, in bmg160_event_handler()
974 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_data_rdy_trig_poll() local
976 data->timestamp = iio_get_time_ns(); in bmg160_data_rdy_trig_poll()
978 if (data->dready_trigger_on) in bmg160_data_rdy_trig_poll()
979 iio_trigger_poll(data->dready_trig); in bmg160_data_rdy_trig_poll()
980 else if (data->motion_trigger_on) in bmg160_data_rdy_trig_poll()
981 iio_trigger_poll(data->motion_trig); in bmg160_data_rdy_trig_poll()
983 if (data->ev_enable_state) in bmg160_data_rdy_trig_poll()
991 struct bmg160_data *data) in bmg160_gpio_probe() argument
1031 struct bmg160_data *data; in bmg160_probe() local
1036 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in bmg160_probe()
1040 data = iio_priv(indio_dev); in bmg160_probe()
1042 data->client = client; in bmg160_probe()
1044 ret = bmg160_chip_init(data); in bmg160_probe()
1048 mutex_init(&data->mutex); in bmg160_probe()
1064 client->irq = bmg160_gpio_probe(client, data); in bmg160_probe()
1077 data->dready_trig = devm_iio_trigger_alloc(&client->dev, in bmg160_probe()
1081 if (!data->dready_trig) in bmg160_probe()
1084 data->motion_trig = devm_iio_trigger_alloc(&client->dev, in bmg160_probe()
1088 if (!data->motion_trig) in bmg160_probe()
1091 data->dready_trig->dev.parent = &client->dev; in bmg160_probe()
1092 data->dready_trig->ops = &bmg160_trigger_ops; in bmg160_probe()
1093 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in bmg160_probe()
1094 ret = iio_trigger_register(data->dready_trig); in bmg160_probe()
1098 data->motion_trig->dev.parent = &client->dev; in bmg160_probe()
1099 data->motion_trig->ops = &bmg160_trigger_ops; in bmg160_probe()
1100 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in bmg160_probe()
1101 ret = iio_trigger_register(data->motion_trig); in bmg160_probe()
1103 data->motion_trig = NULL; in bmg160_probe()
1138 if (data->dready_trig) in bmg160_probe()
1141 if (data->dready_trig) in bmg160_probe()
1142 iio_trigger_unregister(data->dready_trig); in bmg160_probe()
1143 if (data->motion_trig) in bmg160_probe()
1144 iio_trigger_unregister(data->motion_trig); in bmg160_probe()
1152 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_remove() local
1160 if (data->dready_trig) { in bmg160_remove()
1162 iio_trigger_unregister(data->dready_trig); in bmg160_remove()
1163 iio_trigger_unregister(data->motion_trig); in bmg160_remove()
1166 mutex_lock(&data->mutex); in bmg160_remove()
1167 bmg160_set_mode(data, BMG160_MODE_DEEP_SUSPEND); in bmg160_remove()
1168 mutex_unlock(&data->mutex); in bmg160_remove()
1177 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_suspend() local
1179 mutex_lock(&data->mutex); in bmg160_suspend()
1180 bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_suspend()
1181 mutex_unlock(&data->mutex); in bmg160_suspend()
1189 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_resume() local
1191 mutex_lock(&data->mutex); in bmg160_resume()
1192 if (data->dready_trigger_on || data->motion_trigger_on || in bmg160_resume()
1193 data->ev_enable_state) in bmg160_resume()
1194 bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_resume()
1195 mutex_unlock(&data->mutex); in bmg160_resume()
1205 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_suspend() local
1208 ret = bmg160_set_mode(data, BMG160_MODE_SUSPEND); in bmg160_runtime_suspend()
1210 dev_err(&data->client->dev, "set mode failed\n"); in bmg160_runtime_suspend()
1220 struct bmg160_data *data = iio_priv(indio_dev); in bmg160_runtime_resume() local
1223 ret = bmg160_set_mode(data, BMG160_MODE_NORMAL); in bmg160_runtime_resume()