static int adis16080_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask) { int ret = -EINVAL; u16 ut = 0; /* Take the iio_dev status lock */ mutex_lock(&indio_dev->mlock); switch (mask) { case IIO_CHAN_INFO_RAW: ret = adis16080_spi_write(indio_dev, chan->address | ADIS16080_DIN_WRITE); if (ret < 0) break; ret = adis16080_spi_read(indio_dev, &ut); if (ret < 0) break; *val = ut; ret = IIO_VAL_INT; break; } mutex_unlock(&indio_dev->mlock); return ret; }
static ssize_t adis16080_read(struct device *dev, struct device_attribute *attr, char *buf) { struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); struct iio_dev *indio_dev = dev_get_drvdata(dev); u16 val = 0; ssize_t ret; /* Take the iio_dev status lock */ mutex_lock(&indio_dev->mlock); ret = adis16080_spi_write(dev, this_attr->address | ADIS16080_DIN_WRITE); if (ret < 0) goto error_ret; ret = adis16080_spi_read(dev, &val); error_ret: mutex_unlock(&indio_dev->mlock); if (ret == 0) return sprintf(buf, "%d\n", val); else return ret; }