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: Michael Hennerich <michael.hennerich@analog.com> Acked-by: Jonathan Cameron <jic23@cam.ac.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
This commit is contained in:
Родитель
ba1c2bb2cc
Коммит
bd5a793fec
|
@ -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.
|
||||||
|
|
|
@ -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>
|
#include <linux/interrupt.h>
|
||||||
|
@ -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,
|
||||||
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,
|
||||||
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,
|
||||||
} 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,
|
||||||
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,
|
||||||
|
|
||||||
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)
|
||||||
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)
|
||||||
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");
|
||||||
|
|
|
@ -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_
|
#ifndef IIO_DDS_AD9834_H_
|
||||||
#define IIO_DDS_AD9834_H_
|
#define IIO_DDS_AD9834_H_
|
||||||
|
@ -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_ */
|
||||||
|
|
Загрузка…
Ссылка в новой задаче