diff options
author | Jonathan Cameron <jic23@cam.ac.uk> | 2011-10-26 12:41:36 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@suse.de> | 2011-11-26 19:35:04 -0500 |
commit | c8a9f8056f40f6201b84fdddb49a1c62630902c5 (patch) | |
tree | ec883343656925d7f0e88decf16689c4f47b8822 /drivers/staging/iio/gyro/adis16260_core.c | |
parent | 924f8a21dd13223cc1493a916c6769cf73e0d45e (diff) |
staging:iio:treewide only use shared to decide on interfaces
Internally the fact that say scale is shared across channels is
actually of remarkably little interest. Hence lets not store it.
Numerous devices have weird combinations of channels sharing
scale anyway so it is not as though this was really telling
us much. Note however that we do still use the shared sysfs
attrs thus massively reducing the number of attrs in complex
drivers.
Side effect is that certain drivers that were abusing this
(mostly my work) needed to do a few more checks on what the
channel they are being queried on actually is.
This is also helpful for in kernel interfaces where we
just want to query the scale and don't care whether it
is shared with other channels or not.
Signed-off-by: Jonathan Cameron <jic23@cam.ac.uk>
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
Diffstat (limited to 'drivers/staging/iio/gyro/adis16260_core.c')
-rw-r--r-- | drivers/staging/iio/gyro/adis16260_core.c | 27 |
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/staging/iio/gyro/adis16260_core.c b/drivers/staging/iio/gyro/adis16260_core.c index 4f5a7cb3f7e..e86ce6a1611 100644 --- a/drivers/staging/iio/gyro/adis16260_core.c +++ b/drivers/staging/iio/gyro/adis16260_core.c | |||
@@ -390,9 +390,9 @@ enum adis16260_channel { | |||
390 | #define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \ | 390 | #define ADIS16260_GYRO_CHANNEL_SET(axis, mod) \ |
391 | struct iio_chan_spec adis16260_channels_##axis[] = { \ | 391 | struct iio_chan_spec adis16260_channels_##axis[] = { \ |
392 | IIO_CHAN(IIO_ANGL_VEL, 1, 0, 0, NULL, 0, mod, \ | 392 | IIO_CHAN(IIO_ANGL_VEL, 1, 0, 0, NULL, 0, mod, \ |
393 | (1 << IIO_CHAN_INFO_CALIBBIAS_SEPARATE) | \ | 393 | IIO_CHAN_INFO_CALIBBIAS_SEPARATE_BIT | \ |
394 | (1 << IIO_CHAN_INFO_CALIBSCALE_SEPARATE) | \ | 394 | IIO_CHAN_INFO_CALIBSCALE_SEPARATE_BIT | \ |
395 | (1 << IIO_CHAN_INFO_SCALE_SEPARATE), \ | 395 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ |
396 | gyro, ADIS16260_SCAN_GYRO, \ | 396 | gyro, ADIS16260_SCAN_GYRO, \ |
397 | IIO_ST('s', 14, 16, 0), 0), \ | 397 | IIO_ST('s', 14, 16, 0), 0), \ |
398 | IIO_CHAN(IIO_ANGL, 1, 0, 0, NULL, 0, mod, \ | 398 | IIO_CHAN(IIO_ANGL, 1, 0, 0, NULL, 0, mod, \ |
@@ -400,16 +400,16 @@ enum adis16260_channel { | |||
400 | angle, ADIS16260_SCAN_ANGL, \ | 400 | angle, ADIS16260_SCAN_ANGL, \ |
401 | IIO_ST('u', 14, 16, 0), 0), \ | 401 | IIO_ST('u', 14, 16, 0), 0), \ |
402 | IIO_CHAN(IIO_TEMP, 0, 1, 0, NULL, 0, 0, \ | 402 | IIO_CHAN(IIO_TEMP, 0, 1, 0, NULL, 0, 0, \ |
403 | (1 << IIO_CHAN_INFO_OFFSET_SEPARATE) | \ | 403 | IIO_CHAN_INFO_OFFSET_SEPARATE_BIT | \ |
404 | (1 << IIO_CHAN_INFO_SCALE_SEPARATE), \ | 404 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ |
405 | temp, ADIS16260_SCAN_TEMP, \ | 405 | temp, ADIS16260_SCAN_TEMP, \ |
406 | IIO_ST('u', 12, 16, 0), 0), \ | 406 | IIO_ST('u', 12, 16, 0), 0), \ |
407 | IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "supply", 0, 0, \ | 407 | IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, "supply", 0, 0, \ |
408 | (1 << IIO_CHAN_INFO_SCALE_SEPARATE), \ | 408 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ |
409 | in_supply, ADIS16260_SCAN_SUPPLY, \ | 409 | in_supply, ADIS16260_SCAN_SUPPLY, \ |
410 | IIO_ST('u', 12, 16, 0), 0), \ | 410 | IIO_ST('u', 12, 16, 0), 0), \ |
411 | IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, NULL, 1, 0, \ | 411 | IIO_CHAN(IIO_VOLTAGE, 0, 1, 0, NULL, 1, 0, \ |
412 | (1 << IIO_CHAN_INFO_SCALE_SEPARATE), \ | 412 | IIO_CHAN_INFO_SCALE_SEPARATE_BIT, \ |
413 | in_aux, ADIS16260_SCAN_AUX_ADC, \ | 413 | in_aux, ADIS16260_SCAN_AUX_ADC, \ |
414 | IIO_ST('u', 12, 16, 0), 0), \ | 414 | IIO_ST('u', 12, 16, 0), 0), \ |
415 | IIO_CHAN_SOFT_TIMESTAMP(5) \ | 415 | IIO_CHAN_SOFT_TIMESTAMP(5) \ |
@@ -464,8 +464,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, | |||
464 | *val = val16; | 464 | *val = val16; |
465 | mutex_unlock(&indio_dev->mlock); | 465 | mutex_unlock(&indio_dev->mlock); |
466 | return IIO_VAL_INT; | 466 | return IIO_VAL_INT; |
467 | case IIO_CHAN_INFO_SCALE_SEPARATE: | 467 | case IIO_CHAN_INFO_SCALE: |
468 | case IIO_CHAN_INFO_SCALE_SHARED: | ||
469 | switch (chan->type) { | 468 | switch (chan->type) { |
470 | case IIO_ANGL_VEL: | 469 | case IIO_ANGL_VEL: |
471 | *val = 0; | 470 | *val = 0; |
@@ -489,10 +488,10 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, | |||
489 | return -EINVAL; | 488 | return -EINVAL; |
490 | } | 489 | } |
491 | break; | 490 | break; |
492 | case IIO_CHAN_INFO_OFFSET_SEPARATE: | 491 | case IIO_CHAN_INFO_OFFSET: |
493 | *val = 25; | 492 | *val = 25; |
494 | return IIO_VAL_INT; | 493 | return IIO_VAL_INT; |
495 | case IIO_CHAN_INFO_CALIBBIAS_SEPARATE: | 494 | case IIO_CHAN_INFO_CALIBBIAS: |
496 | switch (chan->type) { | 495 | switch (chan->type) { |
497 | case IIO_ANGL_VEL: | 496 | case IIO_ANGL_VEL: |
498 | bits = 12; | 497 | bits = 12; |
@@ -512,7 +511,7 @@ static int adis16260_read_raw(struct iio_dev *indio_dev, | |||
512 | *val = val16; | 511 | *val = val16; |
513 | mutex_unlock(&indio_dev->mlock); | 512 | mutex_unlock(&indio_dev->mlock); |
514 | return IIO_VAL_INT; | 513 | return IIO_VAL_INT; |
515 | case IIO_CHAN_INFO_CALIBSCALE_SEPARATE: | 514 | case IIO_CHAN_INFO_CALIBSCALE: |
516 | switch (chan->type) { | 515 | switch (chan->type) { |
517 | case IIO_ANGL_VEL: | 516 | case IIO_ANGL_VEL: |
518 | bits = 12; | 517 | bits = 12; |
@@ -544,11 +543,11 @@ static int adis16260_write_raw(struct iio_dev *indio_dev, | |||
544 | s16 val16; | 543 | s16 val16; |
545 | u8 addr; | 544 | u8 addr; |
546 | switch (mask) { | 545 | switch (mask) { |
547 | case IIO_CHAN_INFO_CALIBBIAS_SEPARATE: | 546 | case IIO_CHAN_INFO_CALIBBIAS: |
548 | val16 = val & ((1 << bits) - 1); | 547 | val16 = val & ((1 << bits) - 1); |
549 | addr = adis16260_addresses[chan->address][1]; | 548 | addr = adis16260_addresses[chan->address][1]; |
550 | return adis16260_spi_write_reg_16(indio_dev, addr, val16); | 549 | return adis16260_spi_write_reg_16(indio_dev, addr, val16); |
551 | case IIO_CHAN_INFO_CALIBSCALE_SEPARATE: | 550 | case IIO_CHAN_INFO_CALIBSCALE: |
552 | val16 = val & ((1 << bits) - 1); | 551 | val16 = val & ((1 << bits) - 1); |
553 | addr = adis16260_addresses[chan->address][2]; | 552 | addr = adis16260_addresses[chan->address][2]; |
554 | return adis16260_spi_write_reg_16(indio_dev, addr, val16); | 553 | return adis16260_spi_write_reg_16(indio_dev, addr, val16); |