* [PATCH] ALSA: pcm_dmaengine: Remove hardcoded PCM formats
@ 2013-10-25 16:03 Takashi Iwai
2013-10-27 15:53 ` Lars-Peter Clausen
0 siblings, 1 reply; 2+ messages in thread
From: Takashi Iwai @ 2013-10-25 16:03 UTC (permalink / raw)
To: Lars-Peter Clausen; +Cc: alsa-devel
Use the standard PCM helper function to figure out the sample bytes
instead of hardcodec PCM format checks in
snd_hwparams_to_dma_slave_config().
The patch also extends the format check for 8 bytes formats although
no one should match so far.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
---
I stumbled upon this, but am not 100% sure whether the current
hardcoded formats are the designed limitation...
sound/core/pcm_dmaengine.c | 22 +++++++++-------------
1 file changed, 9 insertions(+), 13 deletions(-)
diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c
index aa924d9..94d0873 100644
--- a/sound/core/pcm_dmaengine.c
+++ b/sound/core/pcm_dmaengine.c
@@ -63,23 +63,19 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
struct dma_slave_config *slave_config)
{
enum dma_slave_buswidth buswidth;
+ int bits;
- switch (params_format(params)) {
- case SNDRV_PCM_FORMAT_S8:
+ bits = snd_pcm_format_physical_width(params_format(params));
+ if (bits < 8 || bits > 64)
+ return -EINVAL;
+ else if (bits == 8)
buswidth = DMA_SLAVE_BUSWIDTH_1_BYTE;
- break;
- case SNDRV_PCM_FORMAT_S16_LE:
+ else if (bits == 16)
buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES;
- break;
- case SNDRV_PCM_FORMAT_S18_3LE:
- case SNDRV_PCM_FORMAT_S20_3LE:
- case SNDRV_PCM_FORMAT_S24_LE:
- case SNDRV_PCM_FORMAT_S32_LE:
+ else if (bits <= 32)
buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES;
- break;
- default:
- return -EINVAL;
- }
+ else
+ buswidth = DMA_SLAVE_BUSWIDTH_8_BYTES;
if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
slave_config->direction = DMA_MEM_TO_DEV;
--
1.8.4
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [PATCH] ALSA: pcm_dmaengine: Remove hardcoded PCM formats
2013-10-25 16:03 [PATCH] ALSA: pcm_dmaengine: Remove hardcoded PCM formats Takashi Iwai
@ 2013-10-27 15:53 ` Lars-Peter Clausen
0 siblings, 0 replies; 2+ messages in thread
From: Lars-Peter Clausen @ 2013-10-27 15:53 UTC (permalink / raw)
To: Takashi Iwai; +Cc: alsa-devel
On 10/25/2013 06:03 PM, Takashi Iwai wrote:
> Use the standard PCM helper function to figure out the sample bytes
> instead of hardcodec PCM format checks in
> snd_hwparams_to_dma_slave_config().
>
> The patch also extends the format check for 8 bytes formats although
> no one should match so far.
>
> Signed-off-by: Takashi Iwai <tiwai@suse.de>
> ---
>
> I stumbled upon this, but am not 100% sure whether the current
> hardcoded formats are the designed limitation...
Looks good. I'm not sure if we ever need to handle the 24 bits per word case
and if the current code handles the case correctly. But since the patch
keeps the existing behavior for that case it should be fine.
Acked-by: Lars-Peter Clausen <lars@metafoo.de>
Thanks.
>
> sound/core/pcm_dmaengine.c | 22 +++++++++-------------
> 1 file changed, 9 insertions(+), 13 deletions(-)
>
> diff --git a/sound/core/pcm_dmaengine.c b/sound/core/pcm_dmaengine.c
> index aa924d9..94d0873 100644
> --- a/sound/core/pcm_dmaengine.c
> +++ b/sound/core/pcm_dmaengine.c
> @@ -63,23 +63,19 @@ int snd_hwparams_to_dma_slave_config(const struct snd_pcm_substream *substream,
> struct dma_slave_config *slave_config)
> {
> enum dma_slave_buswidth buswidth;
> + int bits;
>
> - switch (params_format(params)) {
> - case SNDRV_PCM_FORMAT_S8:
> + bits = snd_pcm_format_physical_width(params_format(params));
> + if (bits < 8 || bits > 64)
> + return -EINVAL;
> + else if (bits == 8)
> buswidth = DMA_SLAVE_BUSWIDTH_1_BYTE;
> - break;
> - case SNDRV_PCM_FORMAT_S16_LE:
> + else if (bits == 16)
> buswidth = DMA_SLAVE_BUSWIDTH_2_BYTES;
> - break;
> - case SNDRV_PCM_FORMAT_S18_3LE:
> - case SNDRV_PCM_FORMAT_S20_3LE:
> - case SNDRV_PCM_FORMAT_S24_LE:
> - case SNDRV_PCM_FORMAT_S32_LE:
> + else if (bits <= 32)
> buswidth = DMA_SLAVE_BUSWIDTH_4_BYTES;
> - break;
> - default:
> - return -EINVAL;
> - }
> + else
> + buswidth = DMA_SLAVE_BUSWIDTH_8_BYTES;
>
> if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {
> slave_config->direction = DMA_MEM_TO_DEV;
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2013-10-27 15:53 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-10-25 16:03 [PATCH] ALSA: pcm_dmaengine: Remove hardcoded PCM formats Takashi Iwai
2013-10-27 15:53 ` Lars-Peter Clausen
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).