diff options
-rw-r--r-- | drivers/staging/iio/resolver/ad2s1200.c | 7 |
1 files changed, 7 insertions, 0 deletions
diff --git a/drivers/staging/iio/resolver/ad2s1200.c b/drivers/staging/iio/resolver/ad2s1200.c index b6c3a3c8f7fe..357fe3c382b3 100644 --- a/drivers/staging/iio/resolver/ad2s1200.c +++ b/drivers/staging/iio/resolver/ad2s1200.c @@ -9,6 +9,7 @@ * published by the Free Software Foundation. * */ + #include <linux/bitops.h> #include <linux/delay.h> #include <linux/device.h> @@ -52,10 +53,12 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev, mutex_lock(&st->lock); gpio_set_value(st->sample, 0); + /* delay (6 * AD2S1200_TSCLK + 20) nano seconds */ udelay(1); gpio_set_value(st->sample, 1); gpio_set_value(st->rdvel, !!(chan->type == IIO_ANGL)); + ret = spi_read(st->sdev, st->rx, 2); if (ret < 0) { mutex_unlock(&st->lock); @@ -75,9 +78,11 @@ static int ad2s1200_read_raw(struct iio_dev *indio_dev, mutex_unlock(&st->lock); return -EINVAL; } + /* delay (2 * AD2S1200_TSCLK + 20) ns for sample pulse */ udelay(1); mutex_unlock(&st->lock); + return IIO_VAL_INT; } @@ -115,9 +120,11 @@ static int ad2s1200_probe(struct spi_device *spi) return ret; } } + indio_dev = devm_iio_device_alloc(&spi->dev, sizeof(*st)); if (!indio_dev) return -ENOMEM; + spi_set_drvdata(spi, indio_dev); st = iio_priv(indio_dev); mutex_init(&st->lock); |