Commit a5f45966 authored by Federico Vaga's avatar Federico Vaga

kernel: fix trigger compensation

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 9216a866
......@@ -374,6 +374,7 @@ static int __fa_init(struct fa_dev *fa)
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_CFG_HW_SEL],
1);
zdev->cset->ti->zattr_set.ext_zattr[FA100M14B4C_TATTR_EXT].value = 1;
fa->trig_compensation = FA_CH_TX_DELAY;
} else {
/* Enable Software trigger*/
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_CFG_SW_EN],
......@@ -381,6 +382,8 @@ static int __fa_init(struct fa_dev *fa)
/* Disable Hardware trigger*/
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_CFG_HW_EN],
0);
/* Set default trigger delay */
fa->trig_compensation = 0;
}
/* Zero offsets and release the DAC clear */
......@@ -398,7 +401,8 @@ static int __fa_init(struct fa_dev *fa)
* Set Trigger delay in order to compensate
* the channel signal transmission delay
*/
fa_writel(fa, fa->fa_utc_base, &zfad_regs[ZFAT_DLY], FA_CH_TX_DELAY);
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_DLY],
fa->trig_compensation);
/* disable auto_start */
fa->enable_auto_start = 0;
......
......@@ -99,7 +99,7 @@ static int zfat_conf_set(struct device *dev, struct zio_attribute *zattr,
{
struct fa_dev *fa = get_zfadc(dev);
struct zio_ti *ti = to_zio_ti(dev);
uint32_t tmp_val = usr_val;
uint32_t tmp_val = usr_val, delay;
switch (zattr->id) {
case ZFAT_SHOTS_NB:
......@@ -133,7 +133,18 @@ static int zfat_conf_set(struct device *dev, struct zio_attribute *zattr,
break;
case ZFAT_DLY:
/* Add channel signal transmission delay */
tmp_val += FA_CH_TX_DELAY;
tmp_val += fa->trig_compensation;
break;
case ZFAT_CFG_HW_SEL:
/* Remove old compensation value */
delay = fa_readl(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_DLY]);
delay -= fa->trig_compensation;
/* Calculate and apply new compensation */
fa->trig_compensation = tmp_val ? FA_CH_TX_DELAY : 0;
delay += fa->trig_compensation;
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[ZFAT_DLY], delay);
break;
}
fa_writel(fa, fa->fa_adc_csr_base, &zfad_regs[zattr->id], tmp_val);
......@@ -151,6 +162,11 @@ static int zfat_info_get(struct device *dev, struct zio_attribute *zattr,
struct fa_dev *fa = get_zfadc(dev);
*usr_val = fa_readl(fa, fa->fa_adc_csr_base, &zfad_regs[zattr->id]);
switch (zattr->id) {
case ZFAT_DLY:
/* Add channel signal transmission delay */
*usr_val -= fa->trig_compensation;
}
return 0;
}
......
......@@ -359,6 +359,8 @@ struct fa_dev {
/* flag */
int enable_auto_start;
uint32_t trig_compensation;
};
/*
......
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