summaryrefslogtreecommitdiff
path: root/drivers/staging/iio/accel/sca3000_ring.c
diff options
context:
space:
mode:
authorManuel Stahl <slm@iis.fraunhofer.de>2010-09-09 17:40:11 +0200
committerGreg Kroah-Hartman <gregkh@suse.de>2010-09-14 16:37:58 -0700
commit6267ea655f141bfd0955910b728571fb2a4ed1df (patch)
tree377d8937965371e144b516b6264b5c27eae78d79 /drivers/staging/iio/accel/sca3000_ring.c
parentb68d58a84b42d6213e46948b8f4cb95b8ed0efec (diff)
staging: iio: sca3000 convert byte order of ring buffer data
Signed-off-by: Manuel Stahl <manuel.stahl@iis.fraunhofer.de> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/accel/sca3000_ring.c')
-rw-r--r--drivers/staging/iio/accel/sca3000_ring.c14
1 files changed, 13 insertions, 1 deletions
diff --git a/drivers/staging/iio/accel/sca3000_ring.c b/drivers/staging/iio/accel/sca3000_ring.c
index 09836c4f18b8..c93f85cacbc0 100644
--- a/drivers/staging/iio/accel/sca3000_ring.c
+++ b/drivers/staging/iio/accel/sca3000_ring.c
@@ -53,7 +53,8 @@ static int sca3000_rip_hw_rb(struct iio_ring_buffer *r,
struct iio_dev *indio_dev = hw_ring->private;
struct sca3000_state *st = indio_dev->dev_data;
u8 *rx;
- int ret, num_available, num_read = 0;
+ s16 *samples;
+ int ret, i, num_available, num_read = 0;
int bytes_per_sample = 1;
if (st->bpse == 11)
@@ -87,6 +88,17 @@ static int sca3000_rip_hw_rb(struct iio_ring_buffer *r,
ret = sca3000_read_data(st,
SCA3000_REG_ADDR_RING_OUT,
data, num_read);
+
+ /* Convert byte order and shift to default resolution */
+ if (st->bpse == 11) {
+ samples = (s16*)(*data+1);
+ for (i = 0; i < (num_read/2); i++) {
+ samples[i] = be16_to_cpup(
+ (__be16 *)&(samples[i]));
+ samples[i] >>= 3;
+ }
+ }
+
error_ret:
mutex_unlock(&st->lock);