/drivers/staging/iio/adc/ad799x.h
C++ Header | 147 lines | 93 code | 22 blank | 32 comment | 0 complexity | e23c2ee9f5601d4d207882740d94946c MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.0, AGPL-1.0
- /*
- * Copyright (C) 2010-2011 Michael Hennerich, Analog Devices Inc.
- * Copyright (C) 2008-2010 Jonathan Cameron
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License version 2 as
- * published by the Free Software Foundation.
- *
- * ad799x.h
- */
- #ifndef _AD799X_H_
- #define _AD799X_H_
- #define AD799X_CHANNEL_SHIFT 4
- #define AD799X_STORAGEBITS 16
- /*
- * AD7991, AD7995 and AD7999 defines
- */
- #define AD7991_REF_SEL 0x08
- #define AD7991_FLTR 0x04
- #define AD7991_BIT_TRIAL_DELAY 0x02
- #define AD7991_SAMPLE_DELAY 0x01
- /*
- * AD7992, AD7993, AD7994, AD7997 and AD7998 defines
- */
- #define AD7998_FLTR 0x08
- #define AD7998_ALERT_EN 0x04
- #define AD7998_BUSY_ALERT 0x02
- #define AD7998_BUSY_ALERT_POL 0x01
- #define AD7998_CONV_RES_REG 0x0
- #define AD7998_ALERT_STAT_REG 0x1
- #define AD7998_CONF_REG 0x2
- #define AD7998_CYCLE_TMR_REG 0x3
- #define AD7998_DATALOW_CH1_REG 0x4
- #define AD7998_DATAHIGH_CH1_REG 0x5
- #define AD7998_HYST_CH1_REG 0x6
- #define AD7998_DATALOW_CH2_REG 0x7
- #define AD7998_DATAHIGH_CH2_REG 0x8
- #define AD7998_HYST_CH2_REG 0x9
- #define AD7998_DATALOW_CH3_REG 0xA
- #define AD7998_DATAHIGH_CH3_REG 0xB
- #define AD7998_HYST_CH3_REG 0xC
- #define AD7998_DATALOW_CH4_REG 0xD
- #define AD7998_DATAHIGH_CH4_REG 0xE
- #define AD7998_HYST_CH4_REG 0xF
- #define AD7998_CYC_MASK 0x7
- #define AD7998_CYC_DIS 0x0
- #define AD7998_CYC_TCONF_32 0x1
- #define AD7998_CYC_TCONF_64 0x2
- #define AD7998_CYC_TCONF_128 0x3
- #define AD7998_CYC_TCONF_256 0x4
- #define AD7998_CYC_TCONF_512 0x5
- #define AD7998_CYC_TCONF_1024 0x6
- #define AD7998_CYC_TCONF_2048 0x7
- #define AD7998_ALERT_STAT_CLEAR 0xFF
- /*
- * AD7997 and AD7997 defines
- */
- #define AD7997_8_READ_SINGLE 0x80
- #define AD7997_8_READ_SEQUENCE 0x70
- /* TODO: move this into a common header */
- #define RES_MASK(bits) ((1 << (bits)) - 1)
- enum {
- ad7991,
- ad7995,
- ad7999,
- ad7992,
- ad7993,
- ad7994,
- ad7997,
- ad7998
- };
- struct ad799x_state;
- /**
- * struct ad799x_chip_info - chip specifc information
- * @channel: channel specification
- * @num_channels: number of channels
- * @int_vref_mv: the internal reference voltage
- * @monitor_mode: whether the chip supports monitor interrupts
- * @default_config: device default configuration
- * @event_attrs: pointer to the monitor event attribute group
- */
- struct ad799x_chip_info {
- struct iio_chan_spec channel[9];
- int num_channels;
- u16 int_vref_mv;
- u16 default_config;
- const struct iio_info *info;
- };
- struct ad799x_state {
- struct i2c_client *client;
- const struct ad799x_chip_info *chip_info;
- size_t d_size;
- struct iio_trigger *trig;
- struct regulator *reg;
- u16 int_vref_mv;
- unsigned id;
- char *name;
- u16 config;
- };
- /*
- * TODO: struct ad799x_platform_data needs to go into include/linux/iio
- */
- struct ad799x_platform_data {
- u16 vref_mv;
- };
- int ad7997_8_set_scan_mode(struct ad799x_state *st, unsigned mask);
- #ifdef CONFIG_AD799X_RING_BUFFER
- int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask);
- int ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev);
- void ad799x_ring_cleanup(struct iio_dev *indio_dev);
- #else /* CONFIG_AD799X_RING_BUFFER */
- int ad799x_single_channel_from_ring(struct ad799x_state *st, long mask)
- {
- return -EINVAL;
- }
- static inline int
- ad799x_register_ring_funcs_and_init(struct iio_dev *indio_dev)
- {
- return 0;
- }
- static inline void ad799x_ring_cleanup(struct iio_dev *indio_dev)
- {
- }
- #endif /* CONFIG_AD799X_RING_BUFFER */
- #endif /* _AD799X_H_ */