Patch "ASoC: cs35l56: Disconnect ASP1 TX sources when ASP1 DAI is hooked up" has been added to the 6.9-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: cs35l56: Disconnect ASP1 TX sources when ASP1 DAI is hooked up

to the 6.9-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-cs35l56-disconnect-asp1-tx-sources-when-asp1-da.patch
and it can be found in the queue-6.9 subdirectory.

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



commit 55d85c08cf5b4060f68ccf6b7c30cc7f9d478437
Author: Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>
Date:   Thu Jun 13 14:25:27 2024 +0100

    ASoC: cs35l56: Disconnect ASP1 TX sources when ASP1 DAI is hooked up
    
    [ Upstream commit 8af49868e51ed1ba117b74728af12abe1eda82e5 ]
    
    If the ASP1 DAI is hooked up by the machine driver the ASP TX mixer
    sources should be initialized to disconnected. There aren't currently
    any available products using the ASP so this doesn't affect any
    existing systems.
    
    The cs35l56 does not have any fixed default for the mixer source
    registers. When the cs35l56 boots, its firmware patches these registers
    to setup a system-specific routing; this is so that Windows can use
    generic SDCA drivers instead of needing knowledge of chip-specific
    registers. The setup varies between end-products, which each have
    customized firmware, and so the default register state varies between
    end-products. It can also change if the firmware on an end-product is
    upgraded - for example if a change was needed to the routing for Windows
    use-cases. It must be emphasized that the settings applied by the
    firmware are not internal magic tuning; they are statically implementing
    use-case setup that on Linux would be done via ALSA controls.
    
    The driver is currently syncing the mixer controls with whatever
    initial state the firmware wrote to the registers, so that they report
    the actual audio routing. But if the ASP DAI is hooked up this can create
    a powered-up DAPM graph without anything intentionally setting up a path.
    This can lead to parts of the audio system powering up unexpectedly.
    
    For example when cs35l56 is connected to cs42l43 using a codec-codec link,
    this can create a complete DAPM graph which then powers-up cs42l43. But
    the cs42l43 can only be clocked from its SoundWire bus so this causes a
    bunch of errors in the kernel log where cs42l43 is unexpectedly powered-up
    without a clock.
    
    If the host is taking ownership of the ASP (either directly or as a
    codec-to-codec link) there is no need to keep the mixer settings that the
    firmware wrote. The driver has ALSA controls for setting these using
    standard Linux mechanisms. So if the machine driver hooks up the ASP the
    ASP mixers are initialized to "None" (no input). This prevents unintended
    DAPM-graph power-ups, and means the initial state of the mixers is
    always going to be None.
    
    Since the initial state of the mixers can vary from system to system and
    potentially between firmware upgrades, no use-case manager can currently
    assume that cs35l56 has a known initial state. The firmware could just as
    easily default them to "None" as to any input source. So defaulting them
    to "None" in the driver is not increasing the entropy of the system.
    
    Signed-off-by: Richard Fitzgerald <rf@xxxxxxxxxxxxxxxxxxxxx>
    Link: https://lore.kernel.org/r/20240613132527.46537-1-rf@xxxxxxxxxxxxxxxxxxxxx
    Signed-off-by: Mark Brown <broonie@xxxxxxxxxx>
    Signed-off-by: Sasha Levin <sashal@xxxxxxxxxx>

diff --git a/sound/soc/codecs/cs35l56-shared.c b/sound/soc/codecs/cs35l56-shared.c
index fd02b621da52c..d29878af2a80d 100644
--- a/sound/soc/codecs/cs35l56-shared.c
+++ b/sound/soc/codecs/cs35l56-shared.c
@@ -214,6 +214,10 @@ static const struct reg_sequence cs35l56_asp1_defaults[] = {
 	REG_SEQ0(CS35L56_ASP1_FRAME_CONTROL5,	0x00020100),
 	REG_SEQ0(CS35L56_ASP1_DATA_CONTROL1,	0x00000018),
 	REG_SEQ0(CS35L56_ASP1_DATA_CONTROL5,	0x00000018),
+	REG_SEQ0(CS35L56_ASP1TX1_INPUT,		0x00000000),
+	REG_SEQ0(CS35L56_ASP1TX2_INPUT,		0x00000000),
+	REG_SEQ0(CS35L56_ASP1TX3_INPUT,		0x00000000),
+	REG_SEQ0(CS35L56_ASP1TX4_INPUT,		0x00000000),
 };
 
 /*




[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