* [PATCH v1] ASoC: bcm2835: Remove redundant channel checking code in hw_params
[not found] <1484443043-13623-1-git-send-email-flatmax@flatmax.org>
@ 2017-02-01 4:45 ` Matt Flax
2017-02-01 10:53 ` Mark Brown
0 siblings, 1 reply; 3+ messages in thread
From: Matt Flax @ 2017-02-01 4:45 UTC (permalink / raw)
To: linux-arm-kernel
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(-)
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.
--
2.7.4
^ permalink raw reply related [flat|nested] 3+ messages in thread
* [PATCH v1] ASoC: bcm2835: Remove redundant channel checking code in hw_params
2017-02-01 4:45 ` [PATCH v1] ASoC: bcm2835: Remove redundant channel checking code in hw_params Matt Flax
@ 2017-02-01 10:53 ` Mark Brown
[not found] ` <d91986b0-4deb-6d2a-6000-34b4072baed2@flatmax.org>
0 siblings, 1 reply; 3+ messages in thread
From: Mark Brown @ 2017-02-01 10:53 UTC (permalink / raw)
To: linux-arm-kernel
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170201/69b6d45f/attachment.sig>
^ permalink raw reply [flat|nested] 3+ messages in thread
* [alsa-devel] [PATCH v1] ASoC: bcm2835: Remove redundant channel checking code in hw_params
[not found] ` <d91986b0-4deb-6d2a-6000-34b4072baed2@flatmax.org>
@ 2017-02-01 11:14 ` Mark Brown
0 siblings, 0 replies; 3+ messages in thread
From: Mark Brown @ 2017-02-01 11:14 UTC (permalink / raw)
To: linux-arm-kernel
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.
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: not available
URL: <http://lists.infradead.org/pipermail/linux-arm-kernel/attachments/20170201/2603fd0d/attachment.sig>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2017-02-01 11:14 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
[not found] <1484443043-13623-1-git-send-email-flatmax@flatmax.org>
2017-02-01 4:45 ` [PATCH v1] ASoC: bcm2835: Remove redundant channel checking code in hw_params Matt Flax
2017-02-01 10:53 ` Mark Brown
[not found] ` <d91986b0-4deb-6d2a-6000-34b4072baed2@flatmax.org>
2017-02-01 11:14 ` [alsa-devel] " Mark Brown
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).