Message ID | 1485924303-30869-1-git-send-email-flatmax@flatmax.org (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On Wed, Feb 01, 2017 at 03:45:03PM +1100, Matt Flax wrote: > 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. If those cards add support for higher channel counts they should be adding real support for that in the driver, not just hacking out defensive code. If the device can usefully do 8 channels then modify the driver to do 8 channels. Otherwise people are going to need to modify the driver anyway to remove the limits in the constraints.
On 01/02/17 21:53, Mark Brown wrote: > On Wed, Feb 01, 2017 at 03:45:03PM +1100, Matt Flax wrote: > >> 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. > If those cards add support for higher channel counts they should be > adding real support for that in the driver, not just hacking out > defensive code. If the device can usefully do 8 channels then modify > the driver to do 8 channels. Otherwise people are going to need to > modify the driver anyway to remove the limits in the constraints. > Indeed the AudioInjector Octo sound card is currently operating @ 8 channels out on the bcm2835 silicon. It has been tested on both the Pi 2 and Pi 3. Do you mean that I should increase bcm2835_i2s_dai.channels_max to 8 ? I can do this. Does anyone have any objections to this approach ? thanks Matt > > _______________________________________________ > Alsa-devel mailing list > Alsa-devel@alsa-project.org > http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Wed, Feb 01, 2017 at 10:05:18PM +1100, Matt Flax wrote: > On 01/02/17 21:53, Mark Brown wrote: > > If those cards add support for higher channel counts they should be > > adding real support for that in the driver, not just hacking out > > defensive code. If the device can usefully do 8 channels then modify > > the driver to do 8 channels. Otherwise people are going to need to > > modify the driver anyway to remove the limits in the constraints. > Indeed the AudioInjector Octo sound card is currently operating @ 8 channels > out on the bcm2835 silicon. It has been tested on both the Pi 2 and Pi 3. > Do you mean that I should increase bcm2835_i2s_dai.channels_max to 8 ? Yes, implementing it properly is fine.
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.
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@flatmax.org> --- sound/soc/bcm/bcm2835-i2s.c | 12 +++--------- 1 file changed, 3 insertions(+), 9 deletions(-)