// SPDX-License-Identifier: GPL-2.0+
/*
* AD717x and AD411x family SPI ADC driver
*
* Supported devices:
* AD4111/AD4112/AD4114/AD4115/AD4116
* AD7172-2/AD7172-4/AD7173-8/AD7175-2
* AD7175-8/AD7176-2/AD7177-2
*
* Copyright (C) 2015, 2024 Analog Devices, Inc.
*/
#include <linux/array_size.h>
#include <linux/bitfield.h>
#include <linux/bitmap.h>
#include <linux/container_of.h>
#include <linux/clk.h>
#include <linux/clk-provider.h>
#include <linux/delay.h>
#include <linux/device.h>
#include <linux/err.h>
#include <linux/gpio/driver.h>
#include <linux/gpio/regmap.h>
#include <linux/idr.h>
#include <linux/interrupt.h>
#include <linux/math64.h>
#include <linux/module.h>
#include <linux/mod_devicetable.h>
#include <linux/property.h>
#include <linux/regmap.h>
#include <linux/regulator/consumer.h>
#include <linux/slab.h>
#include <linux/spi/spi.h>
#include <linux/types.h>
#include <linux/units.h>
#include <linux/iio/buffer.h>
#include <linux/iio/iio.h>
#include <linux/iio/trigger_consumer.h>
#include <linux/iio/triggered_buffer.h>
#include <linux/iio/adc/ad_sigma_delta.h>
#define AD7173_REG_COMMS 0x00
#define AD7173_REG_ADC_MODE 0x01
#define AD7173_REG_INTERFACE_MODE 0x02
#define AD7173_REG_CRC 0x03
#define AD7173_REG_DATA 0x04
#define AD7173_REG_GPIO 0x06
#define AD7173_REG_ID 0x07
#define AD7173_REG_CH(x) (0x10 + (x))
#define AD7173_REG_SETUP(x) (0x20 + (x))
#define AD7173_REG_FILTER(x) (0x28 + (x))
#define AD7173_REG_OFFSET(x) (0x30 + (x))
#define AD7173_REG_GAIN(x) (0x38 + (x))
#define AD7173_RESET_LENGTH BITS_TO_BYTES(64)
#define AD7173_CH_ENABLE BIT(15)
#define AD7173_CH_SETUP_SEL_MASK GENMASK(14, 12)
#define AD7173_CH_SETUP_AINPOS_MASK GENMASK(9, 5)
#define AD7173_CH_SETUP_AINNEG_MASK GENMASK(4, 0)
#define AD7173_NO_AINS_PER_CHANNEL 2
#define AD7173_CH_ADDRESS(pos, neg) \