Lines Matching refs:data

61 	struct sx_common_data *data = iio_priv(indio_dev);
63 if (data->trigger_enabled)
64 iio_trigger_poll(data->trig);
78 struct sx_common_data *data = iio_priv(indio_dev);
83 ret = regmap_read(data->regmap, data->chip_info->reg_stat, &val);
85 dev_err(&data->client->dev, "i2c transfer error in irq\n");
89 val >>= data->chip_info->stat_offset;
95 prox_changed = (data->chan_prox_stat ^ val) & data->chan_event;
97 for_each_set_bit(chan, &prox_changed, data->chip_info->num_channels) {
107 data->chan_prox_stat = val;
110 static int sx_common_enable_irq(struct sx_common_data *data, unsigned int irq)
112 if (!data->client->irq)
114 return regmap_update_bits(data->regmap, data->chip_info->reg_irq_msk,
115 irq << data->chip_info->irq_msk_offset,
116 irq << data->chip_info->irq_msk_offset);
119 static int sx_common_disable_irq(struct sx_common_data *data, unsigned int irq)
121 if (!data->client->irq)
123 return regmap_update_bits(data->regmap, data->chip_info->reg_irq_msk,
124 irq << data->chip_info->irq_msk_offset, 0);
127 static int sx_common_update_chan_en(struct sx_common_data *data,
134 if ((data->chan_read | data->chan_event) != channels) {
135 ret = regmap_update_bits(data->regmap,
136 data->chip_info->reg_enable_chan,
137 data->chip_info->mask_enable_chan,
142 data->chan_read = chan_read;
143 data->chan_event = chan_event;
147 static int sx_common_get_read_channel(struct sx_common_data *data, int channel)
149 return sx_common_update_chan_en(data, data->chan_read | BIT(channel),
150 data->chan_event);
153 static int sx_common_put_read_channel(struct sx_common_data *data, int channel)
155 return sx_common_update_chan_en(data, data->chan_read & ~BIT(channel),
156 data->chan_event);
159 static int sx_common_get_event_channel(struct sx_common_data *data, int channel)
161 return sx_common_update_chan_en(data, data->chan_read,
162 data->chan_event | BIT(channel));
165 static int sx_common_put_event_channel(struct sx_common_data *data, int channel)
167 return sx_common_update_chan_en(data, data->chan_read,
168 data->chan_event & ~BIT(channel));
173 * @data: Internal data
180 int sx_common_read_proximity(struct sx_common_data *data,
186 mutex_lock(&data->mutex);
188 ret = sx_common_get_read_channel(data, chan->channel);
192 ret = sx_common_enable_irq(data, SX_COMMON_CONVDONE_IRQ);
196 mutex_unlock(&data->mutex);
198 if (data->client->irq) {
199 ret = wait_for_completion_interruptible(&data->completion);
200 reinit_completion(&data->completion);
202 ret = data->chip_info->ops.wait_for_sample(data);
205 mutex_lock(&data->mutex);
210 ret = data->chip_info->ops.read_prox_data(data, chan, &rawval);
216 ret = sx_common_disable_irq(data, SX_COMMON_CONVDONE_IRQ);
220 ret = sx_common_put_read_channel(data, chan->channel);
224 mutex_unlock(&data->mutex);
229 sx_common_disable_irq(data, SX_COMMON_CONVDONE_IRQ);
231 sx_common_put_read_channel(data, chan->channel);
233 mutex_unlock(&data->mutex);
253 struct sx_common_data *data = iio_priv(indio_dev);
255 return !!(data->chan_event & BIT(chan->channel));
274 struct sx_common_data *data = iio_priv(indio_dev);
279 if (!!(data->chan_event & BIT(chan->channel)) == state)
282 mutex_lock(&data->mutex);
284 ret = sx_common_get_event_channel(data, chan->channel);
287 if (!(data->chan_event & ~BIT(chan->channel))) {
288 ret = sx_common_enable_irq(data, eventirq);
290 sx_common_put_event_channel(data, chan->channel);
293 ret = sx_common_put_event_channel(data, chan->channel);
296 if (!data->chan_event) {
297 ret = sx_common_disable_irq(data, eventirq);
299 sx_common_get_event_channel(data, chan->channel);
304 mutex_unlock(&data->mutex);
312 struct sx_common_data *data = iio_priv(indio_dev);
315 mutex_lock(&data->mutex);
318 ret = sx_common_enable_irq(data, SX_COMMON_CONVDONE_IRQ);
319 else if (!data->chan_read)
320 ret = sx_common_disable_irq(data, SX_COMMON_CONVDONE_IRQ);
324 data->trigger_enabled = state;
327 mutex_unlock(&data->mutex);
339 struct sx_common_data *data = iio_priv(indio_dev);
343 mutex_lock(&data->mutex);
345 ret = regmap_read(data->regmap, SX_COMMON_REG_IRQ_SRC, &val);
347 dev_err(&data->client->dev, "i2c transfer error in irq\n");
351 if (val & ((SX_COMMON_FAR_IRQ | SX_COMMON_CLOSE_IRQ) << data->chip_info->irq_msk_offset))
354 if (val & (SX_COMMON_CONVDONE_IRQ << data->chip_info->irq_msk_offset))
355 complete(&data->completion);
358 mutex_unlock(&data->mutex);
367 struct sx_common_data *data = iio_priv(indio_dev);
371 mutex_lock(&data->mutex);
375 ret = data->chip_info->ops.read_prox_data(data,
381 data->buffer.channels[i++] = val;
384 iio_push_to_buffers_with_timestamp(indio_dev, &data->buffer,
388 mutex_unlock(&data->mutex);
397 struct sx_common_data *data = iio_priv(indio_dev);
401 mutex_lock(&data->mutex);
406 ret = sx_common_update_chan_en(data, channels, data->chan_event);
407 mutex_unlock(&data->mutex);
413 struct sx_common_data *data = iio_priv(indio_dev);
416 mutex_lock(&data->mutex);
417 ret = sx_common_update_chan_en(data, 0, data->chan_event);
418 mutex_unlock(&data->mutex);
452 struct sx_common_data *data = iio_priv(indio_dev);
458 ret = regmap_write(data->regmap, data->chip_info->reg_reset,
466 ret = regmap_read(data->regmap, SX_COMMON_REG_IRQ_SRC, &val);
471 for (i = 0; i < data->chip_info->num_default_regs; i++) {
472 initval = data->chip_info->ops.get_default_reg(dev, i, &tmp);
473 ret = regmap_write(data->regmap, initval->reg, initval->def);
478 return data->chip_info->ops.init_compensation(indio_dev);
494 struct sx_common_data *data;
497 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
501 data = iio_priv(indio_dev);
503 data->chip_info = chip_info;
504 data->client = client;
505 mutex_init(&data->mutex);
506 init_completion(&data->completion);
508 data->regmap = devm_regmap_init_i2c(client, regmap_config);
509 if (IS_ERR(data->regmap))
510 return dev_err_probe(dev, PTR_ERR(data->regmap),
521 ret = data->chip_info->ops.check_whoami(dev, indio_dev);
527 indio_dev->channels = data->chip_info->iio_channels;
528 indio_dev->num_channels = data->chip_info->num_iio_channels;
529 indio_dev->info = &data->chip_info->iio_info;
546 data->trig = devm_iio_trigger_alloc(dev, "%s-dev%d",
549 if (!data->trig)
552 data->trig->ops = &sx_common_trigger_ops;
553 iio_trigger_set_drvdata(data->trig, indio_dev);
555 ret = devm_iio_trigger_register(dev, data->trig);