Lines Matching refs:data

210 static int sx9500_inc_users(struct sx9500_data *data, int *counter,  in sx9500_inc_users()  argument
218 return regmap_update_bits(data->regmap, reg, bitmask, bitmask); in sx9500_inc_users()
221 static int sx9500_dec_users(struct sx9500_data *data, int *counter, in sx9500_dec_users() argument
229 return regmap_update_bits(data->regmap, reg, bitmask, 0); in sx9500_dec_users()
232 static int sx9500_inc_chan_users(struct sx9500_data *data, int chan) in sx9500_inc_chan_users() argument
234 return sx9500_inc_users(data, &data->channel_users[chan], in sx9500_inc_chan_users()
238 static int sx9500_dec_chan_users(struct sx9500_data *data, int chan) in sx9500_dec_chan_users() argument
240 return sx9500_dec_users(data, &data->channel_users[chan], in sx9500_dec_chan_users()
244 static int sx9500_inc_data_rdy_users(struct sx9500_data *data) in sx9500_inc_data_rdy_users() argument
246 return sx9500_inc_users(data, &data->data_rdy_users, in sx9500_inc_data_rdy_users()
250 static int sx9500_dec_data_rdy_users(struct sx9500_data *data) in sx9500_dec_data_rdy_users() argument
252 return sx9500_dec_users(data, &data->data_rdy_users, in sx9500_dec_data_rdy_users()
256 static int sx9500_inc_close_far_users(struct sx9500_data *data) in sx9500_inc_close_far_users() argument
258 return sx9500_inc_users(data, &data->close_far_users, in sx9500_inc_close_far_users()
263 static int sx9500_dec_close_far_users(struct sx9500_data *data) in sx9500_dec_close_far_users() argument
265 return sx9500_dec_users(data, &data->close_far_users, in sx9500_dec_close_far_users()
270 static int sx9500_read_prox_data(struct sx9500_data *data, in sx9500_read_prox_data() argument
277 ret = regmap_write(data->regmap, SX9500_REG_SENSOR_SEL, chan->channel); in sx9500_read_prox_data()
281 ret = regmap_bulk_read(data->regmap, SX9500_REG_USE_MSB, &regval, 2); in sx9500_read_prox_data()
294 static int sx9500_wait_for_sample(struct sx9500_data *data) in sx9500_wait_for_sample() argument
299 ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, &val); in sx9500_wait_for_sample()
310 static int sx9500_read_proximity(struct sx9500_data *data, in sx9500_read_proximity() argument
316 mutex_lock(&data->mutex); in sx9500_read_proximity()
318 ret = sx9500_inc_chan_users(data, chan->channel); in sx9500_read_proximity()
322 ret = sx9500_inc_data_rdy_users(data); in sx9500_read_proximity()
326 mutex_unlock(&data->mutex); in sx9500_read_proximity()
328 if (data->client->irq > 0) in sx9500_read_proximity()
329 ret = wait_for_completion_interruptible(&data->completion); in sx9500_read_proximity()
331 ret = sx9500_wait_for_sample(data); in sx9500_read_proximity()
333 mutex_lock(&data->mutex); in sx9500_read_proximity()
338 ret = sx9500_read_prox_data(data, chan, val); in sx9500_read_proximity()
342 ret = sx9500_dec_data_rdy_users(data); in sx9500_read_proximity()
346 ret = sx9500_dec_chan_users(data, chan->channel); in sx9500_read_proximity()
355 sx9500_dec_data_rdy_users(data); in sx9500_read_proximity()
357 sx9500_dec_chan_users(data, chan->channel); in sx9500_read_proximity()
359 mutex_unlock(&data->mutex); in sx9500_read_proximity()
360 reinit_completion(&data->completion); in sx9500_read_proximity()
365 static int sx9500_read_samp_freq(struct sx9500_data *data, in sx9500_read_samp_freq() argument
371 mutex_lock(&data->mutex); in sx9500_read_samp_freq()
372 ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, &regval); in sx9500_read_samp_freq()
373 mutex_unlock(&data->mutex); in sx9500_read_samp_freq()
389 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_read_raw() local
397 return sx9500_read_proximity(data, chan, val); in sx9500_read_raw()
399 return sx9500_read_samp_freq(data, val, val2); in sx9500_read_raw()
408 static int sx9500_set_samp_freq(struct sx9500_data *data, in sx9500_set_samp_freq() argument
421 mutex_lock(&data->mutex); in sx9500_set_samp_freq()
423 ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0, in sx9500_set_samp_freq()
427 mutex_unlock(&data->mutex); in sx9500_set_samp_freq()
436 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_write_raw() local
442 return sx9500_set_samp_freq(data, val, val2); in sx9500_write_raw()
454 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_irq_handler() local
456 if (data->trigger_enabled) in sx9500_irq_handler()
457 iio_trigger_poll(data->trig); in sx9500_irq_handler()
472 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_push_events() local
474 ret = regmap_read(data->regmap, SX9500_REG_STAT, &val); in sx9500_push_events()
476 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in sx9500_push_events()
486 if (!data->event_enabled[chan]) in sx9500_push_events()
488 if (new_prox == data->prox_stat[chan]) in sx9500_push_events()
496 data->prox_stat[chan] = new_prox; in sx9500_push_events()
503 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_irq_thread_handler() local
507 mutex_lock(&data->mutex); in sx9500_irq_thread_handler()
509 ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val); in sx9500_irq_thread_handler()
511 dev_err(&data->client->dev, "i2c transfer error in irq\n"); in sx9500_irq_thread_handler()
519 complete_all(&data->completion); in sx9500_irq_thread_handler()
522 mutex_unlock(&data->mutex); in sx9500_irq_thread_handler()
532 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_read_event_config() local
538 return data->event_enabled[chan->channel]; in sx9500_read_event_config()
547 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_write_event_config() local
554 mutex_lock(&data->mutex); in sx9500_write_event_config()
557 ret = sx9500_inc_chan_users(data, chan->channel); in sx9500_write_event_config()
560 ret = sx9500_inc_close_far_users(data); in sx9500_write_event_config()
564 ret = sx9500_dec_chan_users(data, chan->channel); in sx9500_write_event_config()
567 ret = sx9500_dec_close_far_users(data); in sx9500_write_event_config()
572 data->event_enabled[chan->channel] = state; in sx9500_write_event_config()
577 sx9500_dec_chan_users(data, chan->channel); in sx9500_write_event_config()
579 sx9500_inc_chan_users(data, chan->channel); in sx9500_write_event_config()
581 mutex_unlock(&data->mutex); in sx9500_write_event_config()
588 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_update_scan_mode() local
590 mutex_lock(&data->mutex); in sx9500_update_scan_mode()
591 kfree(data->buffer); in sx9500_update_scan_mode()
592 data->buffer = kzalloc(indio_dev->scan_bytes, GFP_KERNEL); in sx9500_update_scan_mode()
593 mutex_unlock(&data->mutex); in sx9500_update_scan_mode()
595 if (data->buffer == NULL) in sx9500_update_scan_mode()
627 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_set_trigger_state() local
630 mutex_lock(&data->mutex); in sx9500_set_trigger_state()
633 ret = sx9500_inc_data_rdy_users(data); in sx9500_set_trigger_state()
635 ret = sx9500_dec_data_rdy_users(data); in sx9500_set_trigger_state()
639 data->trigger_enabled = state; in sx9500_set_trigger_state()
642 mutex_unlock(&data->mutex); in sx9500_set_trigger_state()
656 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_trigger_handler() local
659 mutex_lock(&data->mutex); in sx9500_trigger_handler()
663 ret = sx9500_read_prox_data(data, &indio_dev->channels[bit], in sx9500_trigger_handler()
668 data->buffer[i++] = val; in sx9500_trigger_handler()
671 iio_push_to_buffers_with_timestamp(indio_dev, data->buffer, in sx9500_trigger_handler()
675 mutex_unlock(&data->mutex); in sx9500_trigger_handler()
684 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_buffer_preenable() local
687 mutex_lock(&data->mutex); in sx9500_buffer_preenable()
691 ret = sx9500_inc_chan_users(data, i); in sx9500_buffer_preenable()
699 sx9500_dec_chan_users(data, i); in sx9500_buffer_preenable()
701 mutex_unlock(&data->mutex); in sx9500_buffer_preenable()
708 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_buffer_predisable() local
713 mutex_lock(&data->mutex); in sx9500_buffer_predisable()
717 ret = sx9500_dec_chan_users(data, i); in sx9500_buffer_predisable()
725 sx9500_inc_chan_users(data, i); in sx9500_buffer_predisable()
727 mutex_unlock(&data->mutex); in sx9500_buffer_predisable()
801 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_init_compensation() local
805 ret = regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0, in sx9500_init_compensation()
812 ret = regmap_read(data->regmap, SX9500_REG_STAT, &val); in sx9500_init_compensation()
820 dev_err(&data->client->dev, "initial compensation timed out"); in sx9500_init_compensation()
825 regmap_update_bits(data->regmap, SX9500_REG_PROX_CTRL0, in sx9500_init_compensation()
832 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_init_device() local
836 if (data->gpiod_rst) { in sx9500_init_device()
837 gpiod_set_value_cansleep(data->gpiod_rst, 0); in sx9500_init_device()
839 gpiod_set_value_cansleep(data->gpiod_rst, 1); in sx9500_init_device()
843 ret = regmap_write(data->regmap, SX9500_REG_IRQ_MSK, 0); in sx9500_init_device()
847 ret = regmap_write(data->regmap, SX9500_REG_RESET, in sx9500_init_device()
852 ret = regmap_read(data->regmap, SX9500_REG_IRQ_SRC, &val); in sx9500_init_device()
857 ret = regmap_write(data->regmap, in sx9500_init_device()
868 struct sx9500_data *data) in sx9500_gpio_probe() argument
877 data->gpiod_rst = devm_gpiod_get_index(dev, SX9500_GPIO_RESET, in sx9500_gpio_probe()
879 if (IS_ERR(data->gpiod_rst)) { in sx9500_gpio_probe()
881 data->gpiod_rst = NULL; in sx9500_gpio_probe()
890 struct sx9500_data *data; in sx9500_probe() local
892 indio_dev = devm_iio_device_alloc(&client->dev, sizeof(*data)); in sx9500_probe()
896 data = iio_priv(indio_dev); in sx9500_probe()
897 data->client = client; in sx9500_probe()
898 mutex_init(&data->mutex); in sx9500_probe()
899 init_completion(&data->completion); in sx9500_probe()
900 data->trigger_enabled = false; in sx9500_probe()
902 data->regmap = devm_regmap_init_i2c(client, &sx9500_regmap_config); in sx9500_probe()
903 if (IS_ERR(data->regmap)) in sx9500_probe()
904 return PTR_ERR(data->regmap); in sx9500_probe()
914 sx9500_gpio_probe(client, data); in sx9500_probe()
930 data->trig = devm_iio_trigger_alloc(&client->dev, in sx9500_probe()
932 if (!data->trig) in sx9500_probe()
935 data->trig->dev.parent = &client->dev; in sx9500_probe()
936 data->trig->ops = &sx9500_trigger_ops; in sx9500_probe()
937 iio_trigger_set_drvdata(data->trig, indio_dev); in sx9500_probe()
939 ret = iio_trigger_register(data->trig); in sx9500_probe()
960 iio_trigger_unregister(data->trig); in sx9500_probe()
968 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_remove() local
973 iio_trigger_unregister(data->trig); in sx9500_remove()
974 kfree(data->buffer); in sx9500_remove()
983 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_suspend() local
986 mutex_lock(&data->mutex); in sx9500_suspend()
987 ret = regmap_read(data->regmap, SX9500_REG_PROX_CTRL0, in sx9500_suspend()
988 &data->suspend_ctrl0); in sx9500_suspend()
996 ret = regmap_write(data->regmap, SX9500_REG_PROX_CTRL0, 0); in sx9500_suspend()
999 mutex_unlock(&data->mutex); in sx9500_suspend()
1006 struct sx9500_data *data = iio_priv(indio_dev); in sx9500_resume() local
1009 mutex_lock(&data->mutex); in sx9500_resume()
1010 ret = regmap_write(data->regmap, SX9500_REG_PROX_CTRL0, in sx9500_resume()
1011 data->suspend_ctrl0); in sx9500_resume()
1012 mutex_unlock(&data->mutex); in sx9500_resume()