[PATCH v2 1/1] ALSA: hda: Refactor calculating SDnFMT according to specification

Takashi Iwai tiwai at suse.de
Mon Sep 21 12:01:15 CEST 2020


On Mon, 21 Sep 2020 11:42:00 +0200,
Pawel Harlozinski wrote:
> 
> Fix setting SDnFMT based on High Definition Audio Specification Rev. 1.0a page 48.
> 
> Bits per Sample (BITS):
> 000 = 8 bits. The data will be packed in memory in 8-bit containers on 16-bit boundaries.
> 001 = 16 bits. The data will be packed in memory in 16-bit containers on 16-bit boundaries.
> 010 = 20 bits. The data will be packed in memory in 32-bit containers on 32-bit boundaries.
> 011 = 24 bits. The data will be packed in memory in 32-bit containers on 32-bit boundaries.
> 100 = 32 bits. The data will be packed in memory in 32-bit containers on 32-bit boundaries.
> 101-111 = Reserved
> 
> Set SDnFMT depending on which format was given.
> Henceforth split cases for formats 20, 24, 32 bits,
> but leave constraints to maxbps.

As mentioned in the previous thread, practically seen, case 20 and 24
are never met, since HD-audio doesn't accept the SNDRV_PCM_FORMAT_20*
or _24* due to the 32bit container.   So this change is superfluous.

I can take the change, but it has to be clarified that it won't affect
the behavior on the real hardware but pure theoretical.

> Change-Id: I97771b16da14e85b7f35372f5dfc87bb13bb5ce0

Please drop change-id.  It's not useful for others.


thanks,

Takashi


> Signed-off-by: Pawel Harlozinski <pawel.harlozinski at linux.intel.com>
> ---
>  sound/hda/hdac_device.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/sound/hda/hdac_device.c b/sound/hda/hdac_device.c
> index 3e9e9ac804f6..ccc47a10ba63 100644
> --- a/sound/hda/hdac_device.c
> +++ b/sound/hda/hdac_device.c
> @@ -764,7 +764,14 @@ unsigned int snd_hdac_calc_stream_format(unsigned int rate,
>  		val |= AC_FMT_BITS_16;
>  		break;
>  	case 20:
> +		val |= AC_FMT_BITS_20;
> +		break;
>  	case 24:
> +		if (maxbps >= 24)
> +			val |= AC_FMT_BITS_24;
> +		else
> +			val |= AC_FMT_BITS_20;
> +		break;
>  	case 32:
>  		if (maxbps >= 32 || format == SNDRV_PCM_FORMAT_FLOAT_LE)
>  			val |= AC_FMT_BITS_32;
> -- 
> 2.17.1
> 


More information about the Alsa-devel mailing list