Lines Matching refs:data

218 static int kxcjk1013_set_mode(struct kxcjk1013_data *data,  in kxcjk1013_set_mode()  argument
223 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_set_mode()
225 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_set_mode()
234 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_set_mode()
237 dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); in kxcjk1013_set_mode()
244 static int kxcjk1013_get_mode(struct kxcjk1013_data *data, in kxcjk1013_get_mode() argument
249 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_get_mode()
251 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_get_mode()
263 static int kxcjk1013_set_range(struct kxcjk1013_data *data, int range_index) in kxcjk1013_set_range() argument
267 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_set_range()
269 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_set_range()
278 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_set_range()
282 dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); in kxcjk1013_set_range()
286 data->range = range_index; in kxcjk1013_set_range()
291 static int kxcjk1013_chip_init(struct kxcjk1013_data *data) in kxcjk1013_chip_init() argument
295 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_WHO_AM_I); in kxcjk1013_chip_init()
297 dev_err(&data->client->dev, "Error reading who_am_i\n"); in kxcjk1013_chip_init()
301 dev_dbg(&data->client->dev, "KXCJK1013 Chip Id %x\n", ret); in kxcjk1013_chip_init()
303 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_chip_init()
307 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_chip_init()
309 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_chip_init()
316 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_CTRL1, in kxcjk1013_chip_init()
319 dev_err(&data->client->dev, "Error reading reg_ctrl\n"); in kxcjk1013_chip_init()
324 ret = kxcjk1013_set_range(data, KXCJK1013_RANGE_4G); in kxcjk1013_chip_init()
328 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_DATA_CTRL); in kxcjk1013_chip_init()
330 dev_err(&data->client->dev, "Error reading reg_data_ctrl\n"); in kxcjk1013_chip_init()
334 data->odr_bits = ret; in kxcjk1013_chip_init()
337 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_CTRL1); in kxcjk1013_chip_init()
339 dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); in kxcjk1013_chip_init()
343 if (data->active_high_intr) in kxcjk1013_chip_init()
348 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_INT_CTRL1, in kxcjk1013_chip_init()
351 dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); in kxcjk1013_chip_init()
355 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_chip_init()
359 data->wake_thres = KXCJK1013_DEFAULT_WAKE_THRES; in kxcjk1013_chip_init()
365 static int kxcjk1013_get_startup_times(struct kxcjk1013_data *data) in kxcjk1013_get_startup_times() argument
368 int idx = data->chipset; in kxcjk1013_get_startup_times()
371 if (odr_start_up_times[idx][i].odr_bits == data->odr_bits) in kxcjk1013_get_startup_times()
379 static int kxcjk1013_set_power_state(struct kxcjk1013_data *data, bool on) in kxcjk1013_set_power_state() argument
385 ret = pm_runtime_get_sync(&data->client->dev); in kxcjk1013_set_power_state()
387 pm_runtime_mark_last_busy(&data->client->dev); in kxcjk1013_set_power_state()
388 ret = pm_runtime_put_autosuspend(&data->client->dev); in kxcjk1013_set_power_state()
391 dev_err(&data->client->dev, in kxcjk1013_set_power_state()
394 pm_runtime_put_noidle(&data->client->dev); in kxcjk1013_set_power_state()
402 static int kxcjk1013_chip_update_thresholds(struct kxcjk1013_data *data) in kxcjk1013_chip_update_thresholds() argument
406 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_chip_update_thresholds()
408 data->wake_dur); in kxcjk1013_chip_update_thresholds()
410 dev_err(&data->client->dev, in kxcjk1013_chip_update_thresholds()
415 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_chip_update_thresholds()
417 data->wake_thres); in kxcjk1013_chip_update_thresholds()
419 dev_err(&data->client->dev, "Error writing reg_wake_thres\n"); in kxcjk1013_chip_update_thresholds()
426 static int kxcjk1013_setup_any_motion_interrupt(struct kxcjk1013_data *data, in kxcjk1013_setup_any_motion_interrupt() argument
432 ret = kxcjk1013_get_mode(data, &store_mode); in kxcjk1013_setup_any_motion_interrupt()
437 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_setup_any_motion_interrupt()
441 ret = kxcjk1013_chip_update_thresholds(data); in kxcjk1013_setup_any_motion_interrupt()
445 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_CTRL1); in kxcjk1013_setup_any_motion_interrupt()
447 dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); in kxcjk1013_setup_any_motion_interrupt()
456 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_INT_CTRL1, in kxcjk1013_setup_any_motion_interrupt()
459 dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); in kxcjk1013_setup_any_motion_interrupt()
463 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_setup_any_motion_interrupt()
465 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_setup_any_motion_interrupt()
474 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_setup_any_motion_interrupt()
477 dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); in kxcjk1013_setup_any_motion_interrupt()
482 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_setup_any_motion_interrupt()
490 static int kxcjk1013_setup_new_data_interrupt(struct kxcjk1013_data *data, in kxcjk1013_setup_new_data_interrupt() argument
496 ret = kxcjk1013_get_mode(data, &store_mode); in kxcjk1013_setup_new_data_interrupt()
501 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_setup_new_data_interrupt()
505 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_CTRL1); in kxcjk1013_setup_new_data_interrupt()
507 dev_err(&data->client->dev, "Error reading reg_int_ctrl1\n"); in kxcjk1013_setup_new_data_interrupt()
516 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_INT_CTRL1, in kxcjk1013_setup_new_data_interrupt()
519 dev_err(&data->client->dev, "Error writing reg_int_ctrl1\n"); in kxcjk1013_setup_new_data_interrupt()
523 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_CTRL1); in kxcjk1013_setup_new_data_interrupt()
525 dev_err(&data->client->dev, "Error reading reg_ctrl1\n"); in kxcjk1013_setup_new_data_interrupt()
534 ret = i2c_smbus_write_byte_data(data->client, in kxcjk1013_setup_new_data_interrupt()
537 dev_err(&data->client->dev, "Error writing reg_ctrl1\n"); in kxcjk1013_setup_new_data_interrupt()
542 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_setup_new_data_interrupt()
578 static int kxcjk1013_set_odr(struct kxcjk1013_data *data, int val, int val2) in kxcjk1013_set_odr() argument
584 ret = kxcjk1013_get_mode(data, &store_mode); in kxcjk1013_set_odr()
593 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_set_odr()
597 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_DATA_CTRL, in kxcjk1013_set_odr()
600 dev_err(&data->client->dev, "Error writing data_ctrl\n"); in kxcjk1013_set_odr()
604 data->odr_bits = odr_bits; in kxcjk1013_set_odr()
610 ret = i2c_smbus_write_byte_data(data->client, KXCJK1013_REG_CTRL2, in kxcjk1013_set_odr()
613 dev_err(&data->client->dev, "Error writing reg_ctrl2\n"); in kxcjk1013_set_odr()
618 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_set_odr()
626 static int kxcjk1013_get_odr(struct kxcjk1013_data *data, int *val, int *val2) in kxcjk1013_get_odr() argument
631 if (samp_freq_table[i].odr_bits == data->odr_bits) { in kxcjk1013_get_odr()
641 static int kxcjk1013_get_acc_reg(struct kxcjk1013_data *data, int axis) in kxcjk1013_get_acc_reg() argument
646 ret = i2c_smbus_read_word_data(data->client, reg); in kxcjk1013_get_acc_reg()
648 dev_err(&data->client->dev, in kxcjk1013_get_acc_reg()
656 static int kxcjk1013_set_scale(struct kxcjk1013_data *data, int val) in kxcjk1013_set_scale() argument
663 ret = kxcjk1013_get_mode(data, &store_mode); in kxcjk1013_set_scale()
667 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_set_scale()
671 ret = kxcjk1013_set_range(data, i); in kxcjk1013_set_scale()
676 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_set_scale()
692 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_raw() local
697 mutex_lock(&data->mutex); in kxcjk1013_read_raw()
701 ret = kxcjk1013_set_power_state(data, true); in kxcjk1013_read_raw()
703 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
706 ret = kxcjk1013_get_acc_reg(data, chan->scan_index); in kxcjk1013_read_raw()
708 kxcjk1013_set_power_state(data, false); in kxcjk1013_read_raw()
709 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
713 ret = kxcjk1013_set_power_state(data, false); in kxcjk1013_read_raw()
715 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
724 *val2 = KXCJK1013_scale_table[data->range].scale; in kxcjk1013_read_raw()
728 mutex_lock(&data->mutex); in kxcjk1013_read_raw()
729 ret = kxcjk1013_get_odr(data, val, val2); in kxcjk1013_read_raw()
730 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
742 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_raw() local
747 mutex_lock(&data->mutex); in kxcjk1013_write_raw()
748 ret = kxcjk1013_set_odr(data, val, val2); in kxcjk1013_write_raw()
749 mutex_unlock(&data->mutex); in kxcjk1013_write_raw()
755 mutex_lock(&data->mutex); in kxcjk1013_write_raw()
756 ret = kxcjk1013_set_scale(data, val2); in kxcjk1013_write_raw()
757 mutex_unlock(&data->mutex); in kxcjk1013_write_raw()
773 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_event() local
778 *val = data->wake_thres; in kxcjk1013_read_event()
781 *val = data->wake_dur; in kxcjk1013_read_event()
797 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_event() local
799 if (data->ev_enable_state) in kxcjk1013_write_event()
804 data->wake_thres = val; in kxcjk1013_write_event()
807 data->wake_dur = val; in kxcjk1013_write_event()
821 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_event_config() local
823 return data->ev_enable_state; in kxcjk1013_read_event_config()
832 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_event_config() local
835 if (state && data->ev_enable_state) in kxcjk1013_write_event_config()
838 mutex_lock(&data->mutex); in kxcjk1013_write_event_config()
840 if (!state && data->motion_trigger_on) { in kxcjk1013_write_event_config()
841 data->ev_enable_state = 0; in kxcjk1013_write_event_config()
842 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
855 ret = kxcjk1013_set_power_state(data, state); in kxcjk1013_write_event_config()
857 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
861 ret = kxcjk1013_setup_any_motion_interrupt(data, state); in kxcjk1013_write_event_config()
863 kxcjk1013_set_power_state(data, false); in kxcjk1013_write_event_config()
864 data->ev_enable_state = 0; in kxcjk1013_write_event_config()
865 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
869 data->ev_enable_state = state; in kxcjk1013_write_event_config()
870 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
877 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_buffer_preenable() local
879 return kxcjk1013_set_power_state(data, true); in kxcjk1013_buffer_preenable()
884 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_buffer_postdisable() local
886 return kxcjk1013_set_power_state(data, false); in kxcjk1013_buffer_postdisable()
960 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_trigger_handler() local
963 mutex_lock(&data->mutex); in kxcjk1013_trigger_handler()
967 ret = kxcjk1013_get_acc_reg(data, bit); in kxcjk1013_trigger_handler()
969 mutex_unlock(&data->mutex); in kxcjk1013_trigger_handler()
972 data->buffer[i++] = ret; in kxcjk1013_trigger_handler()
974 mutex_unlock(&data->mutex); in kxcjk1013_trigger_handler()
976 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in kxcjk1013_trigger_handler()
977 data->timestamp); in kxcjk1013_trigger_handler()
987 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_trig_try_reen() local
990 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); in kxcjk1013_trig_try_reen()
992 dev_err(&data->client->dev, "Error reading reg_int_rel\n"); in kxcjk1013_trig_try_reen()
1003 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_data_rdy_trigger_set_state() local
1006 mutex_lock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1008 if (!state && data->ev_enable_state && data->motion_trigger_on) { in kxcjk1013_data_rdy_trigger_set_state()
1009 data->motion_trigger_on = false; in kxcjk1013_data_rdy_trigger_set_state()
1010 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1014 ret = kxcjk1013_set_power_state(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1016 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1019 if (data->motion_trig == trig) in kxcjk1013_data_rdy_trigger_set_state()
1020 ret = kxcjk1013_setup_any_motion_interrupt(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1022 ret = kxcjk1013_setup_new_data_interrupt(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1024 kxcjk1013_set_power_state(data, false); in kxcjk1013_data_rdy_trigger_set_state()
1025 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1028 if (data->motion_trig == trig) in kxcjk1013_data_rdy_trigger_set_state()
1029 data->motion_trigger_on = state; in kxcjk1013_data_rdy_trigger_set_state()
1031 data->dready_trigger_on = state; in kxcjk1013_data_rdy_trigger_set_state()
1033 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1047 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_event_handler() local
1050 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_SRC1); in kxcjk1013_event_handler()
1052 dev_err(&data->client->dev, "Error reading reg_int_src1\n"); in kxcjk1013_event_handler()
1057 ret = i2c_smbus_read_byte_data(data->client, in kxcjk1013_event_handler()
1060 dev_err(&data->client->dev, in kxcjk1013_event_handler()
1072 data->timestamp); in kxcjk1013_event_handler()
1080 data->timestamp); in kxcjk1013_event_handler()
1090 data->timestamp); in kxcjk1013_event_handler()
1098 data->timestamp); in kxcjk1013_event_handler()
1107 data->timestamp); in kxcjk1013_event_handler()
1115 data->timestamp); in kxcjk1013_event_handler()
1119 if (data->dready_trigger_on) in kxcjk1013_event_handler()
1122 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); in kxcjk1013_event_handler()
1124 dev_err(&data->client->dev, "Error reading reg_int_rel\n"); in kxcjk1013_event_handler()
1132 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_data_rdy_trig_poll() local
1134 data->timestamp = iio_get_time_ns(); in kxcjk1013_data_rdy_trig_poll()
1136 if (data->dready_trigger_on) in kxcjk1013_data_rdy_trig_poll()
1137 iio_trigger_poll(data->dready_trig); in kxcjk1013_data_rdy_trig_poll()
1138 else if (data->motion_trigger_on) in kxcjk1013_data_rdy_trig_poll()
1139 iio_trigger_poll(data->motion_trig); in kxcjk1013_data_rdy_trig_poll()
1141 if (data->ev_enable_state) in kxcjk1013_data_rdy_trig_poll()
1168 struct kxcjk1013_data *data; in kxcjk1013_probe() local
1174 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in kxcjk1013_probe()
1178 data = iio_priv(indio_dev); in kxcjk1013_probe()
1180 data->client = client; in kxcjk1013_probe()
1184 data->active_high_intr = pdata->active_high_intr; in kxcjk1013_probe()
1186 data->active_high_intr = true; /* default polarity */ in kxcjk1013_probe()
1189 data->chipset = (enum kx_chipset)(id->driver_data); in kxcjk1013_probe()
1193 &data->chipset, in kxcjk1013_probe()
1194 &data->is_smo8500_device); in kxcjk1013_probe()
1198 ret = kxcjk1013_chip_init(data); in kxcjk1013_probe()
1202 mutex_init(&data->mutex); in kxcjk1013_probe()
1211 if (client->irq > 0 && !data->is_smo8500_device) { in kxcjk1013_probe()
1221 data->dready_trig = devm_iio_trigger_alloc(&client->dev, in kxcjk1013_probe()
1225 if (!data->dready_trig) { in kxcjk1013_probe()
1230 data->motion_trig = devm_iio_trigger_alloc(&client->dev, in kxcjk1013_probe()
1234 if (!data->motion_trig) { in kxcjk1013_probe()
1239 data->dready_trig->dev.parent = &client->dev; in kxcjk1013_probe()
1240 data->dready_trig->ops = &kxcjk1013_trigger_ops; in kxcjk1013_probe()
1241 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in kxcjk1013_probe()
1242 indio_dev->trig = data->dready_trig; in kxcjk1013_probe()
1244 ret = iio_trigger_register(data->dready_trig); in kxcjk1013_probe()
1248 data->motion_trig->dev.parent = &client->dev; in kxcjk1013_probe()
1249 data->motion_trig->ops = &kxcjk1013_trigger_ops; in kxcjk1013_probe()
1250 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in kxcjk1013_probe()
1251 ret = iio_trigger_register(data->motion_trig); in kxcjk1013_probe()
1253 data->motion_trig = NULL; in kxcjk1013_probe()
1287 if (data->dready_trig) in kxcjk1013_probe()
1290 if (data->dready_trig) in kxcjk1013_probe()
1291 iio_trigger_unregister(data->dready_trig); in kxcjk1013_probe()
1292 if (data->motion_trig) in kxcjk1013_probe()
1293 iio_trigger_unregister(data->motion_trig); in kxcjk1013_probe()
1295 kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_probe()
1303 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_remove() local
1311 if (data->dready_trig) { in kxcjk1013_remove()
1313 iio_trigger_unregister(data->dready_trig); in kxcjk1013_remove()
1314 iio_trigger_unregister(data->motion_trig); in kxcjk1013_remove()
1317 mutex_lock(&data->mutex); in kxcjk1013_remove()
1318 kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_remove()
1319 mutex_unlock(&data->mutex); in kxcjk1013_remove()
1328 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_suspend() local
1331 mutex_lock(&data->mutex); in kxcjk1013_suspend()
1332 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_suspend()
1333 mutex_unlock(&data->mutex); in kxcjk1013_suspend()
1341 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_resume() local
1344 mutex_lock(&data->mutex); in kxcjk1013_resume()
1345 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_resume()
1346 mutex_unlock(&data->mutex); in kxcjk1013_resume()
1356 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_runtime_suspend() local
1359 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_runtime_suspend()
1361 dev_err(&data->client->dev, "powering off device failed\n"); in kxcjk1013_runtime_suspend()
1370 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_runtime_resume() local
1374 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_runtime_resume()
1378 sleep_val = kxcjk1013_get_startup_times(data); in kxcjk1013_runtime_resume()