• Richard Fitzgerald's avatar
    soundwire: bus: Don't lose unattach notifications · f605f32e
    Richard Fitzgerald authored
    Ensure that if sdw_handle_slave_status() sees a peripheral
    has dropped off the bus it reports it to the client driver.
    
    If there are any devices reporting on address 0 it bails out
    after programming the device IDs. So it never reaches the second
    loop that calls sdw_update_slave_status().
    
    If the missing device is one that is now showing as unenumerated
    it has been given a device ID so will report as attached next
    time sdw_handle_slave_status() runs.
    
    With the previous code the client driver would only see another
    ATTACHED notification because the UNATTACHED state was lost when
    sdw_handle_slave_status() bailed out after programming the
    device ID.
    
    This shows up most when the peripheral has to be reset after
    downloading updated firmware and there are multiple of these
    peripherals on the bus. They will all return to unenumerated state
    after the reset, and then there is a mix of unattached, attached
    and unenumerated PING states from the peripherals, as each is reset
    and they reboot.
    Signed-off-by: default avatarRichard Fitzgerald <rf@opensource.cirrus.com>
    Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20220914160248.1047627-3-rf@opensource.cirrus.comSigned-off-by: default avatarVinod Koul <vkoul@kernel.org>
    f605f32e
bus.c 45.2 KB