0001
0002
0003
0004
0005
0006
0007
0008
0009 #ifndef __IIO_ADIS_H__
0010 #define __IIO_ADIS_H__
0011
0012 #include <linux/spi/spi.h>
0013 #include <linux/interrupt.h>
0014 #include <linux/iio/types.h>
0015
0016 #define ADIS_WRITE_REG(reg) ((0x80 | (reg)))
0017 #define ADIS_READ_REG(reg) ((reg) & 0x7f)
0018
0019 #define ADIS_PAGE_SIZE 0x80
0020 #define ADIS_REG_PAGE_ID 0x00
0021
0022 struct adis;
0023
0024
0025
0026
0027
0028
0029
0030 struct adis_timeout {
0031 u16 reset_ms;
0032 u16 sw_reset_ms;
0033 u16 self_test_ms;
0034 };
0035
0036
0037
0038
0039
0040
0041
0042
0043
0044
0045
0046
0047
0048
0049
0050
0051
0052
0053
0054
0055
0056
0057
0058
0059
0060
0061
0062 struct adis_data {
0063 unsigned int read_delay;
0064 unsigned int write_delay;
0065 unsigned int cs_change_delay;
0066
0067 unsigned int glob_cmd_reg;
0068 unsigned int msc_ctrl_reg;
0069 unsigned int diag_stat_reg;
0070 unsigned int prod_id_reg;
0071
0072 unsigned int prod_id;
0073
0074 unsigned int self_test_mask;
0075 unsigned int self_test_reg;
0076 bool self_test_no_autoclear;
0077 const struct adis_timeout *timeouts;
0078
0079 const char * const *status_error_msgs;
0080 unsigned int status_error_mask;
0081
0082 int (*enable_irq)(struct adis *adis, bool enable);
0083 bool unmasked_drdy;
0084
0085 bool has_paging;
0086
0087 unsigned int burst_reg_cmd;
0088 unsigned int burst_len;
0089 unsigned int burst_max_len;
0090 unsigned int burst_max_speed_hz;
0091 };
0092
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105
0106
0107
0108
0109
0110 struct adis {
0111 struct spi_device *spi;
0112 struct iio_trigger *trig;
0113
0114 const struct adis_data *data;
0115 unsigned int burst_extra_len;
0116
0117
0118
0119
0120
0121
0122
0123
0124
0125
0126
0127 struct mutex state_lock;
0128 struct spi_message msg;
0129 struct spi_transfer *xfer;
0130 unsigned int current_page;
0131 unsigned long irq_flag;
0132 void *buffer;
0133
0134 u8 tx[10] ____cacheline_aligned;
0135 u8 rx[4];
0136 };
0137
0138 int adis_init(struct adis *adis, struct iio_dev *indio_dev,
0139 struct spi_device *spi, const struct adis_data *data);
0140 int __adis_reset(struct adis *adis);
0141
0142
0143
0144
0145
0146
0147
0148 static inline int adis_reset(struct adis *adis)
0149 {
0150 int ret;
0151
0152 mutex_lock(&adis->state_lock);
0153 ret = __adis_reset(adis);
0154 mutex_unlock(&adis->state_lock);
0155
0156 return ret;
0157 }
0158
0159 int __adis_write_reg(struct adis *adis, unsigned int reg,
0160 unsigned int val, unsigned int size);
0161 int __adis_read_reg(struct adis *adis, unsigned int reg,
0162 unsigned int *val, unsigned int size);
0163
0164
0165
0166
0167
0168
0169
0170 static inline int __adis_write_reg_8(struct adis *adis, unsigned int reg,
0171 u8 val)
0172 {
0173 return __adis_write_reg(adis, reg, val, 1);
0174 }
0175
0176
0177
0178
0179
0180
0181
0182 static inline int __adis_write_reg_16(struct adis *adis, unsigned int reg,
0183 u16 val)
0184 {
0185 return __adis_write_reg(adis, reg, val, 2);
0186 }
0187
0188
0189
0190
0191
0192
0193
0194 static inline int __adis_write_reg_32(struct adis *adis, unsigned int reg,
0195 u32 val)
0196 {
0197 return __adis_write_reg(adis, reg, val, 4);
0198 }
0199
0200
0201
0202
0203
0204
0205
0206 static inline int __adis_read_reg_16(struct adis *adis, unsigned int reg,
0207 u16 *val)
0208 {
0209 unsigned int tmp;
0210 int ret;
0211
0212 ret = __adis_read_reg(adis, reg, &tmp, 2);
0213 if (ret == 0)
0214 *val = tmp;
0215
0216 return ret;
0217 }
0218
0219
0220
0221
0222
0223
0224
0225 static inline int __adis_read_reg_32(struct adis *adis, unsigned int reg,
0226 u32 *val)
0227 {
0228 unsigned int tmp;
0229 int ret;
0230
0231 ret = __adis_read_reg(adis, reg, &tmp, 4);
0232 if (ret == 0)
0233 *val = tmp;
0234
0235 return ret;
0236 }
0237
0238
0239
0240
0241
0242
0243
0244
0245 static inline int adis_write_reg(struct adis *adis, unsigned int reg,
0246 unsigned int val, unsigned int size)
0247 {
0248 int ret;
0249
0250 mutex_lock(&adis->state_lock);
0251 ret = __adis_write_reg(adis, reg, val, size);
0252 mutex_unlock(&adis->state_lock);
0253
0254 return ret;
0255 }
0256
0257
0258
0259
0260
0261
0262
0263
0264 static int adis_read_reg(struct adis *adis, unsigned int reg,
0265 unsigned int *val, unsigned int size)
0266 {
0267 int ret;
0268
0269 mutex_lock(&adis->state_lock);
0270 ret = __adis_read_reg(adis, reg, val, size);
0271 mutex_unlock(&adis->state_lock);
0272
0273 return ret;
0274 }
0275
0276
0277
0278
0279
0280
0281
0282 static inline int adis_write_reg_8(struct adis *adis, unsigned int reg,
0283 u8 val)
0284 {
0285 return adis_write_reg(adis, reg, val, 1);
0286 }
0287
0288
0289
0290
0291
0292
0293
0294 static inline int adis_write_reg_16(struct adis *adis, unsigned int reg,
0295 u16 val)
0296 {
0297 return adis_write_reg(adis, reg, val, 2);
0298 }
0299
0300
0301
0302
0303
0304
0305
0306 static inline int adis_write_reg_32(struct adis *adis, unsigned int reg,
0307 u32 val)
0308 {
0309 return adis_write_reg(adis, reg, val, 4);
0310 }
0311
0312
0313
0314
0315
0316
0317
0318 static inline int adis_read_reg_16(struct adis *adis, unsigned int reg,
0319 u16 *val)
0320 {
0321 unsigned int tmp;
0322 int ret;
0323
0324 ret = adis_read_reg(adis, reg, &tmp, 2);
0325 if (ret == 0)
0326 *val = tmp;
0327
0328 return ret;
0329 }
0330
0331
0332
0333
0334
0335
0336
0337 static inline int adis_read_reg_32(struct adis *adis, unsigned int reg,
0338 u32 *val)
0339 {
0340 unsigned int tmp;
0341 int ret;
0342
0343 ret = adis_read_reg(adis, reg, &tmp, 4);
0344 if (ret == 0)
0345 *val = tmp;
0346
0347 return ret;
0348 }
0349
0350 int __adis_update_bits_base(struct adis *adis, unsigned int reg, const u32 mask,
0351 const u32 val, u8 size);
0352
0353
0354
0355
0356
0357
0358
0359
0360
0361
0362 static inline int adis_update_bits_base(struct adis *adis, unsigned int reg,
0363 const u32 mask, const u32 val, u8 size)
0364 {
0365 int ret;
0366
0367 mutex_lock(&adis->state_lock);
0368 ret = __adis_update_bits_base(adis, reg, mask, val, size);
0369 mutex_unlock(&adis->state_lock);
0370 return ret;
0371 }
0372
0373
0374
0375
0376
0377
0378
0379
0380
0381
0382
0383
0384 #define adis_update_bits(adis, reg, mask, val) ({ \
0385 BUILD_BUG_ON(sizeof(val) != 2 && sizeof(val) != 4); \
0386 adis_update_bits_base(adis, reg, mask, val, sizeof(val)); \
0387 })
0388
0389
0390
0391
0392
0393
0394
0395
0396
0397
0398
0399
0400 #define __adis_update_bits(adis, reg, mask, val) ({ \
0401 BUILD_BUG_ON(sizeof(val) != 2 && sizeof(val) != 4); \
0402 __adis_update_bits_base(adis, reg, mask, val, sizeof(val)); \
0403 })
0404
0405 int adis_enable_irq(struct adis *adis, bool enable);
0406 int __adis_check_status(struct adis *adis);
0407 int __adis_initial_startup(struct adis *adis);
0408
0409 static inline int adis_check_status(struct adis *adis)
0410 {
0411 int ret;
0412
0413 mutex_lock(&adis->state_lock);
0414 ret = __adis_check_status(adis);
0415 mutex_unlock(&adis->state_lock);
0416
0417 return ret;
0418 }
0419
0420
0421 static inline int adis_initial_startup(struct adis *adis)
0422 {
0423 int ret;
0424
0425 mutex_lock(&adis->state_lock);
0426 ret = __adis_initial_startup(adis);
0427 mutex_unlock(&adis->state_lock);
0428
0429 return ret;
0430 }
0431
0432 static inline void adis_dev_lock(struct adis *adis)
0433 {
0434 mutex_lock(&adis->state_lock);
0435 }
0436
0437 static inline void adis_dev_unlock(struct adis *adis)
0438 {
0439 mutex_unlock(&adis->state_lock);
0440 }
0441
0442 int adis_single_conversion(struct iio_dev *indio_dev,
0443 const struct iio_chan_spec *chan,
0444 unsigned int error_mask, int *val);
0445
0446 #define ADIS_VOLTAGE_CHAN(addr, si, chan, name, info_all, bits) { \
0447 .type = IIO_VOLTAGE, \
0448 .indexed = 1, \
0449 .channel = (chan), \
0450 .extend_name = name, \
0451 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
0452 BIT(IIO_CHAN_INFO_SCALE), \
0453 .info_mask_shared_by_all = info_all, \
0454 .address = (addr), \
0455 .scan_index = (si), \
0456 .scan_type = { \
0457 .sign = 'u', \
0458 .realbits = (bits), \
0459 .storagebits = 16, \
0460 .endianness = IIO_BE, \
0461 }, \
0462 }
0463
0464 #define ADIS_SUPPLY_CHAN(addr, si, info_all, bits) \
0465 ADIS_VOLTAGE_CHAN(addr, si, 0, "supply", info_all, bits)
0466
0467 #define ADIS_AUX_ADC_CHAN(addr, si, info_all, bits) \
0468 ADIS_VOLTAGE_CHAN(addr, si, 1, NULL, info_all, bits)
0469
0470 #define ADIS_TEMP_CHAN(addr, si, info_all, bits) { \
0471 .type = IIO_TEMP, \
0472 .indexed = 1, \
0473 .channel = 0, \
0474 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
0475 BIT(IIO_CHAN_INFO_SCALE) | \
0476 BIT(IIO_CHAN_INFO_OFFSET), \
0477 .info_mask_shared_by_all = info_all, \
0478 .address = (addr), \
0479 .scan_index = (si), \
0480 .scan_type = { \
0481 .sign = 'u', \
0482 .realbits = (bits), \
0483 .storagebits = 16, \
0484 .endianness = IIO_BE, \
0485 }, \
0486 }
0487
0488 #define ADIS_MOD_CHAN(_type, mod, addr, si, info_sep, info_all, bits) { \
0489 .type = (_type), \
0490 .modified = 1, \
0491 .channel2 = IIO_MOD_ ## mod, \
0492 .info_mask_separate = BIT(IIO_CHAN_INFO_RAW) | \
0493 (info_sep), \
0494 .info_mask_shared_by_type = BIT(IIO_CHAN_INFO_SCALE), \
0495 .info_mask_shared_by_all = info_all, \
0496 .address = (addr), \
0497 .scan_index = (si), \
0498 .scan_type = { \
0499 .sign = 's', \
0500 .realbits = (bits), \
0501 .storagebits = 16, \
0502 .endianness = IIO_BE, \
0503 }, \
0504 }
0505
0506 #define ADIS_ACCEL_CHAN(mod, addr, si, info_sep, info_all, bits) \
0507 ADIS_MOD_CHAN(IIO_ACCEL, mod, addr, si, info_sep, info_all, bits)
0508
0509 #define ADIS_GYRO_CHAN(mod, addr, si, info_sep, info_all, bits) \
0510 ADIS_MOD_CHAN(IIO_ANGL_VEL, mod, addr, si, info_sep, info_all, bits)
0511
0512 #define ADIS_INCLI_CHAN(mod, addr, si, info_sep, info_all, bits) \
0513 ADIS_MOD_CHAN(IIO_INCLI, mod, addr, si, info_sep, info_all, bits)
0514
0515 #define ADIS_ROT_CHAN(mod, addr, si, info_sep, info_all, bits) \
0516 ADIS_MOD_CHAN(IIO_ROT, mod, addr, si, info_sep, info_all, bits)
0517
0518 #ifdef CONFIG_IIO_ADIS_LIB_BUFFER
0519
0520 int
0521 devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
0522 irq_handler_t trigger_handler);
0523
0524 int devm_adis_probe_trigger(struct adis *adis, struct iio_dev *indio_dev);
0525
0526 int adis_update_scan_mode(struct iio_dev *indio_dev,
0527 const unsigned long *scan_mask);
0528
0529 #else
0530
0531 static inline int
0532 devm_adis_setup_buffer_and_trigger(struct adis *adis, struct iio_dev *indio_dev,
0533 irq_handler_t trigger_handler)
0534 {
0535 return 0;
0536 }
0537
0538 static inline int devm_adis_probe_trigger(struct adis *adis,
0539 struct iio_dev *indio_dev)
0540 {
0541 return 0;
0542 }
0543
0544 #define adis_update_scan_mode NULL
0545
0546 #endif
0547
0548 #ifdef CONFIG_DEBUG_FS
0549
0550 int adis_debugfs_reg_access(struct iio_dev *indio_dev,
0551 unsigned int reg, unsigned int writeval,
0552 unsigned int *readval);
0553
0554 #else
0555
0556 #define adis_debugfs_reg_access NULL
0557
0558 #endif
0559
0560 #endif