soundwire: sdw_slave: add initialization_complete definition
authorPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Thu, 12 Dec 2019 01:44:59 +0000 (19:44 -0600)
committerVinod Koul <vkoul@kernel.org>
Thu, 12 Dec 2019 03:47:06 +0000 (09:17 +0530)
commit7afc50e441af0afc8055920a64cff70b648e4b44
tree5bbf9dbf5e61b07200093411c1cbeaebe6aa0f3b
parentfbbff36325079fd9d2fcd30063c84f4b38a0ad9b
soundwire: sdw_slave: add initialization_complete definition

Slave drivers may have different ways of handling their settings, with
or without regmap.

During the integration of codec drivers, done in partnership between
Intel and Realtek, it became desirable to implement a predictable
order between low-level initializations performed in .update_status()
(invoked by an interrupt thread) and the settings restored in the
resume steps (invoked by the PM core).

This patch builds on the previous solution to wait for the Slave
device to be fully enumerated. The complete() in this case is signaled
not before the .update_status() is called, but after .update_status()
returns. Without this patch, the settings were not properly restored,
leading to timing-dependent 'no sound after resume' or 'no headset
detected after resume' bug reports.

Depending on how initialization is handled, a Slave device driver may
wait for enumeration_complete, or for initialization_complete, both
are valid synchronization points. They are initialized at the same
time, they only differ on when complete() is invoked.

Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20191212014507.28050-4-pierre-louis.bossart@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
include/linux/soundwire/sdw.h