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