Commit 9bbbffe6 authored by Federico Vaga's avatar Federico Vaga

sw:drv: add flag to read temperature on calibration

Signed-off-by: Federico Vaga's avatarFederico Vaga <federico.vaga@cern.ch>
parent e66fc2f3
......@@ -153,7 +153,7 @@ static bool fa_calib_is_compensation_on(struct fa_dev *fa)
* You must hold &fa->zdev->cset->lock while calling this function
*/
void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
int32_t temperature, unsigned int flags)
{
int range = fa->range[chan];
struct fa_calib_stanza *cal = &fa->calib.dac[range];
......@@ -163,7 +163,7 @@ void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
if (fa_calib_is_compensation_on(fa)) {
int32_t delta_temp;
if (temperature == 0xFFFFFFFF)
if (flags & FA_CALIB_FLAG_READ_TEMP)
temperature = fa_temperature_read(fa);
delta_temp = (temperature / 10) - cal->temperature;
gain = fa_calib_adc_gain_fix(range, cal->gain[chan],
......@@ -253,7 +253,7 @@ static int fa_dac_offset_get(struct fa_dev *fa, unsigned int chan)
* You must hold &fa->zdev->cset->lock while calling this function
*/
int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature)
int32_t temperature, unsigned int flags)
{
int32_t off_uv = fa_dac_offset_get(fa, chan);
int32_t off_uv_raw = fa_dac_offset_raw_get(off_uv);
......@@ -265,7 +265,7 @@ int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
if (fa_calib_is_compensation_on(fa)) {
int32_t delta_temp;
if (temperature == 0xFFFFFFFF)
if (flags & FA_CALIB_FLAG_READ_TEMP)
temperature = fa_temperature_read(fa);
delta_temp = (temperature / 10) - cal->temperature;
gain = fa_calib_dac_gain_fix(range, cal->gain[chan],
......@@ -294,8 +294,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);
fa_calib_dac_config_chan(fa, i, temperature);
fa_calib_adc_config_chan(fa, i, temperature, 0);
fa_calib_dac_config_chan(fa, i, temperature, 0);
}
spin_unlock(&fa->zdev->cset->lock);
}
......
......@@ -212,7 +212,7 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
return -EINVAL;
spin_lock(&fa->zdev->cset->lock);
fa->zero_offset[i] = usr_val;
fa_calib_dac_config_chan(fa, i, ~0);
fa_calib_dac_config_chan(fa, i, 0, FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return 0;
case ZFA_CHx_SAT:
......@@ -247,14 +247,16 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
return -EINVAL;
spin_lock(&fa->zdev->cset->lock);
fa->user_offset[chan->index] = usr_val;
err = fa_calib_dac_config_chan(fa, i, ~0);
err = fa_calib_dac_config_chan(fa, i, 0,
FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return err;
case ZFA_CHx_OFFSET:
chan = to_zio_chan(dev);
spin_lock(&fa->zdev->cset->lock);
fa->user_offset[chan->index] = usr_val;
err = fa_calib_dac_config_chan(fa, chan->index, ~0);
err = fa_calib_dac_config_chan(fa, chan->index, 0,
FA_CALIB_FLAG_READ_TEMP);
spin_unlock(&fa->zdev->cset->lock);
return err;
case ZFAT_SR_UNDER:
......@@ -294,8 +296,8 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
if (err)
return err;
spin_lock(&fa->zdev->cset->lock);
fa_calib_adc_config_chan(fa, i, ~0);
fa_calib_dac_config_chan(fa, i, ~0);
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;
......@@ -307,8 +309,8 @@ static int zfad_conf_set(struct device *dev, struct zio_attribute *zattr,
if (err)
return err;
spin_lock(&fa->zdev->cset->lock);
fa_calib_adc_config_chan(fa, i, ~0);
fa_calib_dac_config_chan(fa, i, ~0);
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;
......
......@@ -662,10 +662,11 @@ 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);
#define FA_CALIB_FLAG_READ_TEMP BIT(0)
extern void fa_calib_adc_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature);
int32_t temperature, unsigned int flags);
extern int fa_calib_dac_config_chan(struct fa_dev *fa, unsigned int chan,
int32_t temperature);
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