ad7192.c (651a88798412e216f337d70181127e847f00a4b7) ad7192.c (74f582ec127e3b10aec71e8d15f1c14b0f0481ec)
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * AD7190 AD7192 AD7193 AD7195 SPI ADC driver
4 *
5 * Copyright 2011-2015 Analog Devices Inc.
6 */
7
8#include <linux/interrupt.h>

--- 44 unchanged lines hidden (view full) ---

53#define AD7192_STAT_PARITY BIT(4) /* Parity */
54#define AD7192_STAT_CH3 BIT(2) /* Channel 3 */
55#define AD7192_STAT_CH2 BIT(1) /* Channel 2 */
56#define AD7192_STAT_CH1 BIT(0) /* Channel 1 */
57
58/* Mode Register Bit Designations (AD7192_REG_MODE) */
59#define AD7192_MODE_SEL(x) (((x) & 0x7) << 21) /* Operation Mode Select */
60#define AD7192_MODE_SEL_MASK (0x7 << 21) /* Operation Mode Select Mask */
1// SPDX-License-Identifier: GPL-2.0
2/*
3 * AD7190 AD7192 AD7193 AD7195 SPI ADC driver
4 *
5 * Copyright 2011-2015 Analog Devices Inc.
6 */
7
8#include <linux/interrupt.h>

--- 44 unchanged lines hidden (view full) ---

53#define AD7192_STAT_PARITY BIT(4) /* Parity */
54#define AD7192_STAT_CH3 BIT(2) /* Channel 3 */
55#define AD7192_STAT_CH2 BIT(1) /* Channel 2 */
56#define AD7192_STAT_CH1 BIT(0) /* Channel 1 */
57
58/* Mode Register Bit Designations (AD7192_REG_MODE) */
59#define AD7192_MODE_SEL(x) (((x) & 0x7) << 21) /* Operation Mode Select */
60#define AD7192_MODE_SEL_MASK (0x7 << 21) /* Operation Mode Select Mask */
61#define AD7192_MODE_DAT_STA BIT(20) /* Status Register transmission */
61#define AD7192_MODE_STA(x) (((x) & 0x1) << 20) /* Status Register transmission */
62#define AD7192_MODE_STA_MASK BIT(20) /* Status Register transmission Mask */
62#define AD7192_MODE_CLKSRC(x) (((x) & 0x3) << 18) /* Clock Source Select */
63#define AD7192_MODE_SINC3 BIT(15) /* SINC3 Filter Select */
64#define AD7192_MODE_ACX BIT(14) /* AC excitation enable(AD7195 only)*/
65#define AD7192_MODE_ENPAR BIT(13) /* Parity Enable */
66#define AD7192_MODE_CLKDIV BIT(12) /* Clock divide by 2 (AD7190/2 only)*/
67#define AD7192_MODE_SCYCLE BIT(11) /* Single cycle conversion */
68#define AD7192_MODE_REJ60 BIT(10) /* 50/60Hz notch filter */
69#define AD7192_MODE_RATE(x) ((x) & 0x3FF) /* Filter Update Rate Select */

--- 150 unchanged lines hidden (view full) ---

