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@xxxxxxxxxxxxxxx> > Fixes: a6e6581942ca ("soundwire: qcom: add auto enumeration support") > Signed-off-by: Krzysztof Kozlowski <krzysztof.kozlowski@xxxxxxxxxx> > > --- > > Cc: Patrick Lai <quic_plai@xxxxxxxxxxx> > --- > 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,