Lines Matching defs:data

88  * struct as73211_data - Instance data for one AS73211
179 static unsigned int as73211_integration_time_1024cyc(struct as73211_data *data)
185 return BIT(FIELD_GET(AS73211_CREG1_TIME_MASK, data->creg1));
188 static unsigned int as73211_integration_time_us(struct as73211_data *data,
201 return BIT(3 - FIELD_GET(AS73211_CREG3_CCLK_MASK, data->creg3)) *
205 static void as73211_integration_time_calc_avail(struct as73211_data *data)
209 for (i = 0; i < ARRAY_SIZE(data->int_time_avail) / 2; i++) {
210 unsigned int time_us = as73211_integration_time_us(data, BIT(i));
212 data->int_time_avail[i * 2 + 0] = time_us / USEC_PER_SEC;
213 data->int_time_avail[i * 2 + 1] = time_us % USEC_PER_SEC;
217 static unsigned int as73211_gain(struct as73211_data *data)
220 return BIT(AS73211_CREG1_GAIN_1 - FIELD_GET(AS73211_CREG1_GAIN_MASK, data->creg1));
224 static int as73211_req_data(struct as73211_data *data)
226 unsigned int time_us = as73211_integration_time_us(data,
227 as73211_integration_time_1024cyc(data));
228 struct device *dev = &data->client->dev;
233 if (data->client->irq)
234 reinit_completion(&data->completion);
240 i2c_lock_bus(data->client->adapter, I2C_LOCK_SEGMENT);
242 data->osr &= ~AS73211_OSR_DOS_MASK;
243 data->osr |= AS73211_OSR_DOS_MEASURE | AS73211_OSR_SS;
245 smbus_data.byte = data->osr;
246 ret = __i2c_smbus_xfer(data->client->adapter, data->client->addr,
247 data->client->flags, I2C_SMBUS_WRITE,
250 i2c_unlock_bus(data->client->adapter, I2C_LOCK_SEGMENT);
258 data->osr &= ~AS73211_OSR_SS;
264 if (data->client->irq) {
265 ret = wait_for_completion_timeout(&data->completion, usecs_to_jiffies(time_us));
268 i2c_unlock_bus(data->client->adapter, I2C_LOCK_SEGMENT);
276 i2c_unlock_bus(data->client->adapter, I2C_LOCK_SEGMENT);
278 ret = i2c_smbus_read_word_data(data->client, AS73211_OUT_OSR_STATUS);
293 dev_err(dev, "%s() No new data available\n", __func__);
322 struct as73211_data *data = iio_priv(indio_dev);
332 ret = as73211_req_data(data);
338 ret = i2c_smbus_read_word_data(data->client, chan->address);
374 scale /= as73211_gain(data);
375 scale /= as73211_integration_time_1024cyc(data);
385 *val = BIT(FIELD_GET(AS73211_CREG3_CCLK_MASK, data->creg3)) *
390 *val = as73211_gain(data);
396 mutex_lock(&data->mutex);
397 time_us = as73211_integration_time_us(data, as73211_integration_time_1024cyc(data));
398 mutex_unlock(&data->mutex);
411 struct as73211_data *data = iio_priv(indio_dev);
427 *length = ARRAY_SIZE(data->int_time_avail);
428 *vals = data->int_time_avail;
441 struct as73211_data *data = iio_priv(indio_dev);
458 data->creg3 &= ~AS73211_CREG3_CCLK_MASK;
459 data->creg3 |= FIELD_PREP(AS73211_CREG3_CCLK_MASK, reg_bits);
460 as73211_integration_time_calc_avail(data);
462 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_CREG3, data->creg3);
479 data->creg1 &= ~AS73211_CREG1_GAIN_MASK;
480 data->creg1 |= FIELD_PREP(AS73211_CREG1_GAIN_MASK, reg_bits);
482 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_CREG1, data->creg1);
494 int f_samp_1_024mhz = BIT(FIELD_GET(AS73211_CREG3_CCLK_MASK, data->creg3));
508 data->creg1 &= ~AS73211_CREG1_TIME_MASK;
509 data->creg1 |= FIELD_PREP(AS73211_CREG1_TIME_MASK, reg_bits);
511 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_CREG1, data->creg1);
525 struct as73211_data *data = iio_priv(indio_dev);
528 mutex_lock(&data->mutex);
535 if ((data->osr & AS73211_OSR_DOS_MASK) != AS73211_OSR_DOS_CONFIG) {
536 data->osr &= ~AS73211_OSR_DOS_MASK;
537 data->osr |= AS73211_OSR_DOS_CONFIG;
539 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_OSR, data->osr);
549 mutex_unlock(&data->mutex);
555 struct as73211_data *data = iio_priv(priv);
557 complete(&data->completion);
566 struct as73211_data *data = iio_priv(indio_dev);
573 mutex_lock(&data->mutex);
575 data_result = as73211_req_data(data);
577 goto done; /* don't push any data for errors other than EOVERFLOW */
584 .addr = data->client->addr,
590 .addr = data->client->addr,
597 ret = i2c_transfer(data->client->adapter, msgs, ARRAY_SIZE(msgs));
604 ret = i2c_master_recv(data->client,
623 mutex_unlock(&data->mutex);
637 struct as73211_data *data = iio_priv(indio_dev);
640 mutex_lock(&data->mutex);
643 data->osr &= ~AS73211_OSR_PD;
645 data->osr |= AS73211_OSR_PD;
647 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_OSR, data->osr);
649 mutex_unlock(&data->mutex);
657 static void as73211_power_disable(void *data)
659 struct iio_dev *indio_dev = data;
667 struct as73211_data *data;
671 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
675 data = iio_priv(indio_dev);
677 data->client = client;
679 mutex_init(&data->mutex);
680 init_completion(&data->completion);
688 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_OSR);
691 data->osr = ret;
694 data->osr |= AS73211_OSR_SW_RES;
695 ret = i2c_smbus_write_byte_data(data->client, AS73211_REG_OSR, data->osr);
699 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_OSR);
702 data->osr = ret;
708 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_AGEN);
717 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_CREG1);
720 data->creg1 = ret;
722 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_CREG2);
725 data->creg2 = ret;
727 ret = i2c_smbus_read_byte_data(data->client, AS73211_REG_CREG3);
730 data->creg3 = ret;
731 as73211_integration_time_calc_avail(data);