[alsa-devel] [PATCH] ASoC: bcm2835: Remove redundant channel checking code in hw_params

Matt Flax flatmax at flatmax.org
Fri Jan 20 06:58:45 CET 2017


This hasn't had any airplay since posting 5 days ago.

Can anyone advise on the correct person to contact regarding the review 
of this patch ?

thanks

Matt

On 15/01/17 12:17, Matt Flax wrote:
> Due to channels_max and channels_min in the bcm2835_i2s_dai structure,
> the channel guard code in bcm2835_i2s_hw_params is redundant.
>
> The bcm2835_i2s_hw_params function checks that the channel count is
> 2 before continuing. This code never gets executed because core soc
> checks prevent the execution (upon channel mismatch) of the
> bcm2835_i2s_hw_params function.
>
> The redundancy has been tested and checked for the case when
> the bcm2835_i2s_dai structure has channels_max = 2 and a request
> for 8 channels has been made. The test has confirmed that the
> removed code is redundant as it never gets executed when a
> channel mismatch occurs.
>
> This redundant channel count check may seem like it will not cause
> any problems however some sound cards (such as the 8 channel
> AudioInjector Octo sound card) require the execution of the
> bcm2835_i2s_hw_params function when channels_max in the
> bcm2835_i2s_dai structure has been increased to 8.
>
> As the channel checking code in bcm2835_i2s_hw_params is redundant
> and stops certain cards from working it has been removed.
>
> Signed-off-by: Matt Flax <flatmax at flatmax.org>
> ---
>   sound/soc/bcm/bcm2835-i2s.c | 12 +++---------
>   1 file changed, 3 insertions(+), 9 deletions(-)
>
> diff --git a/sound/soc/bcm/bcm2835-i2s.c b/sound/soc/bcm/bcm2835-i2s.c
> index 6ba2049..1773b83 100644
> --- a/sound/soc/bcm/bcm2835-i2s.c
> +++ b/sound/soc/bcm/bcm2835-i2s.c
> @@ -310,15 +310,9 @@ static int bcm2835_i2s_hw_params(struct snd_pcm_substream *substream,
>   	ch1pos = data_delay;
>   	ch2pos = bclk_ratio / 2 + data_delay;
>   
> -	switch (params_channels(params)) {
> -	case 2:
> -		format = BCM2835_I2S_CH1(format) | BCM2835_I2S_CH2(format);
> -		format |= BCM2835_I2S_CH1(BCM2835_I2S_CHPOS(ch1pos));
> -		format |= BCM2835_I2S_CH2(BCM2835_I2S_CHPOS(ch2pos));
> -		break;
> -	default:
> -		return -EINVAL;
> -	}
> +	format = BCM2835_I2S_CH1(format) | BCM2835_I2S_CH2(format);
> +	format |= BCM2835_I2S_CH1(BCM2835_I2S_CHPOS(ch1pos));
> +	format |= BCM2835_I2S_CH2(BCM2835_I2S_CHPOS(ch2pos));
>   
>   	/*
>   	 * Set format for both streams.



More information about the Alsa-devel mailing list