Commit c7a235a4 authored by Federico Vaga's avatar Federico Vaga

drv: recalibrate only the channel that changes

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent 35a54772
......@@ -130,8 +130,8 @@ static int fa_calib_dac_gain_fix(int range, uint32_t gain_c,
return gain_c - error;
}
static void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
{
int range = fa->range[chan];
struct fa_calib_stanza *cal = &fa->calib.adc[range];
......@@ -139,6 +139,8 @@ static void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int offset = cal->offset[chan];
int gain = cal->gain[chan];
if (temperature == 0xFFFFFFFF)
temperature = fa_temperature_read(fa);
if (unlikely(!(fa->flags & FA_DEV_F_PATTERN_DATA)))
gain = fa_calib_adc_gain_fix(range, gain, delta_temp);
......@@ -206,8 +208,8 @@ static int fa_dac_offset_get(struct fa_dev *fa, unsigned int chan)
return off_uv;
}
static int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
{
int range = fa->range[chan];
int32_t off_uv = fa_dac_offset_get(fa, chan);
......@@ -218,6 +220,9 @@ static int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int gain = cal->gain[chan];
int hwval;
if (temperature == 0xFFFFFFFF)
temperature = fa_temperature_read(fa);
if (unlikely(!(fa->flags & FA_DEV_F_PATTERN_DATA)))
gain = fa_calib_dac_gain_fix(range, gain, delta_temp);
......@@ -228,12 +233,10 @@ static int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
return fa_dac_offset_set(fa, chan, hwval);
}
void fa_calib_dac_config(struct fa_dev *fa, int32_t temperature)
static void fa_calib_dac_config(struct fa_dev *fa, int32_t temperature)
{
int i;
if (temperature == 0xFFFFFFFF)
temperature = fa_temperature_read(fa);
dev_dbg(&fa->pdev->dev, "%s: {temperature: %d}\n",
__func__, temperature);
......@@ -248,8 +251,6 @@ static void fa_calib_adc_config(struct fa_dev *fa, int32_t temperature)
int err;
int i;
if (temperature == 0xFFFFFFFF)
temperature = fa_temperature_read(fa);
dev_dbg(&fa->pdev->dev, "%s: {temperature: %d}\n",
__func__, temperature);
......
......@@ -165,8 +165,8 @@ void zfad_reset_offset(struct fa_dev *fa)
for (i = 0; i < FA100M14B4C_NCHAN; ++i) {
fa->user_offset[i] = 0;
fa->zero_offset[i] = 0;
fa_calib_dac_config_chan(fa, i, ~0);
}
fa_calib_dac_config(fa, ~0);
}
/*
......
......@@ -214,7 +214,7 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
spin_lock(&fa->zdev->cset->lock);
fa->zero_offset[i] = usr_val;
spin_unlock(&fa->zdev->cset->lock);
fa_calib_dac_config(fa, ~0);
fa_calib_dac_config_chan(fa, i, ~0);
return 0;
case ZFA_CHx_SAT:
/* TODO when TLV */
......@@ -249,15 +249,13 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
spin_lock(&fa->zdev->cset->lock);
fa->user_offset[chan->index] = usr_val;
spin_unlock(&fa->zdev->cset->lock);
fa_calib_dac_config(fa, ~0);
return 0;
return fa_calib_dac_config_chan(fa, i, ~0);
case ZFA_CHx_OFFSET:
chan = to_zio_chan(dev);
spin_lock(&fa->zdev->cset->lock);
fa->user_offset[chan->index] = usr_val;
spin_unlock(&fa->zdev->cset->lock);
fa_calib_dac_config(fa, ~0);
return 0;
return fa_calib_dac_config_chan(fa, chan->index, ~0);
case ZFA_CTL_DAC_CLR_N:
zfad_reset_offset(fa);
return 0;
......@@ -297,7 +295,8 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
err = fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
if (err)
return err;
fa_calib_config(fa);
fa_calib_adc_config_chan(fa, i, ~0);
fa_calib_dac_config_chan(fa, i, ~0);
return 0;
case ZFA_CHx_CTL_RANGE:
......@@ -307,7 +306,8 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
err = fa_adc_range_set(fa, &to_zio_cset(dev)->chan[i], range);
if (err)
return err;
fa_calib_config(fa);
fa_calib_adc_config_chan(fa, i, ~0);
fa_calib_dac_config_chan(fa, i, ~0);
return 0;
case ZFA_UTC_COARSE:
......
......@@ -655,7 +655,10 @@ extern void fa_spi_exit(struct fa_dev *fd);
extern int fa_calib_init(struct fa_dev *fa);
extern void fa_calib_exit(struct fa_dev *fa);
extern void fa_calib_config(struct fa_dev *fa);
extern void fa_calib_dac_config(struct fa_dev *fa, int32_t temperature);
extern void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature);
extern int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature);
/* 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