static int st_accel_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *ch, int *val, int *val2, long mask) { int err; struct st_sensor_data *adata = iio_priv(indio_dev); switch (mask) { case IIO_CHAN_INFO_RAW: err = st_sensors_read_info_raw(indio_dev, ch, val); if (err < 0) goto read_error; return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: *val = 0; *val2 = adata->current_fullscale->gain; return IIO_VAL_INT_PLUS_MICRO; case IIO_CHAN_INFO_SAMP_FREQ: *val = adata->odr; return IIO_VAL_INT; default: return -EINVAL; } read_error: return err; }
static int st_magn_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *ch, int *val, int *val2, long mask) { int err; struct st_sensor_data *mdata = iio_priv(indio_dev); switch (mask) { case IIO_CHAN_INFO_RAW: err = st_sensors_read_info_raw(indio_dev, ch, val); if (err < 0) goto read_error; return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: *val = 0; if ((ch->scan_index == ST_SENSORS_SCAN_Z) && (mdata->current_fullscale->gain2 != 0)) *val2 = mdata->current_fullscale->gain2; else *val2 = mdata->current_fullscale->gain; return IIO_VAL_INT_PLUS_MICRO; case IIO_CHAN_INFO_SAMP_FREQ: *val = mdata->odr; return IIO_VAL_INT; default: return -EINVAL; } read_error: return err; }
static int st_press_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *ch, int *val, int *val2, long mask) { int err; struct st_sensor_data *press_data = iio_priv(indio_dev); switch (mask) { case IIO_CHAN_INFO_RAW: err = st_sensors_read_info_raw(indio_dev, ch, val); if (err < 0) goto read_error; return IIO_VAL_INT; case IIO_CHAN_INFO_SCALE: switch (ch->type) { case IIO_PRESSURE: *val = 0; *val2 = press_data->current_fullscale->gain; return IIO_VAL_INT_PLUS_NANO; case IIO_TEMP: *val = MCELSIUS_PER_CELSIUS; *val2 = press_data->current_fullscale->gain2; return IIO_VAL_FRACTIONAL; default: err = -EINVAL; goto read_error; } case IIO_CHAN_INFO_OFFSET: switch (ch->type) { case IIO_TEMP: *val = ST_PRESS_MILLI_CELSIUS_OFFSET * press_data->current_fullscale->gain2; *val2 = MCELSIUS_PER_CELSIUS; break; default: err = -EINVAL; goto read_error; } return IIO_VAL_FRACTIONAL; case IIO_CHAN_INFO_SAMP_FREQ: *val = press_data->odr; return IIO_VAL_INT; default: return -EINVAL; } read_error: return err; }