220 uintptr_t private,
221 const struct iio_chan_spec *chan,
222 const char *buf, size_t len)
223{
224 struct ad7192_state *st = iio_priv(indio_dev);
225 bool sys_calib;
226 int ret, temp;
227
63#define AD7192_MODE_CLKSRC(x) (((x) & 0x3) << 18) /* Clock Source Select */
64#define AD7192_MODE_SINC3 BIT(15) /* SINC3 Filter Select */
65#define AD7192_MODE_ACX BIT(14) /* AC excitation enable(AD7195 only)*/
66#define AD7192_MODE_ENPAR BIT(13) /* Parity Enable */
67#define AD7192_MODE_CLKDIV BIT(12) /* Clock divide by 2 (AD7190/2 only)*/
68#define AD7192_MODE_SCYCLE BIT(11) /* Single cycle conversion */
69#define AD7192_MODE_REJ60 BIT(10) /* 50/60Hz notch filter */
70#define AD7192_MODE_RATE(x) ((x) & 0x3FF) /* Filter Update Rate Select */

--- 150 unchanged lines hidden (view full) ---

221 uintptr_t private,
222 const struct iio_chan_spec *chan,
223 const char *buf, size_t len)
224{
225 struct ad7192_state *st = iio_priv(indio_dev);
226 bool sys_calib;
227 int ret, temp;
228
228 ret = strtobool(buf, &sys_calib);
229 ret = kstrtobool(buf, &sys_calib);
229 if (ret)
230 return ret;
231
232 temp = st->syscalib_mode[chan->channel];
233 if (sys_calib) {
234 if (temp == AD7192_SYSCALIB_ZERO_SCALE)
235 ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_ZERO,
236 chan->address);

--- 46 unchanged lines hidden (view full) ---

283 struct ad7192_state *st = ad_sigma_delta_to_ad7192(sd);
284
285 st->mode &= ~AD7192_MODE_SEL_MASK;
286 st->mode |= AD7192_MODE_SEL(mode);
287
288 return ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
289}
290
230 if (ret)
231 return ret;
232
233 temp = st->syscalib_mode[chan->channel];
234 if (sys_calib) {
235 if (temp == AD7192_SYSCALIB_ZERO_SCALE)
236 ret = ad_sd_calibrate(&st->sd, AD7192_MODE_CAL_SYS_ZERO,
237 chan->address);

--- 46 unchanged lines hidden (view full) ---

284 struct ad7192_state *st = ad_sigma_delta_to_ad7192(sd);
285
286 st->mode &= ~AD7192_MODE_SEL_MASK;
287 st->mode |= AD7192_MODE_SEL(mode);
288
289 return ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, st->mode);
290}
291
292static int ad7192_append_status(struct ad_sigma_delta *sd, bool append)
293{
294 struct ad7192_state *st = ad_sigma_delta_to_ad7192(sd);
295 unsigned int mode = st->mode;
296 int ret;
297
298 mode &= ~AD7192_MODE_STA_MASK;
299 mode |= AD7192_MODE_STA(append);
300
301 ret = ad_sd_write_reg(&st->sd, AD7192_REG_MODE, 3, mode);
302 if (ret < 0)
303 return ret;
304
305 st->mode = mode;
306
307 return 0;
308}
309
310static int ad7192_disable_all(struct ad_sigma_delta *sd)
311{
312 struct ad7192_state *st = ad_sigma_delta_to_ad7192(sd);
313 u32 conf = st->conf;
314 int ret;
315
316 conf &= ~AD7192_CONF_CHAN_MASK;
317
318 ret = ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, conf);
319 if (ret < 0)
320 return ret;
321
322 st->conf = conf;
323
324 return 0;
325}
326
291static const struct ad_sigma_delta_info ad7192_sigma_delta_info = {
292 .set_channel = ad7192_set_channel,
327static const struct ad_sigma_delta_info ad7192_sigma_delta_info = {
328 .set_channel = ad7192_set_channel,
329 .append_status = ad7192_append_status,
330 .disable_all = ad7192_disable_all,
293 .set_mode = ad7192_set_mode,
294 .has_registers = true,
295 .addr_shift = 3,
296 .read_mask = BIT(6),
331 .set_mode = ad7192_set_mode,
332 .has_registers = true,
333 .addr_shift = 3,
334 .read_mask = BIT(6),
335 .status_ch_mask = GENMASK(3, 0),
336 .num_slots = 4,
297 .irq_flags = IRQF_TRIGGER_FALLING,
298};
299
300static const struct ad_sd_calib_data ad7192_calib_arr[8] = {
301 {AD7192_MODE_CAL_INT_ZERO, AD7192_CH_AIN1},
302 {AD7192_MODE_CAL_INT_FULL, AD7192_CH_AIN1},
303 {AD7192_MODE_CAL_INT_ZERO, AD7192_CH_AIN2},
304 {AD7192_MODE_CAL_INT_FULL, AD7192_CH_AIN2},

--- 147 unchanged lines hidden (view full) ---

452 size_t len)
453{
454 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
455 struct ad7192_state *st = iio_priv(indio_dev);
456 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
457 int ret;
458 bool val;
459
337 .irq_flags = IRQF_TRIGGER_FALLING,
338};
339
340static const struct ad_sd_calib_data ad7192_calib_arr[8] = {
341 {AD7192_MODE_CAL_INT_ZERO, AD7192_CH_AIN1},
342 {AD7192_MODE_CAL_INT_FULL, AD7192_CH_AIN1},
343 {AD7192_MODE_CAL_INT_ZERO, AD7192_CH_AIN2},
344 {AD7192_MODE_CAL_INT_FULL, AD7192_CH_AIN2},

--- 147 unchanged lines hidden (view full) ---

492 size_t len)
493{
494 struct iio_dev *indio_dev = dev_to_iio_dev(dev);
495 struct ad7192_state *st = iio_priv(indio_dev);
496 struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
497 int ret;
498 bool val;
499
460 ret = strtobool(buf, &val);
500 ret = kstrtobool(buf, &val);
461 if (ret < 0)
462 return ret;
463
464 ret = iio_device_claim_direct_mode(indio_dev);
465 if (ret)
466 return ret;
467
468 switch ((u32)this_attr->address) {

--- 309 unchanged lines hidden (view full) ---

778 *length = ARRAY_SIZE(st->scale_avail) * 2;
779
780 return IIO_AVAIL_LIST;
781 }
782
783 return -EINVAL;
784}
785
501 if (ret < 0)
502 return ret;
503
504 ret = iio_device_claim_direct_mode(indio_dev);
505 if (ret)
506 return ret;
507
508 switch ((u32)this_attr->address) {

--- 309 unchanged lines hidden (view full) ---

818 *length = ARRAY_SIZE(st->scale_avail) * 2;
819
820 return IIO_AVAIL_LIST;
821 }
822
823 return -EINVAL;
824}
825
826static int ad7192_update_scan_mode(struct iio_dev *indio_dev, const unsigned long *scan_mask)
827{
828 struct ad7192_state *st = iio_priv(indio_dev);
829 u32 conf = st->conf;
830 int ret;
831 int i;
832
833 conf &= ~AD7192_CONF_CHAN_MASK;
834 for_each_set_bit(i, scan_mask, 8)
835 conf |= AD7192_CONF_CHAN(i);
836
837 ret = ad_sd_write_reg(&st->sd, AD7192_REG_CONF, 3, conf);
838 if (ret < 0)
839 return ret;
840
841 st->conf = conf;
842
843 return 0;
844}
845
786static const struct iio_info ad7192_info = {
787 .read_raw = ad7192_read_raw,
788 .write_raw = ad7192_write_raw,
789 .write_raw_get_fmt = ad7192_write_raw_get_fmt,
790 .read_avail = ad7192_read_avail,
791 .attrs = &ad7192_attribute_group,
792 .validate_trigger = ad_sd_validate_trigger,
846static const struct iio_info ad7192_info = {
847 .read_raw = ad7192_read_raw,
848 .write_raw = ad7192_write_raw,
849 .write_raw_get_fmt = ad7192_write_raw_get_fmt,
850 .read_avail = ad7192_read_avail,
851 .attrs = &ad7192_attribute_group,
852 .validate_trigger = ad_sd_validate_trigger,
853 .update_scan_mode = ad7192_update_scan_mode,
793};
794
795static const struct iio_info ad7195_info = {
796 .read_raw = ad7192_read_raw,
797 .write_raw = ad7192_write_raw,
798 .write_raw_get_fmt = ad7192_write_raw_get_fmt,
799 .read_avail = ad7192_read_avail,
800 .attrs = &ad7195_attribute_group,
801 .validate_trigger = ad_sd_validate_trigger,
854};
855
856static const struct iio_info ad7195_info = {
857 .read_raw = ad7192_read_raw,
858 .write_raw = ad7192_write_raw,
859 .write_raw_get_fmt = ad7192_write_raw_get_fmt,
860 .read_avail = ad7192_read_avail,
861 .attrs = &ad7195_attribute_group,
862 .validate_trigger = ad_sd_validate_trigger,
863 .update_scan_mode = ad7192_update_scan_mode,
802};
803
804#define __AD719x_CHANNEL(_si, _channel1, _channel2, _address, _extend_name, \
805 _type, _mask_type_av, _ext_info) \
806 { \
807 .type = (_type), \
808 .differential = ((_channel2) == -1 ? 0 : 1), \
809 .indexed = 1, \

--- 242 unchanged lines hidden ---
864};
865
866#define __AD719x_CHANNEL(_si, _channel1, _channel2, _address, _extend_name, \
867 _type, _mask_type_av, _ext_info) \
868 { \
869 .type = (_type), \
870 .differential = ((_channel2) == -1 ? 0 : 1), \
871 .indexed = 1, \

--- 242 unchanged lines hidden ---