soundwire: cadence: fix updating slave status when a bus has multiple peripherals
authorSimon Trimmer <simont@opensource.cirrus.com>
Wed, 14 Sep 2022 16:02:44 +0000 (17:02 +0100)
committerVinod Koul <vkoul@kernel.org>
Tue, 20 Sep 2022 04:59:31 +0000 (10:29 +0530)
commitfbbc73a20f38dcadf8a250bc761962588cd91f7e
tree2ccfc44f16ed5f71d8346a1846c753496b7a4519
parent279e46bc298629b26436c90bd4b5d104cc1e0fb2
soundwire: cadence: fix updating slave status when a bus has multiple peripherals

The cadence IP explicitly reports slave status changes with bits for
each possible change. The function cdns_update_slave_status() attempts
to translate this into the current status of each of the slaves.

However when there are multiple peripherals on a bus any slave that did
not have a status change when the work function ran would not have it's
status updated - the array is initialised to a value that equates to
UNATTACHED and this can cause spurious reports that slaves had dropped
off the bus.

In the case where a slave has no status change or has multiple status
changes the value from the last PING command is used.

Signed-off-by: Simon Trimmer <simont@opensource.cirrus.com>
Signed-off-by: Richard Fitzgerald <rf@opensource.cirrus.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20220914160248.1047627-2-rf@opensource.cirrus.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/cadence_master.c