Patch "ASoC: tas2770: Fix set_tdm_slot in case of single slot" has been added to the 5.15-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.15-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.15 subdirectory.

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



commit 5d627176078fa6766c058e85aee237703c92eb6b
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 a13b086a072b..ec0df3b1ef61 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