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
665 ret = kxcjk1013_get_mode(data, &store_mode); in kxcjk1013_set_scale()
669 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_set_scale()
673 ret = kxcjk1013_set_range(data, i); in kxcjk1013_set_scale()
678 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_set_scale()
694 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_raw() local
699 mutex_lock(&data->mutex); in kxcjk1013_read_raw()
703 ret = kxcjk1013_set_power_state(data, true); in kxcjk1013_read_raw()
705 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
708 ret = kxcjk1013_get_acc_reg(data, chan->scan_index); in kxcjk1013_read_raw()
710 kxcjk1013_set_power_state(data, false); in kxcjk1013_read_raw()
711 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
715 ret = kxcjk1013_set_power_state(data, false); in kxcjk1013_read_raw()
717 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
726 *val2 = KXCJK1013_scale_table[data->range].scale; in kxcjk1013_read_raw()
730 mutex_lock(&data->mutex); in kxcjk1013_read_raw()
731 ret = kxcjk1013_get_odr(data, val, val2); in kxcjk1013_read_raw()
732 mutex_unlock(&data->mutex); in kxcjk1013_read_raw()
744 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_raw() local
749 mutex_lock(&data->mutex); in kxcjk1013_write_raw()
750 ret = kxcjk1013_set_odr(data, val, val2); in kxcjk1013_write_raw()
751 mutex_unlock(&data->mutex); in kxcjk1013_write_raw()
757 mutex_lock(&data->mutex); in kxcjk1013_write_raw()
758 ret = kxcjk1013_set_scale(data, val2); in kxcjk1013_write_raw()
759 mutex_unlock(&data->mutex); in kxcjk1013_write_raw()
775 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_event() local
780 *val = data->wake_thres; in kxcjk1013_read_event()
783 *val = data->wake_dur; in kxcjk1013_read_event()
799 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_event() local
801 if (data->ev_enable_state) in kxcjk1013_write_event()
806 data->wake_thres = val; in kxcjk1013_write_event()
809 data->wake_dur = val; in kxcjk1013_write_event()
824 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_read_event_config() local
826 return data->ev_enable_state; in kxcjk1013_read_event_config()
835 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_write_event_config() local
838 if (state && data->ev_enable_state) in kxcjk1013_write_event_config()
841 mutex_lock(&data->mutex); in kxcjk1013_write_event_config()
843 if (!state && data->motion_trigger_on) { in kxcjk1013_write_event_config()
844 data->ev_enable_state = 0; in kxcjk1013_write_event_config()
845 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
858 ret = kxcjk1013_set_power_state(data, state); in kxcjk1013_write_event_config()
860 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
864 ret = kxcjk1013_setup_any_motion_interrupt(data, state); in kxcjk1013_write_event_config()
866 kxcjk1013_set_power_state(data, false); in kxcjk1013_write_event_config()
867 data->ev_enable_state = 0; in kxcjk1013_write_event_config()
868 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
872 data->ev_enable_state = state; in kxcjk1013_write_event_config()
873 mutex_unlock(&data->mutex); in kxcjk1013_write_event_config()
881 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_validate_trigger() local
883 if (data->dready_trig != trig && data->motion_trig != trig) in kxcjk1013_validate_trigger()
954 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_trigger_handler() local
957 mutex_lock(&data->mutex); in kxcjk1013_trigger_handler()
961 ret = kxcjk1013_get_acc_reg(data, bit); in kxcjk1013_trigger_handler()
963 mutex_unlock(&data->mutex); in kxcjk1013_trigger_handler()
966 data->buffer[i++] = ret; in kxcjk1013_trigger_handler()
968 mutex_unlock(&data->mutex); in kxcjk1013_trigger_handler()
970 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in kxcjk1013_trigger_handler()
971 data->timestamp); in kxcjk1013_trigger_handler()
981 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_trig_try_reen() local
984 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); in kxcjk1013_trig_try_reen()
986 dev_err(&data->client->dev, "Error reading reg_int_rel\n"); in kxcjk1013_trig_try_reen()
997 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_data_rdy_trigger_set_state() local
1000 mutex_lock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1002 if (!state && data->ev_enable_state && data->motion_trigger_on) { in kxcjk1013_data_rdy_trigger_set_state()
1003 data->motion_trigger_on = false; in kxcjk1013_data_rdy_trigger_set_state()
1004 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1008 ret = kxcjk1013_set_power_state(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1010 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1013 if (data->motion_trig == trig) in kxcjk1013_data_rdy_trigger_set_state()
1014 ret = kxcjk1013_setup_any_motion_interrupt(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1016 ret = kxcjk1013_setup_new_data_interrupt(data, state); in kxcjk1013_data_rdy_trigger_set_state()
1018 kxcjk1013_set_power_state(data, false); in kxcjk1013_data_rdy_trigger_set_state()
1019 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1022 if (data->motion_trig == trig) in kxcjk1013_data_rdy_trigger_set_state()
1023 data->motion_trigger_on = state; in kxcjk1013_data_rdy_trigger_set_state()
1025 data->dready_trigger_on = state; in kxcjk1013_data_rdy_trigger_set_state()
1027 mutex_unlock(&data->mutex); in kxcjk1013_data_rdy_trigger_set_state()
1041 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_event_handler() local
1044 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_SRC1); in kxcjk1013_event_handler()
1046 dev_err(&data->client->dev, "Error reading reg_int_src1\n"); in kxcjk1013_event_handler()
1051 ret = i2c_smbus_read_byte_data(data->client, in kxcjk1013_event_handler()
1054 dev_err(&data->client->dev, in kxcjk1013_event_handler()
1066 data->timestamp); in kxcjk1013_event_handler()
1074 data->timestamp); in kxcjk1013_event_handler()
1084 data->timestamp); in kxcjk1013_event_handler()
1092 data->timestamp); in kxcjk1013_event_handler()
1101 data->timestamp); in kxcjk1013_event_handler()
1109 data->timestamp); in kxcjk1013_event_handler()
1113 if (data->dready_trigger_on) in kxcjk1013_event_handler()
1116 ret = i2c_smbus_read_byte_data(data->client, KXCJK1013_REG_INT_REL); in kxcjk1013_event_handler()
1118 dev_err(&data->client->dev, "Error reading reg_int_rel\n"); in kxcjk1013_event_handler()
1126 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_data_rdy_trig_poll() local
1128 data->timestamp = iio_get_time_ns(); in kxcjk1013_data_rdy_trig_poll()
1130 if (data->dready_trigger_on) in kxcjk1013_data_rdy_trig_poll()
1131 iio_trigger_poll(data->dready_trig); in kxcjk1013_data_rdy_trig_poll()
1132 else if (data->motion_trigger_on) in kxcjk1013_data_rdy_trig_poll()
1133 iio_trigger_poll(data->motion_trig); in kxcjk1013_data_rdy_trig_poll()
1135 if (data->ev_enable_state) in kxcjk1013_data_rdy_trig_poll()
1158 struct kxcjk1013_data *data) in kxcjk1013_gpio_probe() argument
1166 if (data->is_smo8500_device) in kxcjk1013_gpio_probe()
1188 struct kxcjk1013_data *data; in kxcjk1013_probe() local
1194 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in kxcjk1013_probe()
1198 data = iio_priv(indio_dev); in kxcjk1013_probe()
1200 data->client = client; in kxcjk1013_probe()
1204 data->active_high_intr = pdata->active_high_intr; in kxcjk1013_probe()
1206 data->active_high_intr = true; /* default polarity */ in kxcjk1013_probe()
1209 data->chipset = (enum kx_chipset)(id->driver_data); in kxcjk1013_probe()
1213 &data->chipset, in kxcjk1013_probe()
1214 &data->is_smo8500_device); in kxcjk1013_probe()
1218 ret = kxcjk1013_chip_init(data); in kxcjk1013_probe()
1222 mutex_init(&data->mutex); in kxcjk1013_probe()
1232 client->irq = kxcjk1013_gpio_probe(client, data); in kxcjk1013_probe()
1244 data->dready_trig = devm_iio_trigger_alloc(&client->dev, in kxcjk1013_probe()
1248 if (!data->dready_trig) { in kxcjk1013_probe()
1253 data->motion_trig = devm_iio_trigger_alloc(&client->dev, in kxcjk1013_probe()
1257 if (!data->motion_trig) { in kxcjk1013_probe()
1262 data->dready_trig->dev.parent = &client->dev; in kxcjk1013_probe()
1263 data->dready_trig->ops = &kxcjk1013_trigger_ops; in kxcjk1013_probe()
1264 iio_trigger_set_drvdata(data->dready_trig, indio_dev); in kxcjk1013_probe()
1265 indio_dev->trig = data->dready_trig; in kxcjk1013_probe()
1267 ret = iio_trigger_register(data->dready_trig); in kxcjk1013_probe()
1271 data->motion_trig->dev.parent = &client->dev; in kxcjk1013_probe()
1272 data->motion_trig->ops = &kxcjk1013_trigger_ops; in kxcjk1013_probe()
1273 iio_trigger_set_drvdata(data->motion_trig, indio_dev); in kxcjk1013_probe()
1274 ret = iio_trigger_register(data->motion_trig); in kxcjk1013_probe()
1276 data->motion_trig = NULL; in kxcjk1013_probe()
1311 if (data->dready_trig) in kxcjk1013_probe()
1314 if (data->dready_trig) in kxcjk1013_probe()
1315 iio_trigger_unregister(data->dready_trig); in kxcjk1013_probe()
1316 if (data->motion_trig) in kxcjk1013_probe()
1317 iio_trigger_unregister(data->motion_trig); in kxcjk1013_probe()
1319 kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_probe()
1327 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_remove() local
1335 if (data->dready_trig) { in kxcjk1013_remove()
1337 iio_trigger_unregister(data->dready_trig); in kxcjk1013_remove()
1338 iio_trigger_unregister(data->motion_trig); in kxcjk1013_remove()
1341 mutex_lock(&data->mutex); in kxcjk1013_remove()
1342 kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_remove()
1343 mutex_unlock(&data->mutex); in kxcjk1013_remove()
1352 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_suspend() local
1355 mutex_lock(&data->mutex); in kxcjk1013_suspend()
1356 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_suspend()
1357 mutex_unlock(&data->mutex); in kxcjk1013_suspend()
1365 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_resume() local
1368 mutex_lock(&data->mutex); in kxcjk1013_resume()
1369 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_resume()
1370 mutex_unlock(&data->mutex); in kxcjk1013_resume()
1380 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_runtime_suspend() local
1383 ret = kxcjk1013_set_mode(data, STANDBY); in kxcjk1013_runtime_suspend()
1385 dev_err(&data->client->dev, "powering off device failed\n"); in kxcjk1013_runtime_suspend()
1394 struct kxcjk1013_data *data = iio_priv(indio_dev); in kxcjk1013_runtime_resume() local
1398 ret = kxcjk1013_set_mode(data, OPERATION); in kxcjk1013_runtime_resume()
1402 sleep_val = kxcjk1013_get_startup_times(data); in kxcjk1013_runtime_resume()