alsa-devel.alsa-project.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot
@ 2022-10-27  9:57 Martin Povišer
  2022-10-27  9:57 ` [PATCH 2/3] ASoC: tas2764: " Martin Povišer
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Martin Povišer @ 2022-10-27  9:57 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown
  Cc: alsa-devel, Stephen Kitt, linux-kernel, shenghao-ding, kevin-lu,
	Jos Dehaes, Frank Shi, Raphael-Xu, Martin Povišer, asahi

There's a special branch in the set_tdm_slot op for the case of nslots
being 1, but:

 (1) That branch can never work (there's a check for tx_mask being
     non-zero, later there's another check for it *being* zero; one or
     the other always throws -EINVAL).

 (2) The intention of the branch seems to be what the general other
     branch reduces to in case of nslots being 1.

For those reasons remove the 'nslots being 1' special case.

Fixes: 1a476abc723e ("tas2770: add tas2770 smart PA kernel driver")
Suggested-by: Jos Dehaes <jos.dehaes@gmail.com>
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
---
 sound/soc/codecs/tas2770.c | 20 ++++++--------------
 1 file changed, 6 insertions(+), 14 deletions(-)

diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c
index b6765235a4b3..8557759acb1f 100644
--- a/sound/soc/codecs/tas2770.c
+++ b/sound/soc/codecs/tas2770.c
@@ -395,21 +395,13 @@ static int tas2770_set_dai_tdm_slot(struct snd_soc_dai *dai,
 	if (tx_mask == 0 || rx_mask != 0)
 		return -EINVAL;
 
-	if (slots == 1) {
-		if (tx_mask != 1)
-			return -EINVAL;
-
-		left_slot = 0;
-		right_slot = 0;
+	left_slot = __ffs(tx_mask);
+	tx_mask &= ~(1 << left_slot);
+	if (tx_mask == 0) {
+		right_slot = left_slot;
 	} else {
-		left_slot = __ffs(tx_mask);
-		tx_mask &= ~(1 << left_slot);
-		if (tx_mask == 0) {
-			right_slot = left_slot;
-		} else {
-			right_slot = __ffs(tx_mask);
-			tx_mask &= ~(1 << right_slot);
-		}
+		right_slot = __ffs(tx_mask);
+		tx_mask &= ~(1 << right_slot);
 	}
 
 	if (tx_mask != 0 || left_slot >= slots || right_slot >= slots)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 2/3] ASoC: tas2764: Fix set_tdm_slot in case of single slot
  2022-10-27  9:57 [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot Martin Povišer
@ 2022-10-27  9:57 ` Martin Povišer
  2022-10-27  9:58 ` [PATCH 3/3] ASoC: tas2780: " Martin Povišer
  2022-10-31 15:18 ` [PATCH 1/3] ASoC: tas2770: " Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Martin Povišer @ 2022-10-27  9:57 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown
  Cc: alsa-devel, Stephen Kitt, linux-kernel, shenghao-ding, kevin-lu,
	Jos Dehaes, Frank Shi, Raphael-Xu, Martin Povišer, asahi

There's a special branch in the set_tdm_slot op for the case of nslots
being 1, but:

 (1) That branch can never work (there's a check for tx_mask being
     non-zero, later there's another check for it *being* zero; one or
     the other always throws -EINVAL).

 (2) The intention of the branch seems to be what the general other
     branch reduces to in case of nslots being 1.

For those reasons remove the 'nslots being 1' special case.

Fixes: 827ed8a0fa50 ("ASoC: tas2764: Add the driver for the TAS2764")
Suggested-by: Jos Dehaes <jos.dehaes@gmail.com>
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
---
 sound/soc/codecs/tas2764.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/sound/soc/codecs/tas2764.c b/sound/soc/codecs/tas2764.c
