static int hmc5843_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct hmc5843_data *data = iio_priv(indio_dev); unsigned int rval; int ret; switch (mask) { case IIO_CHAN_INFO_RAW: return hmc5843_read_measurement(data, chan->scan_index, val); case IIO_CHAN_INFO_SCALE: ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_B, &rval); if (ret < 0) return ret; rval >>= HMC5843_RANGE_GAIN_OFFSET; *val = 0; *val2 = data->variant->regval_to_nanoscale[rval]; return IIO_VAL_INT_PLUS_NANO; case IIO_CHAN_INFO_SAMP_FREQ: ret = regmap_read(data->regmap, HMC5843_CONFIG_REG_A, &rval); if (ret < 0) return ret; rval >>= HMC5843_RATE_OFFSET; *val = data->variant->regval_to_samp_freq[rval][0]; *val2 = data->variant->regval_to_samp_freq[rval][1]; return IIO_VAL_INT_PLUS_MICRO; } return -EINVAL; }
static int hmc5843_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct hmc5843_data *data = iio_priv(indio_dev); switch (mask) { case 0: return hmc5843_read_measurement(indio_dev, chan->address, val); case IIO_CHAN_INFO_SCALE: *val = 0; *val2 = hmc5843_regval_to_nanoscale[data->range]; return IIO_VAL_INT_PLUS_NANO; }; return -EINVAL; }
static int hmc5843_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { struct hmc5843_data *data = iio_priv(indio_dev); switch (mask) { case IIO_CHAN_INFO_RAW: return hmc5843_read_measurement(data, chan->scan_index, val); case IIO_CHAN_INFO_SCALE: *val = 0; *val2 = data->variant->regval_to_nanoscale[data->range]; return IIO_VAL_INT_PLUS_NANO; case IIO_CHAN_INFO_SAMP_FREQ: *val = data->variant->regval_to_samp_freq[data->rate][0]; *val2 = data->variant->regval_to_samp_freq[data->rate][1]; return IIO_VAL_INT_PLUS_MICRO; } return -EINVAL; }