Commit fb5af3df authored by Federico Vaga's avatar Federico Vaga

lib: use API functions to store/apply/restore configuration

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 4abb96c7
...@@ -38,6 +38,37 @@ ...@@ -38,6 +38,37 @@
#define __ADC_CONF_CHN_OFFSET_ZERO 200 #define __ADC_CONF_CHN_OFFSET_ZERO 200
#define ADC_100M_4CH_14BIT_ACQ_MASK (1LL << ADC_CONF_ACQ_N_SHOTS) | \
(1LL << ADC_CONF_ACQ_POST_SAMP) | \
(1LL << ADC_CONF_ACQ_PRE_SAMP) | \
(1LL << ADC_CONF_ACQ_UNDERSAMPLE) | \
(1LL << ADC_CONF_ACQ_FREQ_HZ) | \
(1LL << ADC_CONF_ACQ_N_BITS)
#define ADC_100M_4CH_14BIT_CHN_MASK (1LL << ADC_CONF_CHN_RANGE) | \
(1LL << ADC_CONF_CHN_TERMINATION) | \
(1LL << ADC_CONF_CHN_OFFSET) | \
(1LL << ADC_CONF_CHN_SATURATION)
#define ADC_100M_4CH_14BIT_BRD_MASK (1LL << ADC_CONF_BRD_STATE_MACHINE_STATUS) | \
(1LL << ADC_CONF_BRD_N_CHAN) | \
(1LL << ADC_CONF_BRD_N_TRG_EXT) | \
(1LL << ADC_CONF_BRD_N_TRG_THR) | \
(1LL << ADC_CONF_BRD_N_TRG_TIM)
#define ADC_100M_4CH_14BIT_CUS_MASK (1ULL << ADC_CONF_100M14B4CHA_BUF_TYPE) | \
(1ULL << ADC_CONF_100M14B4CHA_TRG_SW_EN) | \
(1ULL << ADC_CONF_100M14B4CHA_ACQ_MSHOT_MAX) | \
(1ULL << ADC_CONF_100M14B4CHA_BUF_SIZE_KB)
#define ADC_100M_4CH_14BIT_TRG_EXT_MASK (1LL << ADC_CONF_TRG_EXT_ENABLE) | \
(1LL << ADC_CONF_TRG_EXT_POLARITY) | \
(1LL << ADC_CONF_TRG_EXT_DELAY)
#define ADC_100M_4CH_14BIT_TRG_THR_MASK (1LL << ADC_CONF_TRG_THR_ENABLE) | \
(1LL << ADC_CONF_TRG_THR_POLARITY) | \
(1LL << ADC_CONF_TRG_THR_DELAY) | \
(1LL << ADC_CONF_TRG_THR_THRESHOLD) | \
(1LL << ADC_CONF_TRG_THR_HYSTERESIS)
#define ADC_100M_4CH_14BIT_TRG_TIM_MASK 0x0
static typeof(adc_get_param) *adc_param[] = { static typeof(adc_get_param) *adc_param[] = {
[ADC_CONF_GET] = adc_get_param, [ADC_CONF_GET] = adc_get_param,
[ADC_CONF_SET] = adc_set_param, [ADC_CONF_SET] = adc_set_param,
...@@ -741,15 +772,9 @@ static int adc_100m14b4cha_buffer_get_sample(struct adc_buffer *buf, ...@@ -741,15 +772,9 @@ static int adc_100m14b4cha_buffer_get_sample(struct adc_buffer *buf,
struct tmp_cfg_store { struct tmp_cfg_store {
uint32_t trg_source; uint32_t trg_source;
uint32_t pre;
uint32_t post;
uint32_t nshots;
uint32_t undersample;
uint32_t chan; uint32_t chan;
uint32_t range; struct adc_conf chn[FA100M14B4C_NCHAN];
uint32_t termination; struct adc_conf acq;
uint32_t saturation;
uint32_t offset;
}; };
static int __cfg_offac_save(struct adc_dev *dev, static int __cfg_offac_save(struct adc_dev *dev,
...@@ -757,47 +782,29 @@ static int __cfg_offac_save(struct adc_dev *dev, ...@@ -757,47 +782,29 @@ static int __cfg_offac_save(struct adc_dev *dev,
struct tmp_cfg_store *cfg, struct tmp_cfg_store *cfg,
unsigned long flags) unsigned long flags)
{ {
int err; int err, i;
if ((flags & ADC_OFFSET_AC_F_MANUAL) || if ((flags & ADC_OFFSET_AC_F_MANUAL) ||
!(flags & ADC_OFFSET_AC_F_RESTORE)) !(flags & ADC_OFFSET_AC_F_RESTORE))
return 0; return 0;
cfg->chan = chan; cfg->chan = chan;
err = adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_PRE_SAMP,
&cfg->pre, ADC_CONF_GET); cfg->acq.type = ADC_CONF_TYPE_ACQ;
if (err) cfg->acq.mask = (1ULL << ADC_CONF_ACQ_N_SHOTS) |
goto err; (1ULL << ADC_CONF_ACQ_PRE_SAMP) |
err = adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_POST_SAMP, (1ULL << ADC_CONF_ACQ_POST_SAMP) |
&cfg->post, ADC_CONF_GET); (1ULL << ADC_CONF_ACQ_UNDERSAMPLE);
if (err) err = adc_retrieve_config(dev, &cfg->acq);
goto err;
err = adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_N_SHOTS,
&cfg->nshots, ADC_CONF_GET);
if (err)
goto err;
err = adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_UNDERSAMPLE,
&cfg->undersample, ADC_CONF_GET);
if (err)
goto err;
err = adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_RANGE,
&cfg->range, ADC_CONF_GET);
if (err)
goto err;
err = adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_TERMINATION,
&cfg->termination, ADC_CONF_GET);
if (err)
goto err;
err = adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_SATURATION,
&cfg->saturation, ADC_CONF_GET);
if (err) if (err)
goto err; goto err;
err = adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_OFFSET, for (i = 0; i < FA100M14B4C_NCHAN; ++i) {
&cfg->offset, ADC_CONF_GET); memset(&cfg->chn[i], 0, sizeof(struct adc_conf));
cfg->chn[i].type = ADC_CONF_TYPE_CHN;
cfg->chn[i].mask = ADC_100M_4CH_14BIT_CHN_MASK;
}
err = adc_retrieve_config_n(dev, cfg->chn, FA100M14B4C_NCHAN);
if (err) if (err)
goto err; goto err;
...@@ -823,27 +830,8 @@ static int __cfg_offac_restore(struct adc_dev *dev, ...@@ -823,27 +830,8 @@ static int __cfg_offac_restore(struct adc_dev *dev,
!(flags & ADC_OFFSET_AC_F_RESTORE)) !(flags & ADC_OFFSET_AC_F_RESTORE))
return 0; return 0;
err |= adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_PRE_SAMP, err |= adc_apply_config(dev, 0, &cfg->acq);
&cfg->pre, ADC_CONF_SET); err |= adc_apply_config_n(dev, 0, cfg->chn, FA100M14B4C_NCHAN);
err |= adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_POST_SAMP,
&cfg->post, ADC_CONF_SET);
err |= adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_N_SHOTS,
&cfg->nshots, ADC_CONF_SET);
err |= adc_100m14b4cha_config_acq(dev, ADC_CONF_ACQ_UNDERSAMPLE,
&cfg->undersample, ADC_CONF_SET);
err |= adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_RANGE,
&cfg->range, ADC_CONF_SET);
err |= adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_TERMINATION,
&cfg->termination, ADC_CONF_SET);
err |= adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_SATURATION,
&cfg->saturation, ADC_CONF_SET);
err |= adc_100m14b4cha_config_chn(dev, cfg->chan,
ADC_CONF_CHN_OFFSET,
&cfg->offset, ADC_CONF_SET);
err |= adc_set_param(dev, "cset0/trigger/source", NULL, err |= adc_set_param(dev, "cset0/trigger/source", NULL,
(int *)&cfg->trg_source); (int *)&cfg->trg_source);
...@@ -852,28 +840,46 @@ static int __cfg_offac_restore(struct adc_dev *dev, ...@@ -852,28 +840,46 @@ static int __cfg_offac_restore(struct adc_dev *dev,
return err; return err;
} }
/*
* Following what the configuration for the offset clear computation
*/
#define CFG_OFFAC_NSAMPLES 100000 #define CFG_OFFAC_NSAMPLES 100000
static struct adc_conf cfg_off_acq = { #define CFG_OFFAC_N 3
.type = ADC_CONF_TYPE_ACQ, static struct adc_conf cfg_offac[CFG_OFFAC_N] ={
.mask = (1ULL << ADC_CONF_ACQ_N_SHOTS) | {
(1ULL << ADC_CONF_ACQ_PRE_SAMP) | .type = ADC_CONF_TYPE_ACQ,
(1ULL << ADC_CONF_ACQ_POST_SAMP) | .mask = (1ULL << ADC_CONF_ACQ_N_SHOTS) |
(1ULL << ADC_CONF_ACQ_UNDERSAMPLE), (1ULL << ADC_CONF_ACQ_PRE_SAMP) |
.value = { (1ULL << ADC_CONF_ACQ_POST_SAMP) |
[ADC_CONF_ACQ_N_SHOTS] = 1, (1ULL << ADC_CONF_ACQ_UNDERSAMPLE),
[ADC_CONF_ACQ_PRE_SAMP] = 0, .value = {
[ADC_CONF_ACQ_POST_SAMP] = CFG_OFFAC_NSAMPLES, [ADC_CONF_ACQ_N_SHOTS] = 1,
[ADC_CONF_ACQ_UNDERSAMPLE] = 0, [ADC_CONF_ACQ_PRE_SAMP] = 0,
[ADC_CONF_ACQ_POST_SAMP] = CFG_OFFAC_NSAMPLES,
[ADC_CONF_ACQ_UNDERSAMPLE] = 0,
},
}, },
}; {
.type = ADC_CONF_TYPE_CUS,
static struct adc_conf cfg_off_cus = { .mask = (1ULL << ADC_CONF_100M14B4CHA_TRG_SW_EN) |
.type = ADC_CONF_TYPE_CUS, (1ULL << ADC_CONF_100M14B4CHA_BUF_SIZE_KB),
.mask = (1ULL << ADC_CONF_100M14B4CHA_TRG_SW_EN) | .value = {
(1ULL << ADC_CONF_100M14B4CHA_BUF_SIZE_KB), [ADC_CONF_100M14B4CHA_TRG_SW_EN] = 1,
.value = { [ADC_CONF_100M14B4CHA_BUF_SIZE_KB] = 2048,
[ADC_CONF_100M14B4CHA_TRG_SW_EN] = 1, },
[ADC_CONF_100M14B4CHA_BUF_SIZE_KB] = 2048, },
{
.type= ADC_CONF_TYPE_CHN,
.route_to = 0,
.mask = (1LL << ADC_CONF_CHN_TERMINATION) |
(1LL << ADC_CONF_CHN_OFFSET) |
(1LL << ADC_CONF_CHN_SATURATION),
.value = {
[ADC_CONF_CHN_TERMINATION] = 0,
[ADC_CONF_CHN_OFFSET] = 0,
[ADC_CONF_CHN_SATURATION] = 0x7FFF,
},
}, },
}; };
...@@ -917,22 +923,9 @@ static int __cfg_offac_apply(struct adc_dev *dev, ...@@ -917,22 +923,9 @@ static int __cfg_offac_apply(struct adc_dev *dev,
if (err) if (err)
return -1; return -1;
err = adc_apply_config(dev, 0 , &cfg_off_acq); cfg_offac[2].route_to = chan;
if (err) adc_set_conf(&cfg_offac[2], ADC_CONF_CHN_RANGE, range);
return -1; err = adc_apply_config_n(dev, 0 , cfg_offac, CFG_OFFAC_N);
err = adc_apply_config(dev, 0 , &cfg_off_cus);
if (err)
return -1;
err = adc_100m14b4cha_config_chn(dev, chan,
ADC_CONF_CHN_RANGE,
&range, ADC_CONF_SET);
if (err)
return -1;
err = adc_100m14b4cha_config_chn(dev, chan,
ADC_CONF_CHN_OFFSET,
&offset, ADC_CONF_SET);
if (err) if (err)
return -1; return -1;
...@@ -1044,35 +1037,6 @@ err: ...@@ -1044,35 +1037,6 @@ err:
return err; return err;
} }
#define ADC_100M_4CH_14BIT_ACQ_MASK (1LL << ADC_CONF_ACQ_N_SHOTS) | \
(1LL << ADC_CONF_ACQ_POST_SAMP) | \
(1LL << ADC_CONF_ACQ_PRE_SAMP) | \
(1LL << ADC_CONF_ACQ_UNDERSAMPLE) | \
(1LL << ADC_CONF_ACQ_FREQ_HZ) | \
(1LL << ADC_CONF_ACQ_N_BITS)
#define ADC_100M_4CH_14BIT_CHN_MASK (1LL << ADC_CONF_CHN_RANGE) | \
(1LL << ADC_CONF_CHN_TERMINATION) | \
(1LL << ADC_CONF_CHN_OFFSET) | \
(1LL << ADC_CONF_CHN_SATURATION)
#define ADC_100M_4CH_14BIT_BRD_MASK (1LL << ADC_CONF_BRD_STATE_MACHINE_STATUS) | \
(1LL << ADC_CONF_BRD_N_CHAN) | \
(1LL << ADC_CONF_BRD_N_TRG_EXT) | \
(1LL << ADC_CONF_BRD_N_TRG_THR) | \
(1LL << ADC_CONF_BRD_N_TRG_TIM)
#define ADC_100M_4CH_14BIT_CUS_MASK (1ULL << ADC_CONF_100M14B4CHA_BUF_TYPE) | \
(1ULL << ADC_CONF_100M14B4CHA_TRG_SW_EN) | \
(1ULL << ADC_CONF_100M14B4CHA_ACQ_MSHOT_MAX) | \
(1ULL << ADC_CONF_100M14B4CHA_BUF_SIZE_KB)
#define ADC_100M_4CH_14BIT_TRG_EXT_MASK (1LL << ADC_CONF_TRG_EXT_ENABLE) | \
(1LL << ADC_CONF_TRG_EXT_POLARITY) | \
(1LL << ADC_CONF_TRG_EXT_DELAY)
#define ADC_100M_4CH_14BIT_TRG_THR_MASK (1LL << ADC_CONF_TRG_THR_ENABLE) | \
(1LL << ADC_CONF_TRG_THR_POLARITY) | \
(1LL << ADC_CONF_TRG_THR_DELAY) | \
(1LL << ADC_CONF_TRG_THR_THRESHOLD) | \
(1LL << ADC_CONF_TRG_THR_HYSTERESIS)
#define ADC_100M_4CH_14BIT_TRG_TIM_MASK 0x0
static struct adc_operations fa_100ms_4ch_14bit_op = { static struct adc_operations fa_100ms_4ch_14bit_op = {
.open = adc_100m14b4cha_open, .open = adc_100m14b4cha_open,
.close = adc_zio_close, .close = adc_zio_close,
......
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