]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
IIO: DDS: AD9834: Add support for AD9837 and AD9838 DDS devices
authorMichael Hennerich <michael.hennerich@analog.com>
Wed, 27 Apr 2011 15:22:36 +0000 (17:22 +0200)
committerGreg Kroah-Hartman <gregkh@suse.de>
Tue, 3 May 2011 18:40:01 +0000 (11:40 -0700)
Add support for AD9837 and AD9838 DDS devices
Update copyright and license notice
Fix typo

Signed-off-by: Michael Hennerich <michael.hennerich@analog.com>
Acked-by: Jonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
drivers/staging/iio/dds/Kconfig
drivers/staging/iio/dds/ad9834.c
drivers/staging/iio/dds/ad9834.h

index 06b6f3a8e420cf589442d47609158aeb76658dea..e07431d80093f19107e88d5ccd4f0bc6c65159e4 100644 (file)
@@ -21,11 +21,11 @@ config AD9832
          module will be called ad9832.
 
 config AD9834
-       tristate "Analog Devices ad9833/4/ driver"
+       tristate "Analog Devices AD9833/4/7/8 driver"
        depends on SPI
        help
          Say yes here to build support for Analog Devices DDS chip
-         AD9833 and AD9834, provides direct access via sysfs.
+         AD9833, AD9834, AD9837 and AD9838, provides direct access via sysfs.
 
          To compile this driver as a module, choose M here: the
          module will be called ad9834.
index da5e302cf0fd36fb08da0e993477767fc9fcba29..6dbc45890cd2f393b3fbe708d80e582a2db5cf61 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * AD9834 SPI DAC driver
+ * AD9833/AD9834/AD9837/AD9838 SPI DDS driver
  *
- * Copyright 2010 Analog Devices Inc.
+ * Copyright 2010-2011 Analog Devices Inc.
  *
- * Licensed under the GPL-2 or later.
+ * Licensed under the GPL-2.
  */
 
 #include <linux/interrupt.h>
@@ -47,7 +47,7 @@ static int ad9834_write_frequency(struct ad9834_state *st,
                                       (AD9834_FREQ_BITS / 2)) &
                                       RES_MASK(AD9834_FREQ_BITS / 2)));
 
-       return spi_sync(st->spi, &st->freq_msg);;
+       return spi_sync(st->spi, &st->freq_msg);
 }
 
 static int ad9834_write_phase(struct ad9834_state *st,
@@ -148,7 +148,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
        struct ad9834_state *st = dev_info->dev_data;
        struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
        int ret = 0;
-       bool is_ad9833 = st->devid == ID_AD9833;
+       bool is_ad9833_7 = (st->devid == ID_AD9833) || (st->devid == ID_AD9837);
 
        mutex_lock(&dev_info->mlock);
 
@@ -156,10 +156,10 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
        case 0:
                if (sysfs_streq(buf, "sine")) {
                        st->control &= ~AD9834_MODE;
-                       if (is_ad9833)
+                       if (is_ad9833_7)
                                st->control &= ~AD9834_OPBITEN;
                } else if (sysfs_streq(buf, "triangle")) {
-                       if (is_ad9833) {
+                       if (is_ad9833_7) {
                                st->control &= ~AD9834_OPBITEN;
                                st->control |= AD9834_MODE;
                        } else if (st->control & AD9834_OPBITEN) {
@@ -167,7 +167,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
                        } else {
                                st->control |= AD9834_MODE;
                        }
-               } else if (is_ad9833 && sysfs_streq(buf, "square")) {
+               } else if (is_ad9833_7 && sysfs_streq(buf, "square")) {
                        st->control &= ~AD9834_MODE;
                        st->control |= AD9834_OPBITEN;
                } else {
@@ -217,7 +217,7 @@ static ssize_t ad9834_show_out0_wavetype_available(struct device *dev,
        struct ad9834_state *st = iio_dev_get_devdata(dev_info);
        char *str;
 
-       if (st->devid == ID_AD9833)
+       if ((st->devid == ID_AD9833) || (st->devid == ID_AD9837))
                str = "sine triangle square";
        else if (st->control & AD9834_OPBITEN)
                str = "sine";
@@ -301,13 +301,12 @@ static mode_t ad9834_attr_is_visible(struct kobject *kobj,
 
        mode_t mode = attr->mode;
 
-       if (st->devid == ID_AD9834)
-               return mode;
-
-       if ((attr == &iio_dev_attr_dds0_out1_enable.dev_attr.attr) ||
+       if (((st->devid == ID_AD9833) || (st->devid == ID_AD9837)) &&
+               ((attr == &iio_dev_attr_dds0_out1_enable.dev_attr.attr) ||
                (attr == &iio_dev_attr_dds0_out1_wavetype.dev_attr.attr) ||
                (attr ==
-               &iio_dev_attr_dds0_out1_wavetype_available.dev_attr.attr))
+               &iio_dev_attr_dds0_out1_wavetype_available.dev_attr.attr) ||
+               (attr == &iio_dev_attr_dds0_pincontrol_en.dev_attr.attr)))
                mode = 0;
 
        return mode;
@@ -445,6 +444,8 @@ static int __devexit ad9834_remove(struct spi_device *spi)
 static const struct spi_device_id ad9834_id[] = {
        {"ad9833", ID_AD9833},
        {"ad9834", ID_AD9834},
+       {"ad9837", ID_AD9837},
+       {"ad9838", ID_AD9838},
        {}
 };
 
@@ -472,6 +473,6 @@ static void __exit ad9834_exit(void)
 module_exit(ad9834_exit);
 
 MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>");
-MODULE_DESCRIPTION("Analog Devices AD9833/AD9834 DDS");
+MODULE_DESCRIPTION("Analog Devices AD9833/AD9834/AD9837/AD9838 DDS");
 MODULE_LICENSE("GPL v2");
 MODULE_ALIAS("spi:ad9834");
index 0fc3b8859e9efe1685f9790937712c8bfe01ec18..2abd63587e0372f6d092f3c93e5c79fdb88041fb 100644 (file)
@@ -1,9 +1,9 @@
 /*
- * AD9834 SPI DDS driver
+ * AD9833/AD9834/AD9837/AD9838 SPI DDS driver
  *
- * Copyright 2010 Analog Devices Inc.
+ * Copyright 2010-2011 Analog Devices Inc.
  *
- * Licensed under the GPL-2 or later.
+ * Licensed under the GPL-2.
  */
 #ifndef IIO_DDS_AD9834_H_
 #define IIO_DDS_AD9834_H_
@@ -107,6 +107,8 @@ struct ad9834_platform_data {
 enum ad9834_supported_device_ids {
        ID_AD9833,
        ID_AD9834,
+       ID_AD9837,
+       ID_AD9838,
 };
 
 #endif /* IIO_DDS_AD9834_H_ */