[PATCH] iio/adc/ad9467.c: Add support for AD9649

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



The AD9649 is a 14-bit 20-80Msps ADC.
---
 drivers/iio/adc/ad9467.c     | 22 +++++++++++++++++++++-
 drivers/iio/adc/cf_axi_adc.h |  7 +++++++
 2 files changed, 28 insertions(+), 1 deletion(-)

diff --git a/drivers/iio/adc/ad9467.c b/drivers/iio/adc/ad9467.c
index dde27cb..ca67b74 100644
--- a/drivers/iio/adc/ad9467.c
+++ b/drivers/iio/adc/ad9467.c
@@ -370,6 +370,7 @@ static int ad9467_dco_calibrate(struct iio_dev *indio_dev, unsigned chan)
 	case CHIPID_AD9680:
 	case CHIPID_AD9625:
 	case CHIPID_AD9434:
+	case CHIPID_AD9649:
 		return 0;
 	case CHIPID_AD9265:
 	case CHIPID_AD9652:
@@ -417,6 +418,10 @@ static const int ad9652_scale_table[][2] = {
 	{1250, 0}, {1125, 1}, {1200, 2}, {1250, 3}, {1000, 5},
 };
 
+static const int ad9649_scale_table[][2] = {
+	{2000, 0},
+};
+
 static int ad9467_scale(struct axiadc_converter *conv, int index)
 {
 	if (index > conv->chip_info->num_scales)
@@ -848,7 +853,15 @@ static const struct axiadc_chip_info axiadc_chip_info_tbl[] = {
 		       .channel[0] = AIM_CHAN_NOCALIB(0, 0, 12, 'S', 0, NULL, 0),
 		       .channel[1] = AIM_CHAN_NOCALIB(1, 1, 12, 'S', 0, NULL, 0),
 		       },
-
+	[ID_AD9649] = {
+		       .name = "AD9649",
+		       .max_rate = 80000000UL,
+		       .scale_table = ad9649_scale_table,
+		       .num_scales = ARRAY_SIZE(ad9649_scale_table),
+		       .max_testmode = TESTMODE_ONE_ZERO_TOGGLE,
+		       .num_channels = 1,
+		       .channel[0] = AIM_CHAN_NOCALIB(0, 0, 14, 'S', 0, NULL, 0),
+		       },
 };
 
 static int ad9250_setup(struct spi_device *spi, unsigned m, unsigned l)
@@ -1351,6 +1364,12 @@ static int ad9467_probe(struct spi_device *spi)
 		    AD9643_DEF_OUTPUT_MODE | OUTPUT_MODE_TWOS_COMPLEMENT;
 		ret = ad9467_outputmode_set(spi, conv->adc_output_mode);
 		break;
+	case CHIPID_AD9649:
+		conv->chip_info = &axiadc_chip_info_tbl[ID_AD9649];
+		conv->adc_output_mode =
+		    AD9643_DEF_OUTPUT_MODE | OUTPUT_MODE_TWOS_COMPLEMENT;
+		ret = ad9467_outputmode_set(spi, conv->adc_output_mode);
+		break;
 	default:
 		dev_err(&spi->dev, "Unrecognized CHIP_ID 0x%X\n", conv->id);
 		ret = -ENODEV;
@@ -1424,6 +1443,7 @@ static const struct spi_device_id ad9467_id[] = {
 	{"ad9680", CHIPID_AD9680},
 	{"ad9652", CHIPID_AD9652},
 	{"ad9234", CHIPID_AD9234},
+	{"ad9649", CHIPID_AD9649},
 	{}
 };
 
diff --git a/drivers/iio/adc/cf_axi_adc.h b/drivers/iio/adc/cf_axi_adc.h
index 0ad524e..8c36b9c 100644
--- a/drivers/iio/adc/cf_axi_adc.h
+++ b/drivers/iio/adc/cf_axi_adc.h
@@ -316,6 +316,12 @@ enum adc_data_sel {
 
 #define CHIPID_AD9234			0xCE
 
+/*
+ * Analog Devices AD9649
+ */
+
+#define CHIPID_AD9649			0x6F
+
 /* debugfs direct register access */
 #define DEBUGFS_DRA_PCORE_REG_MAGIC	0x80000000
 
@@ -335,6 +341,7 @@ enum {
 	ID_AD9652,
 	ID_AD9234,
 	ID_AD9680_x2,
+	ID_AD9649,
 };
 
 struct axiadc_chip_info {
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-iio" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Input]     [Linux Kernel]     [Linux SCSI]     [X.org]

  Powered by Linux