Commit 5f72666f authored by Claudiu Beznea's avatar Claudiu Beznea Committed by Jonathan Cameron

iio: adc: at91-sama5d2_adc: add startup and tracktim as parameter for at91_adc_setup_samp_freq()

Add startup and tracktim as parameter for at91_adc_setup_samp_freq()
function. In case of temperature sensor being enabled these parameters
will be configured on temperature read request to improve the accuracy
of the read temperature.
Signed-off-by: default avatarClaudiu Beznea <claudiu.beznea@microchip.com>
Link: https://lore.kernel.org/r/20220803102855.2191070-15-claudiu.beznea@microchip.comSigned-off-by: default avatarJonathan Cameron <Jonathan.Cameron@huawei.com>
parent 04227f95
...@@ -1435,7 +1435,9 @@ static unsigned at91_adc_startup_time(unsigned startup_time_min, ...@@ -1435,7 +1435,9 @@ static unsigned at91_adc_startup_time(unsigned startup_time_min,
return i; return i;
} }
static void at91_adc_setup_samp_freq(struct iio_dev *indio_dev, unsigned freq) static void at91_adc_setup_samp_freq(struct iio_dev *indio_dev, unsigned freq,
unsigned int startup_time,
unsigned int tracktim)
{ {
struct at91_adc_state *st = iio_priv(indio_dev); struct at91_adc_state *st = iio_priv(indio_dev);
unsigned f_per, prescal, startup, mr; unsigned f_per, prescal, startup, mr;
...@@ -1443,17 +1445,17 @@ static void at91_adc_setup_samp_freq(struct iio_dev *indio_dev, unsigned freq) ...@@ -1443,17 +1445,17 @@ static void at91_adc_setup_samp_freq(struct iio_dev *indio_dev, unsigned freq)
f_per = clk_get_rate(st->per_clk); f_per = clk_get_rate(st->per_clk);
prescal = (f_per / (2 * freq)) - 1; prescal = (f_per / (2 * freq)) - 1;
startup = at91_adc_startup_time(st->soc_info.startup_time, startup = at91_adc_startup_time(startup_time, freq / 1000);
freq / 1000);
mr = at91_adc_readl(st, MR); mr = at91_adc_readl(st, MR);
mr &= ~(AT91_SAMA5D2_MR_STARTUP_MASK | AT91_SAMA5D2_MR_PRESCAL_MASK); mr &= ~(AT91_SAMA5D2_MR_STARTUP_MASK | AT91_SAMA5D2_MR_PRESCAL_MASK);
mr |= AT91_SAMA5D2_MR_STARTUP(startup); mr |= AT91_SAMA5D2_MR_STARTUP(startup);
mr |= AT91_SAMA5D2_MR_PRESCAL(prescal); mr |= AT91_SAMA5D2_MR_PRESCAL(prescal);
mr |= AT91_SAMA5D2_MR_TRACKTIM(tracktim);
at91_adc_writel(st, MR, mr); at91_adc_writel(st, MR, mr);
dev_dbg(&indio_dev->dev, "freq: %u, startup: %u, prescal: %u\n", dev_dbg(&indio_dev->dev, "freq: %u, startup: %u, prescal: %u, tracktim=%u\n",
freq, startup, prescal); freq, startup, prescal, tracktim);
st->current_sample_rate = freq; st->current_sample_rate = freq;
} }
...@@ -1725,7 +1727,8 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev, ...@@ -1725,7 +1727,8 @@ static int at91_adc_write_raw(struct iio_dev *indio_dev,
if (ret) if (ret)
return ret; return ret;
mutex_lock(&st->lock); mutex_lock(&st->lock);
at91_adc_setup_samp_freq(indio_dev, val); at91_adc_setup_samp_freq(indio_dev, val,
st->soc_info.startup_time, 0);
mutex_unlock(&st->lock); mutex_unlock(&st->lock);
iio_device_release_direct_mode(indio_dev); iio_device_release_direct_mode(indio_dev);
return 0; return 0;
...@@ -1907,7 +1910,8 @@ static void at91_adc_hw_init(struct iio_dev *indio_dev) ...@@ -1907,7 +1910,8 @@ static void at91_adc_hw_init(struct iio_dev *indio_dev)
at91_adc_writel(st, MR, at91_adc_writel(st, MR,
AT91_SAMA5D2_MR_TRANSFER(2) | AT91_SAMA5D2_MR_ANACH); AT91_SAMA5D2_MR_TRANSFER(2) | AT91_SAMA5D2_MR_ANACH);
at91_adc_setup_samp_freq(indio_dev, st->soc_info.min_sample_rate); at91_adc_setup_samp_freq(indio_dev, st->soc_info.min_sample_rate,
st->soc_info.startup_time, 0);
/* configure extended mode register */ /* configure extended mode register */
at91_adc_config_emr(st, st->oversampling_ratio, 0); at91_adc_config_emr(st, st->oversampling_ratio, 0);
......
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