[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <ecc13046-1a4f-77e7-c4dc-a5a4c1248572@linux.intel.com>
Date: Wed, 5 Apr 2023 10:01:56 -0500
From: Pierre-Louis Bossart <pierre-louis.bossart@...ux.intel.com>
To: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>,
Andy Gross <agross@...nel.org>,
Bjorn Andersson <andersson@...nel.org>,
Konrad Dybcio <konrad.dybcio@...aro.org>,
Vinod Koul <vkoul@...nel.org>,
Bard Liao <yung-chuan.liao@...ux.intel.com>,
Sanyog Kale <sanyog.r.kale@...el.com>,
Srinivas Kandagatla <srinivas.kandagatla@...aro.org>,
linux-arm-msm@...r.kernel.org, alsa-devel@...a-project.org,
linux-kernel@...r.kernel.org
Cc: stable@...r.kernel.org, Patrick Lai <quic_plai@...cinc.com>
Subject: Re: [PATCH] soundwire: qcom: Fix enumeration of second device on the
bus
On 4/5/23 09:29, Krzysztof Kozlowski wrote:
> Some Soundwire buses (like &swr0 on Qualcomm HDK8450) have two devices,
> which can be brought from powerdown state one after another. We need to
> keep enumerating them on each slave attached interrupt, otherwise only
> first will appear.
>
> Cc: <stable@...r.kernel.org>
> Fixes: a6e6581942ca ("soundwire: qcom: add auto enumeration support")
> Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@...aro.org>
>
> ---
>
> Cc: Patrick Lai <quic_plai@...cinc.com>
> ---
> drivers/soundwire/qcom.c | 11 +++--------
> 1 file changed, 3 insertions(+), 8 deletions(-)
>
> diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c
> index c296e0bf897b..1e5077d91f59 100644
> --- a/drivers/soundwire/qcom.c
> +++ b/drivers/soundwire/qcom.c
> @@ -587,14 +587,9 @@ static irqreturn_t qcom_swrm_irq_handler(int irq, void *dev_id)
> case SWRM_INTERRUPT_STATUS_CHANGE_ENUM_SLAVE_STATUS:
> dev_dbg_ratelimited(swrm->dev, "SWR new slave attached\n");
> swrm->reg_read(swrm, SWRM_MCP_SLV_STATUS, &slave_status);
> - if (swrm->slave_status == slave_status) {
> - dev_dbg(swrm->dev, "Slave status not changed %x\n",
> - slave_status);
it's not clear to me how removing this test helps with the two-device
configuration?
Or is this a case where the status for both devices changes at the same
time but the interrupt status remains set, so the next iteration of the
loop is ignored?
> - } else {
> - qcom_swrm_get_device_status(swrm);
> - qcom_swrm_enumerate(&swrm->bus);
> - sdw_handle_slave_status(&swrm->bus, swrm->status);
> - }
> + qcom_swrm_get_device_status(swrm);
> + qcom_swrm_enumerate(&swrm->bus);
> + sdw_handle_slave_status(&swrm->bus, swrm->status);
> break;
> case SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET:
> dev_err_ratelimited(swrm->dev,
Powered by blists - more mailing lists