Patch "ASoC: tas2770: Fix set_tdm_slot in case of single slot" has been added to the 5.10-stable tree

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



This is a note to let you know that I've just added the patch titled

    ASoC: tas2770: Fix set_tdm_slot in case of single slot

to the 5.10-stable tree which can be found at:
    http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary

The filename of the patch is:
     asoc-tas2770-fix-set_tdm_slot-in-case-of-single-slot.patch
and it can be found in the queue-5.10 subdirectory.

If you, or anyone else, feels it should not be added to the stable tree,
please let <stable@xxxxxxxxxxxxxxx> know about it.



commit b4f8e8cfa20eac48d3dd0115185989c2cdd34160
Author: Martin Povišer <povik+lin@xxxxxxxxxxx>
Date:   Thu Oct 27 11:57:58 2022 +0200

    ASoC: tas2770: Fix set_tdm_slot in case of single slot
    
    [ Upstream commit e59bf547a7dd366f93bfebb7487959580ca6c0ec ]
    
    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@xxxxxxxxx>
    Signed-off-by: Martin Povišer <povik+lin@xxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20221027095800.16094-1-povik+lin@xxxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/soc/codecs/tas2770.c b/sound/soc/codecs/tas2770.c
index 171bbcc919d5..c213c8096142 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)



[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux