mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-01-12 01:20:14 +00:00
iio: adc: ad7124: add debugfs to disable single cycle mode
Add a boolean debugfs attribute to allow disabling the SINGLE_CYCLE bit in the FILTER registers. This causes data to be read on every conversion instead of doing the usual 3 or 4 conversions per sample (depending on the filter). This is only needed for very specific use cases, such as validating the performance of the ADC. So we just expose this feature through debugfs for the rare cases where it is needed by people who really know what they are doing. Signed-off-by: David Lechner <dlechner@baylibre.com> Reviewed-by: Nuno Sá <nuno.sa@analog.com> Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
3a86608788
commit
5f31df5075
@ -10,6 +10,7 @@
|
||||
#include <linux/cleanup.h>
|
||||
#include <linux/clk.h>
|
||||
#include <linux/clk-provider.h>
|
||||
#include <linux/debugfs.h>
|
||||
#include <linux/delay.h>
|
||||
#include <linux/device.h>
|
||||
#include <linux/err.h>
|
||||
@ -223,6 +224,7 @@ struct ad7124_state {
|
||||
*/
|
||||
unsigned int gain_default;
|
||||
DECLARE_KFIFO(live_cfgs_fifo, struct ad7124_channel_config *, AD7124_MAX_CONFIGS);
|
||||
bool enable_single_cycle;
|
||||
};
|
||||
|
||||
static const struct ad7124_chip_info ad7124_4_chip_info = {
|
||||
@ -560,13 +562,15 @@ static int ad7124_write_config(struct ad7124_state *st, struct ad7124_channel_co
|
||||
* sampling frequency even when only one channel is enabled in a
|
||||
* buffered read. If it was not set, the N in ad7124_set_channel_odr()
|
||||
* would be 1 and we would get a faster sampling frequency than what
|
||||
* was requested.
|
||||
* was requested. It may only be disabled through debugfs for testing
|
||||
* purposes.
|
||||
*/
|
||||
return ad_sd_write_reg(&st->sd, AD7124_FILTER(cfg->cfg_slot), 3,
|
||||
FIELD_PREP(AD7124_FILTER_FILTER, filter) |
|
||||
FIELD_PREP(AD7124_FILTER_REJ60, rej60) |
|
||||
FIELD_PREP(AD7124_FILTER_POST_FILTER, post) |
|
||||
AD7124_FILTER_SINGLE_CYCLE |
|
||||
FIELD_PREP(AD7124_FILTER_SINGLE_CYCLE,
|
||||
st->enable_single_cycle) |
|
||||
FIELD_PREP(AD7124_FILTER_FS, cfg->odr_sel_bits));
|
||||
}
|
||||
|
||||
@ -1609,6 +1613,18 @@ static void ad7124_reg_disable(void *r)
|
||||
regulator_disable(r);
|
||||
}
|
||||
|
||||
static void ad7124_debugfs_init(struct iio_dev *indio_dev)
|
||||
{
|
||||
struct dentry *dentry = iio_get_debugfs_dentry(indio_dev);
|
||||
struct ad7124_state *st = iio_priv(indio_dev);
|
||||
|
||||
if (!IS_ENABLED(CONFIG_DEBUG_FS))
|
||||
return;
|
||||
|
||||
debugfs_create_bool("enable_single_cycle", 0644, dentry,
|
||||
&st->enable_single_cycle);
|
||||
}
|
||||
|
||||
static int ad7124_probe(struct spi_device *spi)
|
||||
{
|
||||
const struct ad7124_chip_info *info;
|
||||
@ -1629,6 +1645,9 @@ static int ad7124_probe(struct spi_device *spi)
|
||||
|
||||
st->chip_info = info;
|
||||
|
||||
/* Only disabled for debug/testing purposes. */
|
||||
st->enable_single_cycle = true;
|
||||
|
||||
indio_dev->name = st->chip_info->name;
|
||||
indio_dev->modes = INDIO_DIRECT_MODE;
|
||||
indio_dev->info = &ad7124_info;
|
||||
@ -1686,6 +1705,8 @@ static int ad7124_probe(struct spi_device *spi)
|
||||
if (ret < 0)
|
||||
return dev_err_probe(dev, ret, "Failed to register iio device\n");
|
||||
|
||||
ad7124_debugfs_init(indio_dev);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user