mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 04:24:31 +01:00
iio: adc: ad4000: Add support for PulSAR devices
The ADI PulSAR series of single-channel devices comprises differential and pseudo-differential ADCs that don't require any input data from the host controller. By not requiring a data input line, PulSAR devices can operate with a 3-wire only data bus in some setups. The AD4000 series and the single-channel PulSAR series of devices have similar SPI transfer specifications and wiring configurations. Single-channel PulSAR devices are slower than AD4000 and don't have a configuration register. That taken into account, single-channel PulSARs can be supported by the ad4000 driver without any increase in code complexity. Extend the AD4000 driver to also support single-channel PulSAR devices. Reviewed-by: David Lechner <dlechner@baylibre.com> Signed-off-by: Marcelo Schmitt <marcelo.schmitt@analog.com> Link: https://patch.msgid.link/2bfb904e29914c3dc4905e1c87fcc735575f330d.1733147444.git.marcelo.schmitt@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
fc8f630095
commit
c3948d0900
1 changed files with 162 additions and 0 deletions
|
|
@ -138,6 +138,48 @@ static const struct ad4000_time_spec ad4020_t_spec = {
|
|||
.t_quiet2_ns = 60,
|
||||
};
|
||||
|
||||
/* AD7983, AD7984 */
|
||||
static const struct ad4000_time_spec ad7983_t_spec = {
|
||||
.t_conv_ns = 500,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7980, AD7982 */
|
||||
static const struct ad4000_time_spec ad7980_t_spec = {
|
||||
.t_conv_ns = 800,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7946, AD7686, AD7688, AD7988-5, AD7693 */
|
||||
static const struct ad4000_time_spec ad7686_t_spec = {
|
||||
.t_conv_ns = 1600,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7690 */
|
||||
static const struct ad4000_time_spec ad7690_t_spec = {
|
||||
.t_conv_ns = 2100,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7942, AD7685, AD7687 */
|
||||
static const struct ad4000_time_spec ad7687_t_spec = {
|
||||
.t_conv_ns = 3200,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7691 */
|
||||
static const struct ad4000_time_spec ad7691_t_spec = {
|
||||
.t_conv_ns = 3700,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
/* AD7988-1 */
|
||||
static const struct ad4000_time_spec ad7988_1_t_spec = {
|
||||
.t_conv_ns = 9500,
|
||||
.t_quiet2_ns = 0,
|
||||
};
|
||||
|
||||
struct ad4000_chip_info {
|
||||
const char *dev_name;
|
||||
struct iio_chan_spec chan_spec[2];
|
||||
|
|
@ -260,6 +302,96 @@ static const struct ad4000_chip_info adaq4003_chip_info = {
|
|||
.has_hardware_gain = true,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7685_chip_info = {
|
||||
.dev_name = "ad7685",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7687_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7686_chip_info = {
|
||||
.dev_name = "ad7686",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7686_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7687_chip_info = {
|
||||
.dev_name = "ad7687",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 16, 0),
|
||||
.time_spec = &ad7687_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7688_chip_info = {
|
||||
.dev_name = "ad7688",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 16, 0),
|
||||
.time_spec = &ad7686_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7690_chip_info = {
|
||||
.dev_name = "ad7690",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 18, 0),
|
||||
.time_spec = &ad7690_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7691_chip_info = {
|
||||
.dev_name = "ad7691",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 18, 0),
|
||||
.time_spec = &ad7691_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7693_chip_info = {
|
||||
.dev_name = "ad7693",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 16, 0),
|
||||
.time_spec = &ad7686_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7942_chip_info = {
|
||||
.dev_name = "ad7942",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 14, 0),
|
||||
.time_spec = &ad7687_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7946_chip_info = {
|
||||
.dev_name = "ad7946",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 14, 0),
|
||||
.time_spec = &ad7686_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7980_chip_info = {
|
||||
.dev_name = "ad7980",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7980_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7982_chip_info = {
|
||||
.dev_name = "ad7982",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 18, 0),
|
||||
.time_spec = &ad7980_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7983_chip_info = {
|
||||
.dev_name = "ad7983",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7983_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7984_chip_info = {
|
||||
.dev_name = "ad7984",
|
||||
.chan_spec = AD4000_DIFF_CHANNELS('s', 18, 0),
|
||||
.time_spec = &ad7983_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7988_1_chip_info = {
|
||||
.dev_name = "ad7988-1",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7988_1_t_spec,
|
||||
};
|
||||
|
||||
static const struct ad4000_chip_info ad7988_5_chip_info = {
|
||||
.dev_name = "ad7988-5",
|
||||
.chan_spec = AD4000_PSEUDO_DIFF_CHANNELS('u', 16, 0),
|
||||
.time_spec = &ad7686_t_spec,
|
||||
};
|
||||
|
||||
struct ad4000_state {
|
||||
struct spi_device *spi;
|
||||
struct gpio_desc *cnv_gpio;
|
||||
|
|
@ -733,6 +865,21 @@ static const struct spi_device_id ad4000_id[] = {
|
|||
{ "ad4022", (kernel_ulong_t)&ad4022_chip_info },
|
||||
{ "adaq4001", (kernel_ulong_t)&adaq4001_chip_info },
|
||||
{ "adaq4003", (kernel_ulong_t)&adaq4003_chip_info },
|
||||
{ "ad7685", (kernel_ulong_t)&ad7685_chip_info },
|
||||
{ "ad7686", (kernel_ulong_t)&ad7686_chip_info },
|
||||
{ "ad7687", (kernel_ulong_t)&ad7687_chip_info },
|
||||
{ "ad7688", (kernel_ulong_t)&ad7688_chip_info },
|
||||
{ "ad7690", (kernel_ulong_t)&ad7690_chip_info },
|
||||
{ "ad7691", (kernel_ulong_t)&ad7691_chip_info },
|
||||
{ "ad7693", (kernel_ulong_t)&ad7693_chip_info },
|
||||
{ "ad7942", (kernel_ulong_t)&ad7942_chip_info },
|
||||
{ "ad7946", (kernel_ulong_t)&ad7946_chip_info },
|
||||
{ "ad7980", (kernel_ulong_t)&ad7980_chip_info },
|
||||
{ "ad7982", (kernel_ulong_t)&ad7982_chip_info },
|
||||
{ "ad7983", (kernel_ulong_t)&ad7983_chip_info },
|
||||
{ "ad7984", (kernel_ulong_t)&ad7984_chip_info },
|
||||
{ "ad7988-1", (kernel_ulong_t)&ad7988_1_chip_info },
|
||||
{ "ad7988-5", (kernel_ulong_t)&ad7988_5_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(spi, ad4000_id);
|
||||
|
|
@ -754,6 +901,21 @@ static const struct of_device_id ad4000_of_match[] = {
|
|||
{ .compatible = "adi,ad4022", .data = &ad4022_chip_info },
|
||||
{ .compatible = "adi,adaq4001", .data = &adaq4001_chip_info },
|
||||
{ .compatible = "adi,adaq4003", .data = &adaq4003_chip_info },
|
||||
{ .compatible = "adi,ad7685", .data = &ad7685_chip_info },
|
||||
{ .compatible = "adi,ad7686", .data = &ad7686_chip_info },
|
||||
{ .compatible = "adi,ad7687", .data = &ad7687_chip_info },
|
||||
{ .compatible = "adi,ad7688", .data = &ad7688_chip_info },
|
||||
{ .compatible = "adi,ad7690", .data = &ad7690_chip_info },
|
||||
{ .compatible = "adi,ad7691", .data = &ad7691_chip_info },
|
||||
{ .compatible = "adi,ad7693", .data = &ad7693_chip_info },
|
||||
{ .compatible = "adi,ad7942", .data = &ad7942_chip_info },
|
||||
{ .compatible = "adi,ad7946", .data = &ad7946_chip_info },
|
||||
{ .compatible = "adi,ad7980", .data = &ad7980_chip_info },
|
||||
{ .compatible = "adi,ad7982", .data = &ad7982_chip_info },
|
||||
{ .compatible = "adi,ad7983", .data = &ad7983_chip_info },
|
||||
{ .compatible = "adi,ad7984", .data = &ad7984_chip_info },
|
||||
{ .compatible = "adi,ad7988-1", .data = &ad7988_1_chip_info },
|
||||
{ .compatible = "adi,ad7988-5", .data = &ad7988_5_chip_info },
|
||||
{ }
|
||||
};
|
||||
MODULE_DEVICE_TABLE(of, ad4000_of_match);
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue