Commit e6c895c4 authored by Federico Vaga's avatar Federico Vaga

sw: bugfix default setup at init time

The calibration and the default range were not set consistently. The
calibration initialization was running before when the default range was
the result of a memset (0 -> 10V). The code that initialize the voltage
range to 1V happens after but without applying again the calibration
values.

To solve the problem, now the function that sets the voltage range also
sets the calibration values. Ding this allowed to reduce the code in the
voltage range assignment in the ZIO part.
Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent b107487b
......@@ -293,6 +293,13 @@ int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
return fa_dac_offset_set(fa, chan, hwval);
}
void fa_calib_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature, unsigned int flags)
{
fa_calib_adc_config_chan(fa, chan, temperature, flags);
fa_calib_dac_config_chan(fa, chan, temperature, flags);
}
void fa_calib_config(struct fa_dev *fa)
{
int32_t temperature;
......@@ -300,10 +307,8 @@ void fa_calib_config(struct fa_dev *fa)
temperature = fa_temperature_read(fa);
spin_lock(&fa->zdev->cset->lock);
for (i = 0; i < FA100M14B4C_NCHAN; ++i) {
fa_calib_adc_config_chan(fa, i, temperature, 0);
fa_calib_dac_config_chan(fa, i, temperature, 0);
}
for (i = 0; i < FA100M14B4C_NCHAN; ++i)
fa_calib_config_chan(fa, i, temperature, 0);
spin_unlock(&fa->zdev->cset->lock);
}
/**
......
......@@ -251,6 +251,7 @@ int fa_adc_range_set(struct fa_dev *fa, struct zio_channel *chan, int range)
spin_lock(&fa->zdev->cset->lock);
fa->range[chan->index] = range;
fa_calib_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return 0;
......
......@@ -295,27 +295,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
range = zfad_convert_user_range(usr_val);
if (range < 0)
return range;
err = fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
if (err)
return err;
spin_lock(&fa->zdev->cset->lock);
fa_calib_adc_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
fa_calib_dac_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return 0;
return fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
case ZFA_CHx_CTL_RANGE:
range = zfad_convert_user_range(usr_val);
if (range < 0)
return range;
err = fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
if (err)
return err;
spin_lock(&fa->zdev->cset->lock);
fa_calib_adc_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
fa_calib_dac_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return 0;
return fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
case ZFA_UTC_COARSE:
if (usr_val >= FA100M14B4C_UTC_CLOCK_FREQ) {
......
......@@ -539,6 +539,8 @@ extern void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature, unsigned int flags);
extern int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature, unsigned int flags);
extern void fa_calib_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature, unsigned int flags);
/* functions exported by fa-debug.c */
extern int fa_debug_init(struct fa_dev *fa);
......
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