Lines Matching defs:data
139 * Averaging enables additional sampling of the sensor data to reduce the noise
158 static int tmag5273_get_measure(struct tmag5273_data *data, s16 *t, s16 *x,
165 mutex_lock(&data->lock);
173 ret = regmap_read_poll_timeout(data->map, TMAG5273_CONV_STATUS, status,
177 dev_err(data->dev, "timeout waiting for measurement\n");
181 ret = regmap_bulk_read(data->map, TMAG5273_T_MSB_RESULT, reg_data,
190 ret = regmap_bulk_read(data->map, TMAG5273_ANGLE_RESULT_MSB,
201 ret = regmap_read(data->map, TMAG5273_MAGNITUDE_RESULT, &val);
207 mutex_unlock(&data->lock);
211 static int tmag5273_write_osr(struct tmag5273_data *data, int val)
215 if (val == data->conv_avg)
224 data->conv_avg = val;
226 return regmap_update_bits(data->map, TMAG5273_DEVICE_CONFIG_1,
231 static int tmag5273_write_scale(struct tmag5273_data *data, int scale_micro)
237 if (tmag5273_scale[data->version][i].micro == scale_micro)
242 data->scale_index = i;
244 if (data->scale_index == MAGN_RANGE_LOW)
249 return regmap_update_bits(data->map, TMAG5273_SENSOR_CONFIG_2,
258 struct tmag5273_data *data = iio_priv(indio_dev);
270 *vals = (int *)tmag5273_scale[data->version];
271 *length = ARRAY_SIZE(tmag5273_scale[data->version]) *
286 struct tmag5273_data *data = iio_priv(indio_dev);
294 ret = pm_runtime_resume_and_get(data->dev);
298 ret = tmag5273_get_measure(data, &t, &x, &y, &z, &angle, &magnitude);
300 pm_runtime_mark_last_busy(data->dev);
301 pm_runtime_put_autosuspend(data->dev);
342 *val2 = tmag5273_scale[data->version]
343 [data->scale_index].micro;
365 *val = data->conv_avg;
377 struct tmag5273_data *data = iio_priv(indio_dev);
381 return tmag5273_write_osr(data, val);
387 return tmag5273_write_scale(data, val2);
491 static int tmag5273_set_operating_mode(struct tmag5273_data *data,
494 return regmap_write(data->map, TMAG5273_DEVICE_CONFIG_2, val);
497 static void tmag5273_read_device_property(struct tmag5273_data *data)
499 struct device *dev = data->dev;
503 data->angle_measurement = TMAG5273_ANGLE_EN_X_Y;
512 data->angle_measurement = ret;
515 static void tmag5273_wake_up(struct tmag5273_data *data)
520 regmap_read(data->map, TMAG5273_DEVICE_ID, &val);
528 static int tmag5273_chip_init(struct tmag5273_data *data)
532 ret = regmap_write(data->map, TMAG5273_DEVICE_CONFIG_1,
536 data->conv_avg = 32;
538 ret = regmap_write(data->map, TMAG5273_DEVICE_CONFIG_2,
543 ret = regmap_write(data->map, TMAG5273_SENSOR_CONFIG_1,
549 ret = regmap_write(data->map, TMAG5273_SENSOR_CONFIG_2,
551 data->angle_measurement));
554 data->scale_index = MAGN_RANGE_LOW;
556 return regmap_write(data->map, TMAG5273_T_CONFIG, TMAG5273_T_CH_EN);
559 static int tmag5273_check_device_id(struct tmag5273_data *data)
564 ret = regmap_read(data->map, TMAG5273_DEVICE_ID, &val);
566 return dev_err_probe(data->dev, ret, "failed to power on device\n");
567 data->version = FIELD_PREP(TMAG5273_VERSION_MASK, val);
569 ret = regmap_bulk_read(data->map, TMAG5273_MANUFACTURER_ID_LSB, &devid,
572 return dev_err_probe(data->dev, ret, "failed to read device ID\n");
573 data->devid = le16_to_cpu(devid);
575 switch (data->devid) {
583 snprintf(data->name, sizeof(data->name), "tmag5273x%1u", data->version);
584 if (data->version < 1 || data->version > 2)
585 dev_warn(data->dev, "Unsupported device %s\n", data->name);
592 dev_warn(data->dev, "Unknown device ID 0x%x\n", data->devid);
597 static void tmag5273_power_down(void *data)
599 tmag5273_set_operating_mode(data, TMAG5273_OP_MODE_SLEEP);
605 struct tmag5273_data *data;
609 indio_dev = devm_iio_device_alloc(dev, sizeof(*data));
613 data = iio_priv(indio_dev);
614 data->dev = dev;
617 data->map = devm_regmap_init_i2c(i2c, &tmag5273_regmap_config);
618 if (IS_ERR(data->map))
619 return dev_err_probe(dev, PTR_ERR(data->map),
622 mutex_init(&data->lock);
628 tmag5273_wake_up(data);
630 ret = tmag5273_check_device_id(data);
634 ret = tmag5273_set_operating_mode(data, TMAG5273_OP_MODE_CONT);
643 * 1) When driver is loaded, but we do not have any data or
649 ret = devm_add_action_or_reset(dev, tmag5273_power_down, data);
665 tmag5273_read_device_property(data);
667 ret = tmag5273_chip_init(data);
673 indio_dev->name = data->name;
690 struct tmag5273_data *data = iio_priv(indio_dev);
693 ret = tmag5273_set_operating_mode(data, TMAG5273_OP_MODE_SLEEP);
703 struct tmag5273_data *data = iio_priv(indio_dev);
706 tmag5273_wake_up(data);
708 ret = tmag5273_set_operating_mode(data, TMAG5273_OP_MODE_CONT);