iio: adc: adi-axi-adc: implement backend debugfs interface
Implement debugfs options to read/write registers and print the channel status into a buffer (so we may know better the cause for errors) . Signed-off-by: Nuno Sa <nuno.sa@analog.com> Link: https://patch.msgid.link/20240802-dev-iio-backend-add-debugfs-v2-6-4cb62852f0d0@analog.com Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
This commit is contained in:
parent
232cca61cf
commit
c031fee042
@ -61,6 +61,10 @@
|
||||
|
||||
#define ADI_AXI_ADC_REG_CHAN_STATUS(c) (0x0404 + (c) * 0x40)
|
||||
#define ADI_AXI_ADC_CHAN_STAT_PN_MASK GENMASK(2, 1)
|
||||
/* out of sync */
|
||||
#define ADI_AXI_ADC_CHAN_STAT_PN_OOS BIT(1)
|
||||
/* spurious out of sync */
|
||||
#define ADI_AXI_ADC_CHAN_STAT_PN_ERR BIT(2)
|
||||
|
||||
#define ADI_AXI_ADC_REG_CHAN_CTRL_3(c) (0x0418 + (c) * 0x40)
|
||||
#define ADI_AXI_ADC_CHAN_PN_SEL_MASK GENMASK(19, 16)
|
||||
@ -246,6 +250,30 @@ static int axi_adc_chan_status(struct iio_backend *back, unsigned int chan,
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int axi_adc_debugfs_print_chan_status(struct iio_backend *back,
|
||||
unsigned int chan, char *buf,
|
||||
size_t len)
|
||||
{
|
||||
struct adi_axi_adc_state *st = iio_backend_get_priv(back);
|
||||
u32 val;
|
||||
int ret;
|
||||
|
||||
ret = axi_adc_read_chan_status(st, chan, &val);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/*
|
||||
* PN_ERR is cleared in case out of sync is set. Hence, no point in
|
||||
* checking both bits.
|
||||
*/
|
||||
if (val & ADI_AXI_ADC_CHAN_STAT_PN_OOS)
|
||||
return scnprintf(buf, len, "CH%u: Out of Sync.\n", chan);
|
||||
if (val & ADI_AXI_ADC_CHAN_STAT_PN_ERR)
|
||||
return scnprintf(buf, len, "CH%u: Spurious Out of Sync.\n", chan);
|
||||
|
||||
return scnprintf(buf, len, "CH%u: OK.\n", chan);
|
||||
}
|
||||
|
||||
static int axi_adc_chan_enable(struct iio_backend *back, unsigned int chan)
|
||||
{
|
||||
struct adi_axi_adc_state *st = iio_backend_get_priv(back);
|
||||
@ -280,6 +308,17 @@ static void axi_adc_free_buffer(struct iio_backend *back,
|
||||
iio_dmaengine_buffer_free(buffer);
|
||||
}
|
||||
|
||||
static int axi_adc_reg_access(struct iio_backend *back, unsigned int reg,
|
||||
unsigned int writeval, unsigned int *readval)
|
||||
{
|
||||
struct adi_axi_adc_state *st = iio_backend_get_priv(back);
|
||||
|
||||
if (readval)
|
||||
return regmap_read(st->regmap, reg, readval);
|
||||
|
||||
return regmap_write(st->regmap, reg, writeval);
|
||||
}
|
||||
|
||||
static const struct regmap_config axi_adc_regmap_config = {
|
||||
.val_bits = 32,
|
||||
.reg_bits = 32,
|
||||
@ -298,6 +337,8 @@ static const struct iio_backend_ops adi_axi_adc_ops = {
|
||||
.iodelay_set = axi_adc_iodelays_set,
|
||||
.test_pattern_set = axi_adc_test_pattern_set,
|
||||
.chan_status = axi_adc_chan_status,
|
||||
.debugfs_reg_access = iio_backend_debugfs_ptr(axi_adc_reg_access),
|
||||
.debugfs_print_chan_status = iio_backend_debugfs_ptr(axi_adc_debugfs_print_chan_status),
|
||||
};
|
||||
|
||||
static const struct iio_backend_info adi_axi_adc_generic = {
|
||||
|
Loading…
Reference in New Issue
Block a user