From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> To: alsa-devel@alsa-project.org Cc: linux-kernel@vger.kernel.org, tiwai@suse.de, broonie@kernel.org, vkoul@kernel.org, gregkh@linuxfoundation.org, jank@cadence.com, srinivas.kandagatla@linaro.org, slawomir.blauciak@intel.com, Bard liao <yung-chuan.liao@linux.intel.com>, Rander Wang <rander.wang@linux.intel.com>, Ranjani Sridharan <ranjani.sridharan@linux.intel.com>, Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>, Sanyog Kale <sanyog.r.kale@intel.com> Subject: [PATCH v4 03/11] soundwire: sdw_slave: add initialization_complete definition Date: Mon, 9 Dec 2019 17:55:11 -0600 [thread overview] Message-ID: <20191209235520.18727-4-pierre-louis.bossart@linux.intel.com> (raw) In-Reply-To: <20191209235520.18727-1-pierre-louis.bossart@linux.intel.com> 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> --- include/linux/soundwire/sdw.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index 3fa8d875b16b..ed42cd79eab7 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -554,6 +554,8 @@ struct sdw_slave_ops { * @enumeration_complete: completion utility to control potential races * on startup between device enumeration and read/write access to the * Slave device + * @initialization_complete: completion utility to control potential races + * on startup between device enumeration and settings being restored */ struct sdw_slave { struct sdw_slave_id id; @@ -571,6 +573,7 @@ struct sdw_slave { bool probed; struct completion probe_complete; struct completion enumeration_complete; + struct completion initialization_complete; }; #define dev_to_sdw_dev(_dev) container_of(_dev, struct sdw_slave, dev) -- 2.20.1
WARNING: multiple messages have this Message-ID (diff)
From: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> To: alsa-devel@alsa-project.org Cc: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>, tiwai@suse.de, gregkh@linuxfoundation.org, linux-kernel@vger.kernel.org, Ranjani Sridharan <ranjani.sridharan@linux.intel.com>, vkoul@kernel.org, broonie@kernel.org, srinivas.kandagatla@linaro.org, jank@cadence.com, slawomir.blauciak@intel.com, Sanyog Kale <sanyog.r.kale@intel.com>, Bard liao <yung-chuan.liao@linux.intel.com>, Rander Wang <rander.wang@linux.intel.com> Subject: [alsa-devel] [PATCH v4 03/11] soundwire: sdw_slave: add initialization_complete definition Date: Mon, 9 Dec 2019 17:55:11 -0600 [thread overview] Message-ID: <20191209235520.18727-4-pierre-louis.bossart@linux.intel.com> (raw) In-Reply-To: <20191209235520.18727-1-pierre-louis.bossart@linux.intel.com> 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> --- include/linux/soundwire/sdw.h | 3 +++ 1 file changed, 3 insertions(+) diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index 3fa8d875b16b..ed42cd79eab7 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -554,6 +554,8 @@ struct sdw_slave_ops { * @enumeration_complete: completion utility to control potential races * on startup between device enumeration and read/write access to the * Slave device + * @initialization_complete: completion utility to control potential races + * on startup between device enumeration and settings being restored */ struct sdw_slave { struct sdw_slave_id id; @@ -571,6 +573,7 @@ struct sdw_slave { bool probed; struct completion probe_complete; struct completion enumeration_complete; + struct completion initialization_complete; }; #define dev_to_sdw_dev(_dev) container_of(_dev, struct sdw_slave, dev) -- 2.20.1 _______________________________________________ Alsa-devel mailing list Alsa-devel@alsa-project.org https://mailman.alsa-project.org/mailman/listinfo/alsa-devel
next prev parent reply other threads:[~2019-12-09 23:55 UTC|newest] Thread overview: 30+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-12-09 23:55 [PATCH v4 00/11] soundwire: update ASoC interfaces Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 01/11] soundwire: sdw_slave: add probe_complete structure and new fields Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 02/11] soundwire: sdw_slave: add enumeration_complete structure Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` Pierre-Louis Bossart [this message] 2019-12-09 23:55 ` [alsa-devel] [PATCH v4 03/11] soundwire: sdw_slave: add initialization_complete definition Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 04/11] soundwire: sdw_slave: track unattach_request to handle all init sequences Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 05/11] soundwire: intel: update interfaces between ASoC and SoundWire Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-11 11:42 ` Vinod Koul 2019-12-11 11:42 ` [alsa-devel] " Vinod Koul 2019-12-11 14:22 ` Pierre-Louis Bossart 2019-12-11 14:22 ` Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 06/11] soundwire: intel: update stream callbacks for hwparams/free stream operations Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 07/11] soundwire: intel: update headers for interrupts Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-12 0:40 ` kbuild test robot 2019-12-12 6:09 ` kbuild test robot 2019-12-09 23:55 ` [PATCH v4 08/11] soundwire: intel: add link_list to handle interrupts with a single thread Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 09/11] soundwire: intel: add prototype for WAKEEN interrupt processing Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 10/11] soundwire: intel: add mutex for shared SHIM register access Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart 2019-12-09 23:55 ` [PATCH v4 11/11] soundwire: intel: add clock stop quirks Pierre-Louis Bossart 2019-12-09 23:55 ` [alsa-devel] " Pierre-Louis Bossart
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20191209235520.18727-4-pierre-louis.bossart@linux.intel.com \ --to=pierre-louis.bossart@linux.intel.com \ --cc=alsa-devel@alsa-project.org \ --cc=broonie@kernel.org \ --cc=gregkh@linuxfoundation.org \ --cc=jank@cadence.com \ --cc=linux-kernel@vger.kernel.org \ --cc=rander.wang@linux.intel.com \ --cc=ranjani.sridharan@linux.intel.com \ --cc=sanyog.r.kale@intel.com \ --cc=slawomir.blauciak@intel.com \ --cc=srinivas.kandagatla@linaro.org \ --cc=tiwai@suse.de \ --cc=vkoul@kernel.org \ --cc=yung-chuan.liao@linux.intel.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.