Commit bd5a793f authored by Michael Hennerich's avatar Michael Hennerich Committed by Greg Kroah-Hartman

IIO: DDS: AD9834: Add support for AD9837 and AD9838 DDS devices

Add support for AD9837 and AD9838 DDS devices
Update copyright and license notice
Fix typo
Signed-off-by: default avatarMichael Hennerich <michael.hennerich@analog.com>
Acked-by: default avatarJonathan Cameron <jic23@cam.ac.uk>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
parent ba1c2bb2
...@@ -21,11 +21,11 @@ config AD9832 ...@@ -21,11 +21,11 @@ config AD9832
module will be called ad9832. module will be called ad9832.
config AD9834 config AD9834
tristate "Analog Devices ad9833/4/ driver" tristate "Analog Devices AD9833/4/7/8 driver"
depends on SPI depends on SPI
help help
Say yes here to build support for Analog Devices DDS chip 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 To compile this driver as a module, choose M here: the
module will be called ad9834. module will be called ad9834.
......
/* /*
* 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> #include <linux/interrupt.h>
...@@ -47,7 +47,7 @@ static int ad9834_write_frequency(struct ad9834_state *st, ...@@ -47,7 +47,7 @@ static int ad9834_write_frequency(struct ad9834_state *st,
(AD9834_FREQ_BITS / 2)) & (AD9834_FREQ_BITS / 2)) &
RES_MASK(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, static int ad9834_write_phase(struct ad9834_state *st,
...@@ -148,7 +148,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev, ...@@ -148,7 +148,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
struct ad9834_state *st = dev_info->dev_data; struct ad9834_state *st = dev_info->dev_data;
struct iio_dev_attr *this_attr = to_iio_dev_attr(attr); struct iio_dev_attr *this_attr = to_iio_dev_attr(attr);
int ret = 0; 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); mutex_lock(&dev_info->mlock);
...@@ -156,10 +156,10 @@ static ssize_t ad9834_store_wavetype(struct device *dev, ...@@ -156,10 +156,10 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
case 0: case 0:
if (sysfs_streq(buf, "sine")) { if (sysfs_streq(buf, "sine")) {
st->control &= ~AD9834_MODE; st->control &= ~AD9834_MODE;
if (is_ad9833) if (is_ad9833_7)
st->control &= ~AD9834_OPBITEN; st->control &= ~AD9834_OPBITEN;
} else if (sysfs_streq(buf, "triangle")) { } else if (sysfs_streq(buf, "triangle")) {
if (is_ad9833) { if (is_ad9833_7) {
st->control &= ~AD9834_OPBITEN; st->control &= ~AD9834_OPBITEN;
st->control |= AD9834_MODE; st->control |= AD9834_MODE;
} else if (st->control & AD9834_OPBITEN) { } else if (st->control & AD9834_OPBITEN) {
...@@ -167,7 +167,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev, ...@@ -167,7 +167,7 @@ static ssize_t ad9834_store_wavetype(struct device *dev,
} else { } else {
st->control |= AD9834_MODE; 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_MODE;
st->control |= AD9834_OPBITEN; st->control |= AD9834_OPBITEN;
} else { } else {
...@@ -217,7 +217,7 @@ static ssize_t ad9834_show_out0_wavetype_available(struct device *dev, ...@@ -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); struct ad9834_state *st = iio_dev_get_devdata(dev_info);
char *str; char *str;
if (st->devid == ID_AD9833) if ((st->devid == ID_AD9833) || (st->devid == ID_AD9837))
str = "sine triangle square"; str = "sine triangle square";
else if (st->control & AD9834_OPBITEN) else if (st->control & AD9834_OPBITEN)
str = "sine"; str = "sine";
...@@ -301,13 +301,12 @@ static mode_t ad9834_attr_is_visible(struct kobject *kobj, ...@@ -301,13 +301,12 @@ static mode_t ad9834_attr_is_visible(struct kobject *kobj,
mode_t mode = attr->mode; mode_t mode = attr->mode;
if (st->devid == ID_AD9834) if (((st->devid == ID_AD9833) || (st->devid == ID_AD9837)) &&
return mode; ((attr == &iio_dev_attr_dds0_out1_enable.dev_attr.attr) ||
if ((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.dev_attr.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; mode = 0;
return mode; return mode;
...@@ -445,6 +444,8 @@ static int __devexit ad9834_remove(struct spi_device *spi) ...@@ -445,6 +444,8 @@ static int __devexit ad9834_remove(struct spi_device *spi)
static const struct spi_device_id ad9834_id[] = { static const struct spi_device_id ad9834_id[] = {
{"ad9833", ID_AD9833}, {"ad9833", ID_AD9833},
{"ad9834", ID_AD9834}, {"ad9834", ID_AD9834},
{"ad9837", ID_AD9837},
{"ad9838", ID_AD9838},
{} {}
}; };
...@@ -472,6 +473,6 @@ static void __exit ad9834_exit(void) ...@@ -472,6 +473,6 @@ static void __exit ad9834_exit(void)
module_exit(ad9834_exit); module_exit(ad9834_exit);
MODULE_AUTHOR("Michael Hennerich <hennerich@blackfin.uclinux.org>"); 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_LICENSE("GPL v2");
MODULE_ALIAS("spi:ad9834"); MODULE_ALIAS("spi:ad9834");
/* /*
* 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_ #ifndef IIO_DDS_AD9834_H_
#define IIO_DDS_AD9834_H_ #define IIO_DDS_AD9834_H_
...@@ -107,6 +107,8 @@ struct ad9834_platform_data { ...@@ -107,6 +107,8 @@ struct ad9834_platform_data {
enum ad9834_supported_device_ids { enum ad9834_supported_device_ids {
ID_AD9833, ID_AD9833,
ID_AD9834, ID_AD9834,
ID_AD9837,
ID_AD9838,
}; };
#endif /* IIO_DDS_AD9834_H_ */ #endif /* IIO_DDS_AD9834_H_ */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment