2024-04-13 06:43:00

by Anton Bambura

[permalink] [raw]
Subject: [PATCH v1 1/1] soundwire: qcom: disable stop clock on 1.3.0 and below

This patch returns back the behavior of disabling stop clock on soundwire
1.3.0 and below which seems to have been altered by accident which
results in broken audio on sdm845 + wcd9340. For example, on AYN Odin and
Lenovo Yoga C630 devices.

Fixes: 4830bfa2c812 ("soundwire: qcom: set clk stop need reset flag at runtime")
Signed-off-by: Anton Bambura <[email protected]>
---
drivers/soundwire/qcom.c | 3 +++
1 file changed, 3 insertions(+)

diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
index a1e2d6c98186..bc03484a28e8 100644
--- a/drivers/soundwire/qcom.c
+++ b/drivers/soundwire/qcom.c
@@ -628,6 +628,9 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus)
}
}

+ if (ctrl->version <= SWRM_VERSION_1_3_0)
+ ctrl->clock_stop_not_supported = true;
+
if (!found) {
qcom_swrm_set_slave_dev_num(bus, NULL, i);
sdw_slave_add(bus, &id, NULL);
--
2.43.0



2024-04-13 07:14:43

by Steev Klimaszewski

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] soundwire: qcom: disable stop clock on 1.3.0 and below

Thank you!

On Sat, Apr 13, 2024 at 1:43 AM Anton Bambura <[email protected]> wrote:
>
> This patch returns back the behavior of disabling stop clock on soundwire
> 1.3.0 and below which seems to have been altered by accident which
> results in broken audio on sdm845 + wcd9340. For example, on AYN Odin and
> Lenovo Yoga C630 devices.
>
> Fixes: 4830bfa2c812 ("soundwire: qcom: set clk stop need reset flag at runtime")
> Signed-off-by: Anton Bambura <[email protected]>
> ---
> drivers/soundwire/qcom.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
> index a1e2d6c98186..bc03484a28e8 100644
> --- a/drivers/soundwire/qcom.c
> +++ b/drivers/soundwire/qcom.c
> @@ -628,6 +628,9 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus)
> }
> }
>
> + if (ctrl->version <= SWRM_VERSION_1_3_0)
> + ctrl->clock_stop_not_supported = true;
> +
> if (!found) {
> qcom_swrm_set_slave_dev_num(bus, NULL, i);
> sdw_slave_add(bus, &id, NULL);
> --
> 2.43.0
>
>
Tested on the Lenovo Yoga C630
Tested-by: Steev Klimaszewski <[email protected]>

-- steev

2024-04-17 11:43:11

by Srinivas Kandagatla

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] soundwire: qcom: disable stop clock on 1.3.0 and below



On 13/04/2024 07:42, Anton Bambura wrote:
> This patch returns back the behavior of disabling stop clock on soundwire
> 1.3.0 and below which seems to have been altered by accident which
> results in broken audio on sdm845 + wcd9340. For example, on AYN Odin and
> Lenovo Yoga C630 devices.
>
> Fixes: 4830bfa2c812 ("soundwire: qcom: set clk stop need reset flag at runtime")
> Signed-off-by: Anton Bambura <[email protected]>
> ---
> drivers/soundwire/qcom.c | 3 +++
> 1 file changed, 3 insertions(+)
>
> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
> index a1e2d6c98186..bc03484a28e8 100644
> --- a/drivers/soundwire/qcom.c
> +++ b/drivers/soundwire/qcom.c
> @@ -628,6 +628,9 @@ static int qcom_swrm_enumerate(struct sdw_bus *bus)
> }
> }
>
> + if (ctrl->version <= SWRM_VERSION_1_3_0)
> + ctrl->clock_stop_not_supported = true;
> +

This is not the right fix, this can be determined from codec
clk_stop_mode1 flag.

can you try this patch:

----------------------------->cut<-----------------------------
From: Srinivas Kandagatla <[email protected]>
Date: Wed, 17 Apr 2024 12:38:49 +0100
Subject: [PATCH] ASoC: codecs: wsa881x: set clk_stop_mode1 flag

WSA881x codecs do not retain the state while clock is stopped, so mark
this with clk_stop_mode1 flag.

Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
Signed-off-by: Srinivas Kandagatla <[email protected]>
---
sound/soc/codecs/wsa881x.c | 1 +
1 file changed, 1 insertion(+)

diff --git a/sound/soc/codecs/wsa881x.c b/sound/soc/codecs/wsa881x.c
index 3c025dabaf7a..1253695bebd8 100644
--- a/sound/soc/codecs/wsa881x.c
+++ b/sound/soc/codecs/wsa881x.c
@@ -1155,6 +1155,7 @@ static int wsa881x_probe(struct sdw_slave *pdev,
pdev->prop.sink_ports = GENMASK(WSA881X_MAX_SWR_PORTS, 0);
pdev->prop.sink_dpn_prop = wsa_sink_dpn_prop;
pdev->prop.scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY;
+ pdev->prop.clk_stop_mode1 = true;
gpiod_direction_output(wsa881x->sd_n, !wsa881x->sd_n_val);

wsa881x->regmap = devm_regmap_init_sdw(pdev, &wsa881x_regmap_config);
--
2.21.0
----------------------------->cut<-----------------------------


thanks,
Srini

> if (!found) {
> qcom_swrm_set_slave_dev_num(bus, NULL, i);
> sdw_slave_add(bus, &id, NULL);

2024-04-19 05:47:14

by Steev Klimaszewski

[permalink] [raw]
Subject: Re: [PATCH v1 1/1] soundwire: qcom: disable stop clock on 1.3.0 and below

Hi Srini,

On Wed, Apr 17, 2024 at 6:43 AM Srinivas Kandagatla
<[email protected]> wrote:
>
> This is not the right fix, this can be determined from codec
> clk_stop_mode1 flag.
>
> can you try this patch:
>
> ----------------------------->cut<-----------------------------
> From: Srinivas Kandagatla <[email protected]>
> Date: Wed, 17 Apr 2024 12:38:49 +0100
> Subject: [PATCH] ASoC: codecs: wsa881x: set clk_stop_mode1 flag
>
> WSA881x codecs do not retain the state while clock is stopped, so mark
> this with clk_stop_mode1 flag.
>
> Fixes: a0aab9e1404a ("ASoC: codecs: add wsa881x amplifier support")
> Signed-off-by: Srinivas Kandagatla <[email protected]>
> ---
> sound/soc/codecs/wsa881x.c | 1 +
> 1 file changed, 1 insertion(+)
>
> diff --git a/sound/soc/codecs/wsa881x.c b/sound/soc/codecs/wsa881x.c
> index 3c025dabaf7a..1253695bebd8 100644
> --- a/sound/soc/codecs/wsa881x.c
> +++ b/sound/soc/codecs/wsa881x.c
> @@ -1155,6 +1155,7 @@ static int wsa881x_probe(struct sdw_slave *pdev,
> pdev->prop.sink_ports = GENMASK(WSA881X_MAX_SWR_PORTS, 0);
> pdev->prop.sink_dpn_prop = wsa_sink_dpn_prop;
> pdev->prop.scp_int1_mask = SDW_SCP_INT1_BUS_CLASH | SDW_SCP_INT1_PARITY;
> + pdev->prop.clk_stop_mode1 = true;
> gpiod_direction_output(wsa881x->sd_n, !wsa881x->sd_n_val);
>
> wsa881x->regmap = devm_regmap_init_sdw(pdev, &wsa881x_regmap_config);
> --
> 2.21.0
> ----------------------------->cut<-----------------------------
>
>
> thanks,
> Srini
>
> > if (!found) {
> > qcom_swrm_set_slave_dev_num(bus, NULL, i);
> > sdw_slave_add(bus, &id, NULL);
>

I tested it here on my c630 and can confirm that your patch does fix
the audio as well.