staticint adis16209_write_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int val, int val2, long mask)
{ struct adis *st = iio_priv(indio_dev); int m;
if (mask != IIO_CHAN_INFO_CALIBBIAS) return -EINVAL;
switch (chan->type) { case IIO_ACCEL: case IIO_INCLI:
m = GENMASK(13, 0); break; default: return -EINVAL;
}
return adis_write_reg_16(st, adis16209_addresses[chan->scan_index][0],
val & m);
}
staticint adis16209_read_raw(struct iio_dev *indio_dev, struct iio_chan_spec const *chan, int *val, int *val2, long mask)
{ struct adis *st = iio_priv(indio_dev); int ret; int bits;
u8 addr;
s16 val16;
switch (mask) { case IIO_CHAN_INFO_RAW: return adis_single_conversion(indio_dev, chan,
ADIS16209_ERROR_ACTIVE, val); case IIO_CHAN_INFO_SCALE: switch (chan->type) { case IIO_VOLTAGE:
*val = 0; switch (chan->channel) { case 0:
*val2 = 305180; /* 0.30518 mV */ break; case 1:
*val2 = 610500; /* 0.6105 mV */ break; default: return -EINVAL;
} return IIO_VAL_INT_PLUS_MICRO; case IIO_TEMP:
*val = -470;
*val2 = 0; return IIO_VAL_INT_PLUS_MICRO; case IIO_ACCEL: /* * IIO base unit for sensitivity of accelerometer * is milli g. * 1 LSB represents 0.244 mg.
*/
*val = 0;
*val2 = IIO_G_TO_M_S_2(244140); return IIO_VAL_INT_PLUS_NANO; case IIO_INCLI: case IIO_ROT: /* * IIO base units for rotation are degrees. * 1 LSB represents 0.025 milli degrees.
*/
*val = 0;
*val2 = 25000; return IIO_VAL_INT_PLUS_MICRO; default: return -EINVAL;
} break; case IIO_CHAN_INFO_OFFSET: /* * The raw ADC value is 0x4FE when the temperature * is 45 degrees and the scale factor per milli * degree celcius is -470.
*/
*val = 25000 / -470 - 0x4FE; return IIO_VAL_INT; case IIO_CHAN_INFO_CALIBBIAS: switch (chan->type) { case IIO_ACCEL:
bits = 14; break; default: return -EINVAL;
}
addr = adis16209_addresses[chan->scan_index][0];
ret = adis_read_reg_16(st, addr, &val16); if (ret) return ret;
MODULE_AUTHOR("Barry Song <21cnbao@gmail.com>");
MODULE_DESCRIPTION("Analog Devices ADIS16209 Dual-Axis Digital Inclinometer and Accelerometer");
MODULE_LICENSE("GPL v2");
MODULE_ALIAS("spi:adis16209");
MODULE_IMPORT_NS("IIO_ADISLIB");
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.