mirror of
https://github.com/torvalds/linux.git
synced 2024-11-10 14:11:52 +00:00
Merge series "ASoC: stm32: dfsdm: change rate limits" from Olivier Moysan <olivier.moysan@st.com>:
Widening of the supported rate range in the STM32 DFSDM driver. The rates were previously limited to 8kHz, 16kHz and 32kHz. Allow rate capture in the whole range 8kHz-48kHz as there is no hardware limitation to support it. Actual sample resolution is dependent on audio rate and DFSDM configuration. Add a trace to allow simple check of sample resolution. Olivier Moysan (2): ASoC: stm32: dfsdm: change rate limits ASoC: stm32: dfsdm: add actual resolution trace drivers/iio/adc/stm32-dfsdm-adc.c | 4 ++++ drivers/iio/adc/stm32-dfsdm.h | 2 ++ sound/soc/stm/stm32_adfsdm.c | 8 +++----- 3 files changed, 9 insertions(+), 5 deletions(-) -- 2.17.1
This commit is contained in:
commit
34257a7269
@ -293,6 +293,7 @@ static int stm32_dfsdm_compute_osrs(struct stm32_dfsdm_filter *fl,
|
||||
max >>= flo->rshift;
|
||||
}
|
||||
flo->max = (s32)max;
|
||||
flo->bits = bits;
|
||||
|
||||
pr_debug("%s: fast %d, fosr %d, iosr %d, res 0x%llx/%d bits, rshift %d, lshift %d\n",
|
||||
__func__, fast, flo->fosr, flo->iosr,
|
||||
@ -476,6 +477,9 @@ static int stm32_dfsdm_channels_configure(struct iio_dev *indio_dev,
|
||||
if (!flo->res)
|
||||
return -EINVAL;
|
||||
|
||||
dev_dbg(&indio_dev->dev, "Samples actual resolution: %d bits",
|
||||
min(flo->bits, (u32)DFSDM_DATA_RES - 1));
|
||||
|
||||
for_each_set_bit(bit, &adc->smask,
|
||||
sizeof(adc->smask) * BITS_PER_BYTE) {
|
||||
chan = indio_dev->channels + bit;
|
||||
|
@ -249,6 +249,7 @@ enum stm32_dfsdm_sinc_order {
|
||||
* @rshift: output sample right shift (hardware shift)
|
||||
* @lshift: output sample left shift (software shift)
|
||||
* @res: output sample resolution
|
||||
* @bits: output sample resolution in bits
|
||||
* @max: output sample maximum positive value
|
||||
*/
|
||||
struct stm32_dfsdm_filter_osr {
|
||||
@ -257,6 +258,7 @@ struct stm32_dfsdm_filter_osr {
|
||||
unsigned int rshift;
|
||||
unsigned int lshift;
|
||||
u64 res;
|
||||
u32 bits;
|
||||
s32 max;
|
||||
};
|
||||
|
||||
|
@ -47,9 +47,6 @@ static const struct snd_pcm_hardware stm32_adfsdm_pcm_hw = {
|
||||
SNDRV_PCM_INFO_MMAP | SNDRV_PCM_INFO_PAUSE,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE | SNDRV_PCM_FMTBIT_S32_LE,
|
||||
|
||||
.rate_min = 8000,
|
||||
.rate_max = 32000,
|
||||
|
||||
.channels_min = 1,
|
||||
.channels_max = 1,
|
||||
|
||||
@ -143,8 +140,9 @@ static const struct snd_soc_dai_driver stm32_adfsdm_dai = {
|
||||
.channels_max = 1,
|
||||
.formats = SNDRV_PCM_FMTBIT_S16_LE |
|
||||
SNDRV_PCM_FMTBIT_S32_LE,
|
||||
.rates = (SNDRV_PCM_RATE_8000 | SNDRV_PCM_RATE_16000 |
|
||||
SNDRV_PCM_RATE_32000),
|
||||
.rates = SNDRV_PCM_RATE_CONTINUOUS,
|
||||
.rate_min = 8000,
|
||||
.rate_max = 48000,
|
||||
},
|
||||
.ops = &stm32_adfsdm_dai_ops,
|
||||
};
|
||||
|
Loading…
Reference in New Issue
Block a user