From: Takashi Iwai Date: Tue, 5 Feb 2013 11:24:22 +0000 (+0100) Subject: ALSA: Fix wrong description about hw constraints X-Git-Tag: firefly_0821_release~3680^2~1005^2~50 X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=a690a2a1eb32e533e2b2afb1daeef3c4011d47e9;p=firefly-linux-kernel-4.4.55.git ALSA: Fix wrong description about hw constraints The definitions of hw constraint functions are wrongly placed, and the description about the function is also wrong. hw_rule_channels_by_format actually refines the channels depending on the format, not vice versa. Reported-by: Peter Ujfalusi Signed-off-by: Takashi Iwai --- diff --git a/Documentation/DocBook/writing-an-alsa-driver.tmpl b/Documentation/DocBook/writing-an-alsa-driver.tmpl index c0781bb1f9b5..c564faab981c 100644 --- a/Documentation/DocBook/writing-an-alsa-driver.tmpl +++ b/Documentation/DocBook/writing-an-alsa-driver.tmpl @@ -3250,18 +3250,19 @@ struct _snd_pcm_runtime { Example of Hardware Constraints for Channels min < 2) { - fmt.bits[0] &= SNDRV_PCM_FMTBIT_S16_LE; - return snd_mask_refine(f, &fmt); + snd_interval_any(&ch); + if (f->bits[0] == SNDRV_PCM_FMTBIT_S16_LE) { + ch.min = ch.max = 1; + ch.integer = 1; + return snd_interval_refine(c, &ch); } return 0; } @@ -3285,27 +3286,27 @@ struct _snd_pcm_runtime { - The rule function is called when an application sets the number of - channels. But an application can set the format before the number of - channels. Thus you also need to define the inverse rule: + The rule function is called when an application sets the PCM + format, and it refines the number of channels accordingly. + But an application may set the number of channels before + setting the format. Thus you also need to define the inverse rule: - Example of Hardware Constraints for Channels + Example of Hardware Constraints for Formats bits[0] == SNDRV_PCM_FMTBIT_S16_LE) { - ch.min = ch.max = 1; - ch.integer = 1; - return snd_interval_refine(c, &ch); + snd_mask_any(&fmt); /* Init the struct */ + if (c->min < 2) { + fmt.bits[0] &= SNDRV_PCM_FMTBIT_S16_LE; + return snd_mask_refine(f, &fmt); } return 0; }