index 51b87a936179..2e0ed3e68fa5 100644
--- a/sound/soc/codecs/tas2764.c
+++ b/sound/soc/codecs/tas2764.c
@@ -438,20 +438,13 @@ static int tas2764_set_dai_tdm_slot(struct snd_soc_dai *dai,
 	if (tx_mask == 0 || rx_mask != 0)
 		return -EINVAL;
 
-	if (slots == 1) {
-		if (tx_mask != 1)
-			return -EINVAL;
-		left_slot = 0;
-		right_slot = 0;
+	left_slot = __ffs(tx_mask);
+	tx_mask &= ~(1 << left_slot);
+	if (tx_mask == 0) {
+		right_slot = left_slot;
 	} else {
-		left_slot = __ffs(tx_mask);
-		tx_mask &= ~(1 << left_slot);
-		if (tx_mask == 0) {
-			right_slot = left_slot;
-		} else {
-			right_slot = __ffs(tx_mask);
-			tx_mask &= ~(1 << right_slot);
-		}
+		right_slot = __ffs(tx_mask);
+		tx_mask &= ~(1 << right_slot);
 	}
 
 	if (tx_mask != 0 || left_slot >= slots || right_slot >= slots)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH 3/3] ASoC: tas2780: Fix set_tdm_slot in case of single slot
  2022-10-27  9:57 [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot Martin Povišer
  2022-10-27  9:57 ` [PATCH 2/3] ASoC: tas2764: " Martin Povišer
@ 2022-10-27  9:58 ` Martin Povišer
  2022-10-31 15:18 ` [PATCH 1/3] ASoC: tas2770: " Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Martin Povišer @ 2022-10-27  9:58 UTC (permalink / raw)
  To: Liam Girdwood, Mark Brown
  Cc: alsa-devel, Stephen Kitt, linux-kernel, shenghao-ding, kevin-lu,
	Jos Dehaes, Frank Shi, Raphael-Xu, Martin Povišer, asahi

There's a special branch in the set_tdm_slot op for the case of nslots
being 1, but:

 (1) That branch can never work (there's a check for tx_mask being
     non-zero, later there's another check for it *being* zero; one or
     the other always throws -EINVAL).

 (2) The intention of the branch seems to be what the general other
     branch reduces to in case of nslots being 1.

For those reasons remove the 'nslots being 1' special case.

Fixes: eae9f9ce181b ("ASoC: add tas2780 driver")
Suggested-by: Jos Dehaes <jos.dehaes@gmail.com>
Signed-off-by: Martin Povišer <povik+lin@cutebit.org>
---
 sound/soc/codecs/tas2780.c | 19 ++++++-------------
 1 file changed, 6 insertions(+), 13 deletions(-)

diff --git a/sound/soc/codecs/tas2780.c b/sound/soc/codecs/tas2780.c
index a6db6f0e5431..afdf0c863aa1 100644
--- a/sound/soc/codecs/tas2780.c
+++ b/sound/soc/codecs/tas2780.c
@@ -380,20 +380,13 @@ static int tas2780_set_dai_tdm_slot(struct snd_soc_dai *dai,
 	if (tx_mask == 0 || rx_mask != 0)
 		return -EINVAL;
 
-	if (slots == 1) {
-		if (tx_mask != 1)
-			return -EINVAL;
-		left_slot = 0;
-		right_slot = 0;
+	left_slot = __ffs(tx_mask);
+	tx_mask &= ~(1 << left_slot);
+	if (tx_mask == 0) {
+		right_slot = left_slot;
 	} else {
-		left_slot = __ffs(tx_mask);
-		tx_mask &= ~(1 << left_slot);
-		if (tx_mask == 0) {
-			right_slot = left_slot;
-		} else {
-			right_slot = __ffs(tx_mask);
-			tx_mask &= ~(1 << right_slot);
-		}
+		right_slot = __ffs(tx_mask);
+		tx_mask &= ~(1 << right_slot);
 	}
 
 	if (tx_mask != 0 || left_slot >= slots || right_slot >= slots)
-- 
2.33.0


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot
  2022-10-27  9:57 [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot Martin Povišer
  2022-10-27  9:57 ` [PATCH 2/3] ASoC: tas2764: " Martin Povišer
  2022-10-27  9:58 ` [PATCH 3/3] ASoC: tas2780: " Martin Povišer
@ 2022-10-31 15:18 ` Mark Brown
  2 siblings, 0 replies; 4+ messages in thread
From: Mark Brown @ 2022-10-31 15:18 UTC (permalink / raw)
  To: Martin Povišer, Liam Girdwood
  Cc: alsa-devel, Stephen Kitt, linux-kernel, shenghao-ding, kevin-lu,
	Jos Dehaes, Frank Shi, Raphael-Xu, asahi

On Thu, 27 Oct 2022 11:57:58 +0200, Martin Povišer wrote:
> There's a special branch in the set_tdm_slot op for the case of nslots
> being 1, but:
> 
>  (1) That branch can never work (there's a check for tx_mask being
>      non-zero, later there's another check for it *being* zero; one or
>      the other always throws -EINVAL).
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound.git for-next

Thanks!

[1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot
      commit: e59bf547a7dd366f93bfebb7487959580ca6c0ec
[2/3] ASoC: tas2764: Fix set_tdm_slot in case of single slot
      commit: faac764ea1ea6898d93e46c403271fb105c0906e
[3/3] ASoC: tas2780: Fix set_tdm_slot in case of single slot
      commit: 6f934afa6a980bb8d3ce73836b1a9922685e50d7

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2022-10-31 15:19 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-10-27  9:57 [PATCH 1/3] ASoC: tas2770: Fix set_tdm_slot in case of single slot Martin Povišer
2022-10-27  9:57 ` [PATCH 2/3] ASoC: tas2764: " Martin Povišer
2022-10-27  9:58 ` [PATCH 3/3] ASoC: tas2780: " Martin Povišer
2022-10-31 15:18 ` [PATCH 1/3] ASoC: tas2770: " 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).