From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A2A3A275B1E; Thu, 26 Jun 2025 11:56:46 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939008; cv=none; b=vEZMllhza5LUQbIvgMobw8TDZHPOCbWAWCL/l3dQXuvQBYc57NQ8yRqwL/dc+xZxor8gE/5PsjtbUZ82QJ35tkUowEPDBPNmsGHR1uPK0svpnvnRhelrik9/enUTE37MP+3nrwDjXK5rEdjG1r67dfO0l/nkI6AFdFidc0B1sJ4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939008; c=relaxed/simple; bh=/3RJJEQ2zBHSm6EY7rwA9SGnSiEM7Gbzc56YyGcdRaI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ngTcYwiHDhO2n4EdtqI2isvE1bOVJirB8/E3VBuS5DXf8dK/iZPF5lbtgCPH8k4+vKmf3PAZtFBu+cmVIUeVIEEzze4vXAy/wM46ZR9QwDnnBHibJOFWRiNnxY2UXqaARsw8lUW16IXm4t8Sq8ewCTHKrAPOFH/X+Uq/7+FB6Ko= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Z+p5L2Qi; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Z+p5L2Qi" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939006; x=1782475006; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=/3RJJEQ2zBHSm6EY7rwA9SGnSiEM7Gbzc56YyGcdRaI=; b=Z+p5L2Qi7vxn8kfFbz+TNfeRZuMNucyMoclo+vvIDwIBHLStN1YA9/ZG tQi7VNdnlpjRQWo8MLhi+EL4G/HUEGTkrz+LPDJ5bXeGfqX5Yz8IRtnjH ppQ/Vmaj/iZvmpLzqyzGH5Sluo4WtiPRdy0K/hjxguta4odKywmEOaSC8 cYf24dSB/7zmCs3HyigV9SljuXBVcOVJtsqqnqJBOxAKk5WbvkkVsAtCw OVcikihE/TzOEBeGH1nk35z9/9cSgy70rPxESeY+dVCl533OL/P39ROMQ GSgN7jjIYzQzPzGuiDH2+JQkHHgvSG1QRgkchqKDpHBOEApLQ5lVZVFhW Q==; X-CSE-ConnectionGUID: eBB7PhjPQuSgnyYV4DvGHA== X-CSE-MsgGUID: qlnUjehYR1uKA6iu/eVTZA== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304529" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304529" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:46 -0700 X-CSE-ConnectionGUID: FeIBOcjaTuquBnGDWLT4Iw== X-CSE-MsgGUID: O3VK16BnSa6lqYeipo8mUQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800555" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:44 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 01/15] soundwire: add sdw_slave_wait_for_initialization helper Date: Thu, 26 Jun 2025 19:56:11 +0800 Message-ID: <20250626115625.536423-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" waiting for slave->initialization_complete is commonly used by SoundWire codec drivers. Add a helper to reduce the duplicated code. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- drivers/soundwire/slave.c | 17 +++++++++++++++++ include/linux/soundwire/sdw.h | 1 + 2 files changed, 18 insertions(+) diff --git a/drivers/soundwire/slave.c b/drivers/soundwire/slave.c index d2d99555ec5a..5d45adb28491 100644 --- a/drivers/soundwire/slave.c +++ b/drivers/soundwire/slave.c @@ -104,6 +104,23 @@ int sdw_slave_add(struct sdw_bus *bus, } EXPORT_SYMBOL(sdw_slave_add); =20 +int sdw_slave_wait_for_initialization(struct sdw_slave *slave, unsigned in= t timeout) +{ + unsigned long time; + + time =3D wait_for_completion_timeout(&slave->initialization_complete, + msecs_to_jiffies(timeout)); + if (!time) { + dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); + sdw_show_ping_status(slave->bus, true); + + return -ETIMEDOUT; + } + + return 0; +} +EXPORT_SYMBOL(sdw_slave_wait_for_initialization); + #if IS_ENABLED(CONFIG_ACPI) =20 static bool find_slave(struct sdw_bus *bus, diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index 0832776262ac..961a10af12c1 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -1087,6 +1087,7 @@ int sdw_stream_remove_slave(struct sdw_slave *slave, struct sdw_stream_runtime *stream); =20 int sdw_slave_get_scale_index(struct sdw_slave *slave, u8 *base); +int sdw_slave_wait_for_initialization(struct sdw_slave *slave, unsigned in= t timeout); =20 /* messaging and data APIs */ int sdw_read(struct sdw_slave *slave, u32 addr); --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 000EA27602D; Thu, 26 Jun 2025 11:56:47 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939009; cv=none; b=e9R+wbZPE1O+ctTMT+S6/jR+2m08CHuKrWFkxuhLn6Qs5hLewgDGN2B9B7GmMALVv07dIp1AR9XM7bKS+G/0CxuOZz9kzeDZCk98Rema3j6zNpSErgLReeDYhKbahS566leNi04yN5bKtC+4YYY1Hspn2Ha9JrPZnSkJ0jI2QwY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939009; c=relaxed/simple; bh=l+ZULz+E396e6z9/WSxS48MyUWRhmnshGr5hszYnAgs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=tjq3oAYwNPJr2KEQZj9cU2KgPCSwEsrcgSJpMNcaNg48Sf3eep2vtFio/M5TLvHhOv083fHBueeyUMFpqwwcMzX0/8sv2lNuxUbWOp91eQN07J0GGwK5soUNGf7JE3CnFv/ON0uFdTlRxjconxFzEzPRANP7xjbjRIImIzSMkso= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=aVk02BSa; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="aVk02BSa" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939008; x=1782475008; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=l+ZULz+E396e6z9/WSxS48MyUWRhmnshGr5hszYnAgs=; b=aVk02BSaaRQ57/5+IVhhkDEG3uHoWtINIV0qJSuai8S7yuI1BQUqgERD i7e+aLNFdff/Mcyl161eHDcjuymbR74HeajM7e2pLigjfNBLSW6x2EqlG /Ojb99WtMZUIZWe5s3WuUpeCSlvp6rr04wf2iVnI6hvKJ6UsXTTGkPFfA OWlYKc2k0+1p9zG02c6rChM91MvcIpxREf269JStmeWgD2Ft1X6pa98RQ OOXPu7FjFacXW8AqMJeb235hwa+pU4wFHTblN0tnBImjYLqDcbBTVI5/i XDvSM2WGG/oJ0Rt8YyDYXd9ENbkCHcmwP16REt04sUnsvLleXLAy1tyV4 g==; X-CSE-ConnectionGUID: 1BgDA/kpSCGXHTqt4tPrcA== X-CSE-MsgGUID: NWwEcTdnRQ2yM8POZaEgsg== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304534" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304534" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:48 -0700 X-CSE-ConnectionGUID: qZSmPC6lQB+1M1Siq7gHSQ== X-CSE-MsgGUID: hyAruiDWRTa7kyFlo5BRxA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800559" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:46 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 02/15] ASoC: rt722: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:12 +0800 Message-ID: <20250626115625.536423-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt722_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt722-sdca-sdw.c | 26 ++++++++++++++------------ sound/soc/codecs/rt722-sdca.c | 6 ++++++ 2 files changed, 20 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt722-sdca-sdw.c b/sound/soc/codecs/rt722-sdc= a-sdw.c index 70700bdb80a1..b72d169bf15e 100644 --- a/sound/soc/codecs/rt722-sdca-sdw.c +++ b/sound/soc/codecs/rt722-sdca-sdw.c @@ -209,6 +209,7 @@ static int rt722_sdca_update_status(struct sdw_slave *s= lave, enum sdw_slave_status status) { struct rt722_sdca_priv *rt722 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt722->hw_init =3D false; @@ -236,7 +237,18 @@ static int rt722_sdca_update_status(struct sdw_slave *= slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt722_sdca_io_init(&slave->dev, slave); + ret =3D rt722_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt722->regmap, false); + regcache_sync(rt722->regmap); + } + + return ret; } =20 static int rt722_sdca_read_prop(struct sdw_slave *slave) @@ -495,13 +507,10 @@ static int rt722_sdca_dev_system_suspend(struct devic= e *dev) return rt722_sdca_dev_suspend(dev); } =20 -#define RT722_PROBE_TIMEOUT 5000 - static int rt722_sdca_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt722_sdca_priv *rt722 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt722->first_hw_init) return 0; @@ -517,14 +526,7 @@ static int rt722_sdca_dev_resume(struct device *dev) goto regmap_sync; } =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT722_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "Initialization not complete, timed out\n"); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt722-sdca.c b/sound/soc/codecs/rt722-sdca.c index ac9588284a95..68ba252467d0 100644 --- a/sound/soc/codecs/rt722-sdca.c +++ b/sound/soc/codecs/rt722-sdca.c @@ -1114,6 +1114,8 @@ static void rt722_sdca_shutdown(struct snd_pcm_substr= eam *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT722_PROBE_TIMEOUT 5000 + static int rt722_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -1168,6 +1170,10 @@ static int rt722_sdca_pcm_hw_params(struct snd_pcm_s= ubstream *substream, port_config.ch_mask =3D GENMASK(num_channels - 1, 0); port_config.num =3D port; =20 + retval =3D sdw_slave_wait_for_initialization(rt722->slave, RT722_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt722->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A13FC277037; Thu, 26 Jun 2025 11:56:50 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939012; cv=none; b=eVNfc6PB5jiAU67FTK7Pd/UrStL6GWS+dkb6YF0eOvbe609l5mMZuGqefxdFHSJsMpKkkQZgucy53NgyHClexpnrp36eLeM64QkQJGfevO5mIxSpcO9EkWODm7hwppnXlxjwPLaUVFHmtbg8AmJJeiZEB6iyWuTQPSeY088GWZk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939012; c=relaxed/simple; bh=C5153B8UtFaAK7n/Il+dkdVqAthL8X05VqsljYUjuSo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pMg8Ytc6bo2Wn6gBIR+p+3/gL3qmQVIwaejPW/r/dMSs0Rc7+ZmPqM/u/ubIXehq03j3kCoztV483G+imxVbQIzhDRSBYydKSkvuw4TLzT3t7Rsuo78JfgbyXUu/wIMXdafGyDRrWWMQL9HRp8JPIw30AZogkHd3BbwCAGPpNPs= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=l21c+qdA; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="l21c+qdA" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939010; x=1782475010; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=C5153B8UtFaAK7n/Il+dkdVqAthL8X05VqsljYUjuSo=; b=l21c+qdAwF6z2HupGyiqYTjFL5RYzfzHAmGIVwMb2Jce+wRotXFEER6u mWEyU7JPBxsNuFkZdGBQzr3l+XQ+bInTN1qSt+TsQX9u8Mb2hWQ4vCT6Q mNbrzhHH5CyZ1HZR2Qxxuq45uN9ATxTnS53X3IIvGBrLCl1VBeDprCOi5 JwPIVorgVDsy/X7oL1zVTRX0Ij35V2Bc/biqOs2PqmKF3cfsdPnMy0Sz7 rq8Ouc06ATcpwaJbBzLri0HptNOXzPoOaYmxVObHgI4ZTYkarEkIixRsY gJYQRhhJZN3/rqbn3hEwy+3LZMKXTq0CddxiaEF9GiYjSb8jciR5NVksf w==; X-CSE-ConnectionGUID: xtXBaCf3Rl6AmNuvBUEMQg== X-CSE-MsgGUID: EcUHXNl3QIuwb8+ayqREPA== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304539" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304539" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:50 -0700 X-CSE-ConnectionGUID: xPnfdJXYS/ed7A36+MA57Q== X-CSE-MsgGUID: JKB81f38TiSYdE+Xn3TnDw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800563" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:48 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 03/15] ASoC: rt712: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:13 +0800 Message-ID: <20250626115625.536423-4-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt712_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt712-sdca-sdw.c | 28 ++++++++++++++++------------ sound/soc/codecs/rt712-sdca.c | 6 ++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt712-sdca-sdw.c b/sound/soc/codecs/rt712-sdc= a-sdw.c index ea07131edfa2..183496505e90 100644 --- a/sound/soc/codecs/rt712-sdca-sdw.c +++ b/sound/soc/codecs/rt712-sdca-sdw.c @@ -157,6 +157,7 @@ static int rt712_sdca_update_status(struct sdw_slave *s= lave, enum sdw_slave_status status) { struct rt712_sdca_priv *rt712 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt712->hw_init =3D false; @@ -184,7 +185,20 @@ static int rt712_sdca_update_status(struct sdw_slave *= slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt712_sdca_io_init(&slave->dev, slave); + ret =3D rt712_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt712->regmap, false); + regcache_sync(rt712->regmap); + regcache_cache_only(rt712->mbq_regmap, false); + regcache_sync(rt712->mbq_regmap); + } + + return ret; } =20 static int rt712_sdca_read_prop(struct sdw_slave *slave) @@ -446,13 +460,10 @@ static int rt712_sdca_dev_system_suspend(struct devic= e *dev) return rt712_sdca_dev_suspend(dev); } =20 -#define RT712_PROBE_TIMEOUT 5000 - static int rt712_sdca_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt712_sdca_priv *rt712 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt712->first_hw_init) return 0; @@ -469,14 +480,7 @@ static int rt712_sdca_dev_resume(struct device *dev) goto regmap_sync; } =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT712_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt712-sdca.c b/sound/soc/codecs/rt712-sdca.c index 570c2af1245d..c8c68fda5c20 100644 --- a/sound/soc/codecs/rt712-sdca.c +++ b/sound/soc/codecs/rt712-sdca.c @@ -1451,6 +1451,8 @@ static void rt712_sdca_shutdown(struct snd_pcm_substr= eam *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT712_PROBE_TIMEOUT 5000 + static int rt712_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -1505,6 +1507,10 @@ static int rt712_sdca_pcm_hw_params(struct snd_pcm_s= ubstream *substream, port_config.ch_mask =3D GENMASK(num_channels - 1, 0); port_config.num =3D port; =20 + retval =3D sdw_slave_wait_for_initialization(rt712->slave, RT712_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt712->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 49431277813; Thu, 26 Jun 2025 11:56:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939013; cv=none; b=qVa89O36L5ezbHBUw40I/2n1R52VI1RizFp3ZL+g6GqxUMYAe/Q9DjT9HmnFmi2xTnpQyjWSOm27RIjxad/k/V+cDR5YUd46MypoVQ5QFmL8idl4Z9xDoXK15iVxrul0uJCYV4CRZ1I80T4eRgqfLGrKHd18A6TP6N0epyaEUF0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939013; c=relaxed/simple; bh=m7ZCmsBWx9joLgTBbsXcXZoMZ6FZ1RJC72uCOzQGhG8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=rfMfVRC669n1NZORR5N7G0+eeb+jxCgQIQcdYRLxBZZEgSc6QdBkk5wtEHFl5LlW5JrMQjQkM1L46Z44ehX41Ir66esIBkewRwFfMa4lPnskjKEUDDqkt15bZ7rnhYo5+M0HYPXYiH+qvOxEfQHY3P8uo5y8DK4YV0PkgtdXikw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=J1RQ1nFK; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="J1RQ1nFK" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939012; x=1782475012; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=m7ZCmsBWx9joLgTBbsXcXZoMZ6FZ1RJC72uCOzQGhG8=; b=J1RQ1nFKrwOadsW0n5ub8toLx9DASYDctEyhZ+Xr8EpyXQJ2VI4SQeBS U9zOHPTQ8BrKuuI8XWrKKDOaX38VAjdJ0Ikz8OMOTcIkmXVKfTbgLYBwu o+rfpNmLE51eIA55DfHLVxant++ruCIhQbK7CdtE93+JAOPM4bd1OMP0a +rhcNIRA1L8AzLX0qsCEYrBWYzmOmGWC8ZO5z2CMg5vbu6nSvbonlKQtt MDjrKuwQGrrxqmzDzFzinqIzAJvQ5ETHq/pLoPzEMEF8zAA/g2rD+7BpB ABGPmeZOT+iMLmBdFn+gEP2w3s8WOni2mqm//LnlGXEj3NNJQi9qKOCbt g==; X-CSE-ConnectionGUID: c/nd4nn6R/aFQzzxhs0F4A== X-CSE-MsgGUID: 8SQIB3m1Q5ONA6+bomtxhg== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304544" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304544" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:52 -0700 X-CSE-ConnectionGUID: zr8xLsxqQ5+LREamJLbVAg== X-CSE-MsgGUID: LwwBO3GWSgCwiNlWJI09Lw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800574" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:50 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 04/15] ASoC: rt1320: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:14 +0800 Message-ID: <20250626115625.536423-5-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt1320_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt1320-sdw.c | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/sound/soc/codecs/rt1320-sdw.c b/sound/soc/codecs/rt1320-sdw.c index 015cc710e6dc..e4b208be492c 100644 --- a/sound/soc/codecs/rt1320-sdw.c +++ b/sound/soc/codecs/rt1320-sdw.c @@ -774,6 +774,7 @@ static int rt1320_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt1320_sdw_priv *rt1320 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt1320->hw_init =3D false; @@ -786,7 +787,20 @@ static int rt1320_update_status(struct sdw_slave *slav= e, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt1320_io_init(&slave->dev, slave); + ret =3D rt1320_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt1320->regmap, false); + regcache_sync(rt1320->regmap); + regcache_cache_only(rt1320->mbq_regmap, false); + regcache_sync(rt1320->mbq_regmap); + } + + return ret; } =20 static int rt1320_pde11_event(struct snd_soc_dapm_widget *w, @@ -1183,6 +1197,8 @@ static void rt1320_sdw_shutdown(struct snd_pcm_substr= eam *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT1320_PROBE_TIMEOUT 5000 + static int rt1320_sdw_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { @@ -1225,6 +1241,10 @@ static int rt1320_sdw_hw_params(struct snd_pcm_subst= ream *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt1320->sdw_slave, RT1320_PR= OBE_TIMEOUT); + if (retval < 0) + return retval; + if (dai->id =3D=3D RT1320_AIF1) retval =3D sdw_stream_add_slave(rt1320->sdw_slave, &stream_config, &port_config, 1, sdw_stream); @@ -1485,13 +1505,10 @@ static int rt1320_dev_suspend(struct device *dev) return 0; } =20 -#define RT1320_PROBE_TIMEOUT 5000 - static int rt1320_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt1320_sdw_priv *rt1320 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt1320->first_hw_init) return 0; @@ -1499,12 +1516,7 @@ static int rt1320_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT1320_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 443FE277CB3; Thu, 26 Jun 2025 11:56:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939015; cv=none; b=XJzzDvKYyitv5yuHZs6unB3FMMAvaVJZgPjP7xPjh1mcSM8qQYPYhOtw+kEqu4QlOz1zYDcr8Z8O83zSzaUka+OZ6wJmYTFDXsZFCOA1AfJJdEYBc5aCISW8HEUWQjmyv125Cx14jZcQCaG+4al8zu/07/eTEeqPXqf9fASLxFI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939015; c=relaxed/simple; bh=VgHMTkjrtCxJDcgekslfeeg2G7Yluwd9NMReHQFzwvo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Q4O0ZGQOLoJCsW5hEkevpxzg1pi8Jqxp69X8gpAmr5UujU1gPUkfbK4AdSW5UY1I4cgFTaTucBLJTAcc+U/3JIqM+WExHKLVEjEYvZ5aUQNXCVqugmSykdqC0BLXtjpM2I8sD3fJhvDbfkc02SeY913U7P5E6A9fggfXfaskw7k= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=NHLmzgYn; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="NHLmzgYn" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939014; x=1782475014; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=VgHMTkjrtCxJDcgekslfeeg2G7Yluwd9NMReHQFzwvo=; b=NHLmzgYn81Zj59J81IU0eS9xZ8ruZjVjP7yEKZBWh+zYdIckeb293Kkn Jc4LaaPDcFI1FZbWPuo+Yu3AkDISFZSWBxOhPe7+O9dEfZXO3tl/6EiL8 yjk3rOmsxfqbR4YTy8rN/4kFSXCyOocvtYyJLDT6Bvouo+k9/Iy3ClOT1 CL/2gtk8BZ0VQ3Lq8Y9V4i1+njRjD/hZcUSCEWoKG6ON+bv2UEdvmVGPm HVyhXFuZaSI5RUGktXxb0io19CdekmumpbZQf0Nls7r86WPu6d0V8M0bN xX/7Tlk+uUsrPvEvPCpM/SbRlZrU5Jmyb/OVjh6f0aBPFcIInBuuFkDHn A==; X-CSE-ConnectionGUID: qPWB2gUxQ5+gu1iv3S3R6w== X-CSE-MsgGUID: PwXE+Ah+TWWYzB5Sf8OMqQ== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304549" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304549" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:54 -0700 X-CSE-ConnectionGUID: OYPnU64iRF+7siS+I3a3wA== X-CSE-MsgGUID: Lu0D8iJXT9y95Fi9/KHZLw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800578" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:52 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 05/15] ASoC: rt721: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:15 +0800 Message-ID: <20250626115625.536423-6-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt721_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt721-sdca-sdw.c | 29 ++++++++++++++++------------- sound/soc/codecs/rt721-sdca.c | 6 ++++++ 2 files changed, 22 insertions(+), 13 deletions(-) diff --git a/sound/soc/codecs/rt721-sdca-sdw.c b/sound/soc/codecs/rt721-sdc= a-sdw.c index 582b47d69278..342a55116771 100644 --- a/sound/soc/codecs/rt721-sdca-sdw.c +++ b/sound/soc/codecs/rt721-sdca-sdw.c @@ -190,6 +190,7 @@ static int rt721_sdca_update_status(struct sdw_slave *s= lave, enum sdw_slave_status status) { struct rt721_sdca_priv *rt721 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt721->hw_init =3D false; @@ -217,7 +218,20 @@ static int rt721_sdca_update_status(struct sdw_slave *= slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt721_sdca_io_init(&slave->dev, slave); + ret =3D rt721_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt721->regmap, false); + regcache_sync(rt721->regmap); + regcache_cache_only(rt721->mbq_regmap, false); + regcache_sync(rt721->mbq_regmap); + } + + return ret; } =20 static int rt721_sdca_read_prop(struct sdw_slave *slave) @@ -483,13 +497,10 @@ static int rt721_sdca_dev_system_suspend(struct devic= e *dev) return rt721_sdca_dev_suspend(dev); } =20 -#define RT721_PROBE_TIMEOUT 5000 - static int rt721_sdca_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt721_sdca_priv *rt721 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt721->first_hw_init) return 0; @@ -504,15 +515,7 @@ static int rt721_sdca_dev_resume(struct device *dev) mutex_unlock(&rt721->disable_irq_lock); goto regmap_sync; } - - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT721_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "Initialization not complete, timed out\n"); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt721-sdca.c b/sound/soc/codecs/rt721-sdca.c index ba080957e933..91a7b6f672c6 100644 --- a/sound/soc/codecs/rt721-sdca.c +++ b/sound/soc/codecs/rt721-sdca.c @@ -1261,6 +1261,8 @@ static void rt721_sdca_shutdown(struct snd_pcm_substr= eam *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT721_PROBE_TIMEOUT 5000 + static int rt721_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -1315,6 +1317,10 @@ static int rt721_sdca_pcm_hw_params(struct snd_pcm_s= ubstream *substream, port_config.ch_mask =3D GENMASK(num_channels - 1, 0); port_config.num =3D port; =20 + retval =3D sdw_slave_wait_for_initialization(rt721->slave, RT721_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt721->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1027F278751; Thu, 26 Jun 2025 11:56:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939017; cv=none; b=nhIDZZtjO2mGhD37p/BDrgkBKx9sVRBh0muR3hhmNSiUiv0/ZcCDHs+ib4aWJwCWfTQUzsw49iU89n3kAqNDxUWW94wsvvyhRvQH9SydpjzbSOf+OUKQCh51dNJNKH4WXh9n5ZHEg/Mp3W404txUAkGS/nxNogXYC3xWel31c04= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939017; c=relaxed/simple; bh=qVs9DePQwfSoblYKyo+N6IEiqpEFOUwf77UEU2hz+qc=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=iX8pUpCrnlgRL42g4X4EqEQNpPUxb3akvDqxMXNHMmZXtwrg5CHg6+w5wVzzcwr3SQM7L3Niem5lR7hERFTF85508+IKnTET999oi9R93g5Gd7HPXSOj7Q+fkUB5mWCKyellqMIwfF7ZyQLOlgm7ddkFz45Y4K2s85cPU3coie0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=kJPmScIV; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="kJPmScIV" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939016; x=1782475016; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=qVs9DePQwfSoblYKyo+N6IEiqpEFOUwf77UEU2hz+qc=; b=kJPmScIVHFX9dO9QAuyKZdSoHXZXz1xp5LEwv1sEuQxypd9OmnbOw4E2 i5lFuwDw/LVuz+aP+6f1ZXNg4/b8SHiYae+MESJit82Pa5TZiUy2Z0nSL xrsMPiK/9R+9asev7t1OxGqAa37MC4JL1l+QTDfpQ1uChJwTADCJqQkZg DbRApLSsqZ7gWKjhal46ia+a8b/fcJbztQPwQALdohlNF8wNmqxYvFWFo KaSqJlYCxb7MET1y22yTI518sXLGaEJ4YNXQBIXxAcSKVsUAkKHKdUlPj UMFs5QSZHFI69OAC0dhToYwDuzJXtL7NgU4gh7UEdCDdJreyw0Y91nSKc Q==; X-CSE-ConnectionGUID: il5QX3+vT/yPODoZmOtJFg== X-CSE-MsgGUID: TiX6PrP+Q0OopqKhRbfIjQ== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304554" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304554" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:56 -0700 X-CSE-ConnectionGUID: /pmaB/OTRV29UnKooCxsmA== X-CSE-MsgGUID: 4BpQSyPHR32WE2Y3pBrRCA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800583" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:54 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 06/15] ASoC: rt715-sdca: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:16 +0800 Message-ID: <20250626115625.536423-7-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt715_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt715-sdca-sdw.c | 37 +++++++++++++++++++++---------- sound/soc/codecs/rt715-sdca.c | 6 +++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt715-sdca-sdw.c b/sound/soc/codecs/rt715-sdc= a-sdw.c index ce7d8955efc3..ed0e230fc009 100644 --- a/sound/soc/codecs/rt715-sdca-sdw.c +++ b/sound/soc/codecs/rt715-sdca-sdw.c @@ -120,6 +120,7 @@ static int rt715_sdca_update_status(struct sdw_slave *s= lave, enum sdw_slave_status status) { struct rt715_sdca_priv *rt715 =3D dev_get_drvdata(&slave->dev); + int ret; =20 /* * Perform initialization only if slave status is present and @@ -129,7 +130,29 @@ static int rt715_sdca_update_status(struct sdw_slave *= slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt715_sdca_io_init(&slave->dev, slave); + ret =3D rt715_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt715->regmap, false); + regcache_sync_region(rt715->regmap, + SDW_SDCA_CTL(FUN_JACK_CODEC, RT715_SDCA_ST_EN, + RT715_SDCA_ST_CTRL, CH_00), + SDW_SDCA_CTL(FUN_MIC_ARRAY, RT715_SDCA_SMPU_TRIG_ST_EN, + RT715_SDCA_SMPU_TRIG_ST_CTRL, CH_00)); + regcache_cache_only(rt715->mbq_regmap, false); + regcache_sync_region(rt715->mbq_regmap, 0x2000000, 0x61020ff); + regcache_sync_region(rt715->mbq_regmap, + SDW_SDCA_CTL(FUN_JACK_CODEC, RT715_SDCA_ST_EN, + RT715_SDCA_ST_CTRL, CH_00), + SDW_SDCA_CTL(FUN_MIC_ARRAY, RT715_SDCA_SMPU_TRIG_ST_EN, + RT715_SDCA_SMPU_TRIG_ST_CTRL, CH_00)); + } + + return ret; } =20 static int rt715_sdca_read_prop(struct sdw_slave *slave) @@ -220,13 +243,10 @@ static int rt715_dev_suspend(struct device *dev) return 0; } =20 -#define RT715_PROBE_TIMEOUT 5000 - static int rt715_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt715_sdca_priv *rt715 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt715->first_hw_init) return 0; @@ -234,14 +254,7 @@ static int rt715_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT715_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt715-sdca.c b/sound/soc/codecs/rt715-sdca.c index 7fb02654c16b..c2a08ae8df95 100644 --- a/sound/soc/codecs/rt715-sdca.c +++ b/sound/soc/codecs/rt715-sdca.c @@ -792,6 +792,8 @@ static void rt715_sdca_shutdown(struct snd_pcm_substrea= m *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT715_PROBE_TIMEOUT 5000 + static int rt715_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -830,6 +832,10 @@ static int rt715_sdca_pcm_hw_params(struct snd_pcm_sub= stream *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt715->slave, RT715_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt715->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1553A279331; Thu, 26 Jun 2025 11:56:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939019; cv=none; b=PnQcQgT41TIn4uNkp0V7qz/ZzXcneiyrZrpQ8vwyZ5H+XyqD3c+4JWBYavBuGKmMDizk56x7CfG9fK9ub4yE9J951fc+L58rxfsd9R3gMq5u7Tkd6q7OhJ6vRWVejVRVPw7E538eF2KOm3jswegFgk3vZB+VIaDdZOoc4Ca1Jlg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939019; c=relaxed/simple; bh=ur3iJNC/prPNA/VGCtNu1nPwmXw0oOudMWBo6/Ic2h4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=Qtdf2ynQRU4F9vywRSvxT370GFN8xCFjeQNXHuA8PuMAD4g0Eps641Z6kq0fZTh5LOSEjj2zSEVp6AwGpyuzmsa8882pcyhKwi0IdTYv71LwKvkleGuO1B3qEwr+vv0b27pwz828Ds4gUu25h5h1v882mOy9LbY8UHI3I+4jzzc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=hjUGiUR5; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="hjUGiUR5" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939018; x=1782475018; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=ur3iJNC/prPNA/VGCtNu1nPwmXw0oOudMWBo6/Ic2h4=; b=hjUGiUR5PpZuCsjDM9090m6RICouKpgUMtiwJVJqCStWAV7UINkYKAIY +QfA0jYfPCf/IlF9DjQ06xgyS63sQ4TCs2S6bdSVWL0AjyuWVbCzgO7Kc XND5RiMMRM7siYdud11YIwi4cuuwR5rwEFZ3a+qSLT3nx1aoVajGVGKNC nhJDLPDZXsXGJS31EpOjDWQ6nfLkkxHb6SKPVy516d24BU4eaYIjlGDaZ P2tbWWdd2Il0uAER65N9DaLnLS2ea06pmYOwH4d5Dhy3y6Wi3wWujZb0+ N/c9A1SRr9J4dOcmG6IKSJ4XeHoFmj4FY66t8xZ33yTjxefj/zWmuuN19 w==; X-CSE-ConnectionGUID: EEA4aNc1ScahJqWYW4xoIw== X-CSE-MsgGUID: cwXRo62RTM2gZr1EpAMRLw== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304559" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304559" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:58 -0700 X-CSE-ConnectionGUID: BSd9wuZfQ+OY0bIsUy5XOA== X-CSE-MsgGUID: IIxyWJarR3WIMnHBRwk8sQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800586" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:56 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 07/15] ASoC: rt711-sdca: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:17 +0800 Message-ID: <20250626115625.536423-8-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt711_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt711-sdca-sdw.c | 28 ++++++++++++++++------------ sound/soc/codecs/rt711-sdca.c | 6 ++++++ 2 files changed, 22 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt711-sdca-sdw.c b/sound/soc/codecs/rt711-sdc= a-sdw.c index 6eb05871db37..ec11e0033a28 100644 --- a/sound/soc/codecs/rt711-sdca-sdw.c +++ b/sound/soc/codecs/rt711-sdca-sdw.c @@ -142,6 +142,7 @@ static int rt711_sdca_update_status(struct sdw_slave *s= lave, enum sdw_slave_status status) { struct rt711_sdca_priv *rt711 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt711->hw_init =3D false; @@ -169,7 +170,20 @@ static int rt711_sdca_update_status(struct sdw_slave *= slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt711_sdca_io_init(&slave->dev, slave); + ret =3D rt711_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt711->regmap, false); + regcache_sync(rt711->regmap); + regcache_cache_only(rt711->mbq_regmap, false); + regcache_sync(rt711->mbq_regmap); + } + + return ret; } =20 static int rt711_sdca_read_prop(struct sdw_slave *slave) @@ -434,13 +448,10 @@ static int rt711_sdca_dev_system_suspend(struct devic= e *dev) return rt711_sdca_dev_suspend(dev); } =20 -#define RT711_PROBE_TIMEOUT 5000 - static int rt711_sdca_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt711_sdca_priv *rt711 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt711->first_hw_init) return 0; @@ -456,14 +467,7 @@ static int rt711_sdca_dev_resume(struct device *dev) goto regmap_sync; } =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT711_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt711-sdca.c b/sound/soc/codecs/rt711-sdca.c index dd6ccf17afd4..a4027796dafc 100644 --- a/sound/soc/codecs/rt711-sdca.c +++ b/sound/soc/codecs/rt711-sdca.c @@ -1327,6 +1327,8 @@ static void rt711_sdca_shutdown(struct snd_pcm_substr= eam *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT711_PROBE_TIMEOUT 5000 + static int rt711_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -1362,6 +1364,10 @@ static int rt711_sdca_pcm_hw_params(struct snd_pcm_s= ubstream *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt711->slave, RT711_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt711->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B7B5279788; Thu, 26 Jun 2025 11:57:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939021; cv=none; b=KjoNQ9ywCFhHXCJDo2Hw3G4TaEj8205ScEI8Srf13eNum9781QmzKTfmZMaQP466go0aDiV/qZglwgVx38cYTq0CjTnV8LVgEzcdzFh27JtODYo5QPjuOgYPsSdLW1KJdZOH5lKR/qnLtUUEtyESE9pHOLi6o7b9/13TyQeTfAA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939021; c=relaxed/simple; bh=eU7x8frBuSwQFvHll0qVmRtpN09qhwLKzwemVusSCB8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=V+eCWX61r7lLONGPcyQB+JedY5/C4ZjrBOylnCM/fHq/m4VcPXFUajsoOHUKtSmnCrhcLYxowg3GvBjIRtW16A46uOwqvCScDnSG8ytkDWVxBbpz37S7Jcgvsay5uUvRUlQCKgVZ0yXN7x+qKNczBs5dR6G+XMerYSUmiqVM8fc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=I4a6fa9/; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="I4a6fa9/" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939020; x=1782475020; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=eU7x8frBuSwQFvHll0qVmRtpN09qhwLKzwemVusSCB8=; b=I4a6fa9/E9NyMnY1pQ5hXI98xSnX3WYhz3osH1cUwDSWRrxsn7jBKf7/ iSC6zHQwvtYWuWFrl/Ss0kSRPvPZCXbUflTyI1D5To4d3ampPOkEsqRHg jPAh6Y5FIX7XGwRKpI9ucQ821MI6fCsHenAvz+Iu+YhKYW7bEV8Dcsi9E nad1IURi99z2FBbu85zw/oyw4Bo9GCDP5C3J9sQMOjz83ReDLpI7qZ675 g499d62y40opZ6z5UgB9HSik5n5gJ/Poe0KlH3U27GAn+jpi0yp8U87TB c0yedJIRbcAC2yGwLD885Hf1rQj0Iqew2P5+1boYj20SliZDOU5xjbhsP A==; X-CSE-ConnectionGUID: WCgM2EvtQ+2h3m3ovHE2Tw== X-CSE-MsgGUID: jikVIaweRKqDf4oGIYdlLA== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304564" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304564" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:00 -0700 X-CSE-ConnectionGUID: 1hlgPCflRQq0NslWZGczpQ== X-CSE-MsgGUID: IkAC6jETQAqa6DyruWpO1g== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800589" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:56:58 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 08/15] ASoC: rt711: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:18 +0800 Message-ID: <20250626115625.536423-9-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt711_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt711-sdw.c | 26 ++++++++++++++++---------- sound/soc/codecs/rt711.c | 6 ++++++ 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/sound/soc/codecs/rt711-sdw.c b/sound/soc/codecs/rt711-sdw.c index 93a5a89a96b1..884206850b46 100644 --- a/sound/soc/codecs/rt711-sdw.c +++ b/sound/soc/codecs/rt711-sdw.c @@ -320,6 +320,7 @@ static int rt711_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt711_priv *rt711 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt711->hw_init =3D false; @@ -332,7 +333,20 @@ static int rt711_update_status(struct sdw_slave *slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt711_io_init(&slave->dev, slave); + ret =3D rt711_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "%s: I/O init failed: %d\n", + __func__, ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt711->regmap, false); + regcache_sync_region(rt711->regmap, 0x3000, 0x8fff); + regcache_sync_region(rt711->regmap, 0x752009, 0x752091); + } + + return ret; } =20 static int rt711_read_prop(struct sdw_slave *slave) @@ -526,13 +540,10 @@ static int rt711_dev_system_suspend(struct device *de= v) return rt711_dev_suspend(dev); } =20 -#define RT711_PROBE_TIMEOUT 5000 - static int rt711_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt711_priv *rt711 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt711->first_hw_init) return 0; @@ -547,12 +558,7 @@ static int rt711_dev_resume(struct device *dev) goto regmap_sync; } =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT711_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt711.c b/sound/soc/codecs/rt711.c index 5446f9506a16..2fbd7c0227ff 100644 --- a/sound/soc/codecs/rt711.c +++ b/sound/soc/codecs/rt711.c @@ -982,6 +982,8 @@ static void rt711_shutdown(struct snd_pcm_substream *su= bstream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT711_PROBE_TIMEOUT 5000 + static int rt711_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -1017,6 +1019,10 @@ static int rt711_pcm_hw_params(struct snd_pcm_substr= eam *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt711->slave, RT711_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt711->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 208F02798E6; Thu, 26 Jun 2025 11:57:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939023; cv=none; b=CFEsavj+FyPrBKe2MMdr26CNUzLFK8NIo4wCbNasOZA8Z2g00MGR3O/E3/7WYiSPK/JYvLpNtjMRwn8m3X8n23EZTr4iJzbwpaVmbVbS7dF67rV7qbGHNaJkx8FoB73D9+Qp8Sgreixg6oP2cWNUU74h54wuMgg/5Xjk9Ra3n1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939023; c=relaxed/simple; bh=8CgsMgzTzBzKoVm0nE1uhNwdkfF5WSMH/9ug8+qb4jY=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=FBM87szj4U+rSyAYJPxtZQWjiBdrQqzvPTSoe5K7OKQ+8JAj0UC10kHjLFJNmthA5GgV1v3P+RpjZkNSXVEB+/Ip5NA/To8UETO7tTfOfR0L3kG9CnXMTOsiFu56pKkQN9UA/lBf0ye4qotIMWMUJGL8/MfX3Dmg8wZB1XfvA9o= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=R1SKWJPU; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="R1SKWJPU" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939022; x=1782475022; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8CgsMgzTzBzKoVm0nE1uhNwdkfF5WSMH/9ug8+qb4jY=; b=R1SKWJPUp4JTMBMa14s5VyVebsBLnl/6laI8y/0kvDMMoOEBvXEv4GfB TvJny6gpOp04ARQtlbOeqe3QCmjRV3NPXxbQDYFx9ZmMeMLhhI7X6ZRGR woC+EXfx27otW5k1lFzqQ2fzbWk6AL21kQ7eJZu0WmA4GXTf2pbXIbJSb Dg6r+rSVhGy0b9HGVaPir91SLpGlVJyNevMZArRMovKwIqUyKxnpKgTRt 0ToKp9ei7nSxz888XxYM+JzqAmJaHxRFRK1s3H+VxMMrZk5zgl9nQ42DZ ExRuA9LZTQOeG0B3UitXwNq37nV24alXf+5dmMMoj5E0l4PM7BLZusMyw g==; X-CSE-ConnectionGUID: 1K7qUprJRGy4nqFIXyZbBA== X-CSE-MsgGUID: KCU6a/bAQh+JWikF2GKhNg== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304569" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304569" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:02 -0700 X-CSE-ConnectionGUID: 3l95awnQTjqf4Pn4N1Qzaw== X-CSE-MsgGUID: wUCsTs/YRciOLwu76pqVgQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800593" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:00 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 09/15] ASoC: rt715: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:19 +0800 Message-ID: <20250626115625.536423-10-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt715_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt715-sdw.c | 27 +++++++++++++++------------ sound/soc/codecs/rt715.c | 6 ++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt715-sdw.c b/sound/soc/codecs/rt715-sdw.c index a3df4bbedf86..8276ff9958c4 100644 --- a/sound/soc/codecs/rt715-sdw.c +++ b/sound/soc/codecs/rt715-sdw.c @@ -376,6 +376,7 @@ static int rt715_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt715_priv *rt715 =3D dev_get_drvdata(&slave->dev); + int ret; =20 /* * Perform initialization only if slave status is present and @@ -385,7 +386,19 @@ static int rt715_update_status(struct sdw_slave *slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt715_io_init(&slave->dev, slave); + ret =3D rt715_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "%s: I/O init failed: %d\n", __func__, ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt715->regmap, false); + regcache_sync_region(rt715->regmap, 0x3000, 0x8fff); + regcache_sync_region(rt715->regmap, 0x752039, 0x752039); + } + + return ret; } =20 static int rt715_read_prop(struct sdw_slave *slave) @@ -497,13 +510,10 @@ static int rt715_dev_suspend(struct device *dev) return 0; } =20 -#define RT715_PROBE_TIMEOUT 5000 - static int rt715_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt715_priv *rt715 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt715->first_hw_init) return 0; @@ -511,14 +521,7 @@ static int rt715_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT715_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt715.c b/sound/soc/codecs/rt715.c index 2cf461852091..bf523a39bdcf 100644 --- a/sound/soc/codecs/rt715.c +++ b/sound/soc/codecs/rt715.c @@ -822,6 +822,8 @@ static void rt715_shutdown(struct snd_pcm_substream *su= bstream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT715_PROBE_TIMEOUT 5000 + static int rt715_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -858,6 +860,10 @@ static int rt715_pcm_hw_params(struct snd_pcm_substrea= m *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt715->slave, RT715_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt715->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 24167279DA1; Thu, 26 Jun 2025 11:57:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939025; cv=none; b=iXOc6Jlic3tXSzuakENnr6X73UyEjyPciFj2bPJFZR0XVfj0YPgNQ9GBvjSmmVRtKkdAau6bSD2iuDs7tG17bQsY1CC2HV+ni8JwfDR2tDDORd2AelTeDiqLTrDz+AAllKXqjo8H1Gx9hDPLtuvhMtXoso7K8TMjyfzFs2qXPno= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939025; c=relaxed/simple; bh=OmM1T9hWUO+dqLyl32oQNz02knbaSsAssuvbQZaFCjM=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=pXnS45wP4LjUMSc7MaqECuJN06KN88mpoSXor2u3e94MIB7yM7ImjUgY5EUblUkHE4aFyENKZ3s0Ma3CnTd4hJ/FHL8lK3+AI9w6xCPFB+5VsdLNRzTGL+h28YUJfIb+tO/FIzcfkJEfgKJI+xky0kWjvlvRdJNP4gFgY9SU33Y= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=PNXs/ZXT; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="PNXs/ZXT" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939024; x=1782475024; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OmM1T9hWUO+dqLyl32oQNz02knbaSsAssuvbQZaFCjM=; b=PNXs/ZXTy4YfUp8wUgjgZxhrxc/u//ML7bfYZsv9tlZAp69Hqx06nUCy OVAOCm7IwFHIDPkiIqvOQd3WQv8RGdmuZHF//VAZgAjkeo3HWwSlPQqmd HmMzdivX7Z67yfklFbTvdGk1gbCwwa5PMJJPnKeyshWDlBn5r5PJXqXg1 xJNBNw2d5ucxTfq2uGxRrjEitIik2CJOlELBu39BWN1TlhmOznCXkIZVa tsNo68w/i7l4Uhwfdo9sIru1Iun4JCyaYoAQksatYvvbNmMTICSZhumHi 9P6CQ4FaooVv45yxPolVqH5bQCSkNT4rkL5fbg+ml7z5hXH8bdFOFOrH6 g==; X-CSE-ConnectionGUID: UITMB03HRieR2PbT2fAVaw== X-CSE-MsgGUID: VVhf0JNdRUWxZ9XTxhvS8w== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304576" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304576" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:04 -0700 X-CSE-ConnectionGUID: Tx14iqVMTT6RvR9XINE4xA== X-CSE-MsgGUID: Yqu+3/lFRjOHtzhI+uWLyQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800597" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:02 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 10/15] ASoC: rt700: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:20 +0800 Message-ID: <20250626115625.536423-11-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt700_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt700-sdw.c | 27 +++++++++++++++------------ sound/soc/codecs/rt700.c | 6 ++++++ 2 files changed, 21 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt700-sdw.c b/sound/soc/codecs/rt700-sdw.c index 44543c0da177..dd775788c2ee 100644 --- a/sound/soc/codecs/rt700-sdw.c +++ b/sound/soc/codecs/rt700-sdw.c @@ -314,6 +314,7 @@ static int rt700_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt700_priv *rt700 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt700->hw_init =3D false; @@ -326,7 +327,19 @@ static int rt700_update_status(struct sdw_slave *slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt700_io_init(&slave->dev, slave); + ret =3D rt700_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "I/O init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt700->regmap, false); + regcache_sync_region(rt700->regmap, 0x3000, 0x8fff); + regcache_sync_region(rt700->regmap, 0x752010, 0x75206b); + } + + return ret; } =20 static int rt700_read_prop(struct sdw_slave *slave) @@ -518,13 +531,10 @@ static int rt700_dev_system_suspend(struct device *de= v) return rt700_dev_suspend(dev); } =20 -#define RT700_PROBE_TIMEOUT 5000 - static int rt700_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt700_priv *rt700 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt700->first_hw_init) return 0; @@ -532,14 +542,7 @@ static int rt700_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT700_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "Initialization not complete, timed out\n"); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; diff --git a/sound/soc/codecs/rt700.c b/sound/soc/codecs/rt700.c index 434b926f96c8..4a5338f7ad92 100644 --- a/sound/soc/codecs/rt700.c +++ b/sound/soc/codecs/rt700.c @@ -893,6 +893,8 @@ static void rt700_shutdown(struct snd_pcm_substream *su= bstream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT700_PROBE_TIMEOUT 5000 + static int rt700_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -934,6 +936,10 @@ static int rt700_pcm_hw_params(struct snd_pcm_substrea= m *substream, return -EINVAL; } =20 + retval =3D sdw_slave_wait_for_initialization(rt700->slave, RT700_PROBE_TI= MEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt700->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66854279DCE; Thu, 26 Jun 2025 11:57:06 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939027; cv=none; b=nSu6yuyHL2iMQK/vRwJJj8B4BJNhVn/WjEDwMnZc7RL1jOWndHTvjrfz6R4v9vlAyInBX3SGomZr4grQTfR8Fx4V7Yh2OcslwDx3hrjPwwmLvfGQGsL7GI7zODPfOk4CFt02e0XD1o8QUtBJ6eFwyhxg7WvEjPwI2cj9F+UPO5I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939027; c=relaxed/simple; bh=+D1L+UgJ1oRYpPjCQTasQ3CZ3xlr2ukMC6moP9xH+E4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=YXRJQ8cbg/gdlGUhP/qJ34Ip0jey/vHefnHCYTlKYITDWNeV06Cv+wp68bfyaNTfwpA/MQ2OZnC3PAr9M6s50TD2UpvcnNTGUd+GkG+UnjiuFJQjqanSUirvb75Z8JDgRaKAlcM+p2etFTFfHQNCA+0453YLtjRtqrg2j2/vvk4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=LAHm/cXP; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="LAHm/cXP" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939026; x=1782475026; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=+D1L+UgJ1oRYpPjCQTasQ3CZ3xlr2ukMC6moP9xH+E4=; b=LAHm/cXPb8ZEio9C/QtOT6BmjOUx0dyijEzCPQEGldjO5PuAmD8TvRn5 5ziQGacws9EPIGYpbHpET+a1ExlWCNmWLkpmTsMqvkoMA99HD8GXV3r55 nmCb1k0SDXB8fKykgLhXkg55GXRtDf9dYLw1kgcQvi1r5UEzjlRs55H5R mfYfxcoCZ56tPo329sdbMriIusIyJWnVN3VZbBKnVCId0FZwr+UVFPMX9 m06kujLRK80IUm+6GSUXp/p+NEILOGGwN7VA+MmUKSAzrPovSyfmV9g1n 56TzfC9TEykTdz4Oov50wXHmRgTFG2hCsePDtwHGtWdnQjyljg5oabYDO w==; X-CSE-ConnectionGUID: d+pLoeyXQxCF/KhzN836Ng== X-CSE-MsgGUID: vl9+U5VlSOy2EN/at9Ijnw== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304581" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304581" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:06 -0700 X-CSE-ConnectionGUID: z08VM/haQLu6cgL8vGHIAw== X-CSE-MsgGUID: yBSrh46PTqu1eZycNwRvHA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800602" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:04 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 11/15] ASoC: rt1316: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:21 +0800 Message-ID: <20250626115625.536423-12-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt1316_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt1316-sdw.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt1316-sdw.c b/sound/soc/codecs/rt1316-sdw.c index 960b6c4f5a66..56e82c0f648d 100644 --- a/sound/soc/codecs/rt1316-sdw.c +++ b/sound/soc/codecs/rt1316-sdw.c @@ -313,6 +313,7 @@ static int rt1316_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt1316_sdw_priv *rt1316 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt1316->hw_init =3D false; @@ -325,7 +326,18 @@ static int rt1316_update_status(struct sdw_slave *slav= e, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt1316_io_init(&slave->dev, slave); + ret =3D rt1316_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "%s: I/O init failed: %d\n", __func__, ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt1316->regmap, false); + regcache_sync(rt1316->regmap); + } + + return ret; } =20 static int rt1316_classd_event(struct snd_soc_dapm_widget *w, @@ -505,6 +517,8 @@ static void rt1316_sdw_shutdown(struct snd_pcm_substrea= m *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT1316_PROBE_TIMEOUT 5000 + static int rt1316_sdw_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { @@ -534,6 +548,10 @@ static int rt1316_sdw_hw_params(struct snd_pcm_substre= am *substream, else port_config.num =3D 2; =20 + retval =3D sdw_slave_wait_for_initialization(rt1316->sdw_slave, RT1316_PR= OBE_TIMEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt1316->sdw_slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { @@ -742,13 +760,10 @@ static int rt1316_dev_suspend(struct device *dev) return 0; } =20 -#define RT1316_PROBE_TIMEOUT 5000 - static int rt1316_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt1316_sdw_priv *rt1316 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt1316->first_hw_init) return 0; @@ -756,14 +771,7 @@ static int rt1316_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT1316_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 30B5B201032; Thu, 26 Jun 2025 11:57:08 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939029; cv=none; b=jqi+CTHTG16JaWSPHnn8YCwKJIQO4x8WLnErX4jYb9Mh8sQvOhWr9KgIGSTkUT+QqqQf/8d3hOMwrDGLwRjy84ngYLO6YQd28oqmWvew1rJT0gnktHGjIBpxckQA8UpAqfgKiU/7s13gPCWrlq+mkFQIJnvKGIH/qpwVojRgsSI= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939029; c=relaxed/simple; bh=E9Rpvrr0CpHmEEwtw+RJAnsLHU+bYZ7CR7ZMtb4SiIQ=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=AOviUJGzYloofeQ4+6/tLbmrt8eUQuovKyy8YwaSo2lEHD80gIVyF9/ziwb3kUeT5KbH2Mee661JxiO1Qf59krH1nVLBpZpTTs45oVRCkqD3YVxWgsJStgLdegQLzKM5pr73h9bqFsnYO3IkzyEnP0gubqpNqJUpYwatt0uyiPg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=UOEJ7gu8; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="UOEJ7gu8" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939028; x=1782475028; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=E9Rpvrr0CpHmEEwtw+RJAnsLHU+bYZ7CR7ZMtb4SiIQ=; b=UOEJ7gu8TMxQhaESG74QiCsMioO2ERUqkIC2MEigsa90+EJyIs6EhC9m NIZaCIakan59M18LIdls01m6yiYsluO8mye6Q1bn/DqsRZmTVjqS4mVnQ 6+5WVPYTxNFjlA9QCUinebfy2RVMSsWzX1KSlN2/8rwpmmzTKTKRHIokX vXOMXe9igrZSU76C7BgrcpsBuCZj4/FIwqUmzFHutuVqDMXkJbdZSYb3s VVIe0Wm6nocvzjCqF16Tq2ReZh8kpzSUrY4ekrV9FgdZnnaNpGBV9awdL XOpCfs+CJJNkNG3sUAB8El22V8UhK8E09bILUo4+5pnHm/7/R4rROCrOJ w==; X-CSE-ConnectionGUID: KohYNJpSTI6PBf7z99hrVA== X-CSE-MsgGUID: 0LKpIb0jR/S1cCeUDfKXjg== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304586" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304586" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:08 -0700 X-CSE-ConnectionGUID: L65eif+nST+S/myfP52/TQ== X-CSE-MsgGUID: tSCIp5T9SCW5aRu6AOrPOA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800611" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:06 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 12/15] ASoC: rt1318: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:22 +0800 Message-ID: <20250626115625.536423-13-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt1318_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt1318-sdw.c | 30 ++++++++++++++++++++---------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/sound/soc/codecs/rt1318-sdw.c b/sound/soc/codecs/rt1318-sdw.c index 4eb636e0c9ed..6add687b5f6a 100644 --- a/sound/soc/codecs/rt1318-sdw.c +++ b/sound/soc/codecs/rt1318-sdw.c @@ -445,6 +445,7 @@ static int rt1318_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt1318_sdw_priv *rt1318 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt1318->hw_init =3D false; @@ -457,7 +458,18 @@ static int rt1318_update_status(struct sdw_slave *slav= e, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt1318_io_init(&slave->dev, slave); + ret =3D rt1318_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "%s: I/O init failed: %d\n", __func__, ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt1318->regmap, false); + regcache_sync(rt1318->regmap); + } + + return ret; } =20 static int rt1318_classd_event(struct snd_soc_dapm_widget *w, @@ -560,6 +572,8 @@ static void rt1318_sdw_shutdown(struct snd_pcm_substrea= m *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT1318_PROBE_TIMEOUT 5000 + static int rt1318_sdw_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { @@ -603,6 +617,10 @@ static int rt1318_sdw_hw_params(struct snd_pcm_substre= am *substream, port_config.ch_mask =3D ch_mask; port_config.num =3D port; =20 + retval =3D sdw_slave_wait_for_initialization(rt1318->sdw_slave, RT1318_PR= OBE_TIMEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt1318->sdw_slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { @@ -818,13 +836,10 @@ static int rt1318_dev_suspend(struct device *dev) return 0; } =20 -#define RT1318_PROBE_TIMEOUT 5000 - static int rt1318_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt1318_sdw_priv *rt1318 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt1318->first_hw_init) return 0; @@ -832,12 +847,7 @@ static int rt1318_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT1318_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8558427A907; Thu, 26 Jun 2025 11:57:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939032; cv=none; b=V2ikHhwlB2DeO5sDELC6/ohKbrSNLIJi7wGFJbQPG/DzjiApwSEJJFMrPWuSaB2eXIBYGr3UYEjpXuoU/4mv+TWTVg5zEitBW6kqf5QgLU8h8r9bTDmcNcmLbYE1+xjBmbJr6SvebWOxZ2H8VCX42a07KNwnq+Rg1Gm44fox6gc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939032; c=relaxed/simple; bh=nWcrZvoV1+svABIlRXMeL+tQfv2icpx7I30IN1cI5KA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I7cW1nMIMrp2g8e+oeF+wpv1Ph1SzLjoQNi/+t5bmmjNU8yheWr/I3Y8zjHy54cT4W/q4RJR/n0QN1Zfk45RTVHYyXM9P7gs3siVG6idysSjuaQl04NH/aj0b86kXe76D4qMBMJvp+GLc0ma/WOhKtVH/17kIxqFwnfVx7MYCK4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=EIvQjZha; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="EIvQjZha" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939030; x=1782475030; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=nWcrZvoV1+svABIlRXMeL+tQfv2icpx7I30IN1cI5KA=; b=EIvQjZhaybw7Dzpe6chgMb577N/bQauyTxoJmwVF8HNi+a/JreYa44ZE DfT3XTOUp6xeqtTMximOxwnr6GgBPeECL5I2b5sfBxXoOLZoVB2SM6WCX e+oVSG7UrVYkrIXW9FErAhNUS1P3oVyhmVuNcd/LLAq5D7FeeIkLB/mfC G24vOaal+eklFoKuqi+uUmJehp4ff3EqqaQPKTf9R91X5mazfo6zuiTzU wdtKPCI++7Yx3GZ0gSEWCKmnixh08865XWSZ8RK6bYff56yq7PB3biqXK bPZAPHwPAhOuLUsYcLaYW8n8f/8TcFipM6os/HXPiT0W2Faq7ytss9RL/ Q==; X-CSE-ConnectionGUID: NkUXZrbASSO3jSb1aSJWQQ== X-CSE-MsgGUID: 1BEAsESKRXCLuFLoe2544g== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304591" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304591" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:10 -0700 X-CSE-ConnectionGUID: PEQIN+hfTzS4lclNhwLS8w== X-CSE-MsgGUID: xBO0qHFMRbuxkXknOyZSMg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800616" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:08 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 13/15] ASoC: rt1308: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:23 +0800 Message-ID: <20250626115625.536423-14-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt1308_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt1308-sdw.c | 32 ++++++++++++++++++++------------ 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt1308-sdw.c b/sound/soc/codecs/rt1308-sdw.c index ea708068f0e8..3579189b49b6 100644 --- a/sound/soc/codecs/rt1308-sdw.c +++ b/sound/soc/codecs/rt1308-sdw.c @@ -303,6 +303,7 @@ static int rt1308_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt1308_sdw_priv *rt1308 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt1308->hw_init =3D false; @@ -315,7 +316,18 @@ static int rt1308_update_status(struct sdw_slave *slav= e, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt1308_io_init(&slave->dev, slave); + ret =3D rt1308_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt1308->regmap, false); + regcache_sync_region(rt1308->regmap, 0xc000, 0xcfff); + } + + return ret; } =20 static int rt1308_bus_config(struct sdw_slave *slave, @@ -526,6 +538,8 @@ static int rt1308_sdw_set_tdm_slot(struct snd_soc_dai *= dai, return 0; } =20 +#define RT1308_PROBE_TIMEOUT 5000 + static int rt1308_sdw_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { @@ -560,6 +574,10 @@ static int rt1308_sdw_hw_params(struct snd_pcm_substre= am *substream, port_config.ch_mask =3D rt1308->rx_mask; } =20 + retval =3D sdw_slave_wait_for_initialization(rt1308->sdw_slave, RT1308_PR= OBE_TIMEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt1308->sdw_slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { @@ -765,13 +783,10 @@ static int rt1308_dev_suspend(struct device *dev) return 0; } =20 -#define RT1308_PROBE_TIMEOUT 5000 - static int rt1308_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt1308_sdw_priv *rt1308 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt1308->first_hw_init) return 0; @@ -779,14 +794,7 @@ static int rt1308_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT1308_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "Initialization not complete, timed out\n"); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A16BF27B4E4; Thu, 26 Jun 2025 11:57:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939034; cv=none; b=NP7CRNonz2r9p2ZrBEWkIBxzEujvfHdkGmoLMcrf/o35rdvAykzvNX/iIdZjWVbwxO6bcioVNQ0+vUSDS5vflT8YqVJHODwyMOTBbEGKrDBaWlarQfMDshxLzi8972tAezaRHcRlXuxE89unYlBvWMXPxpRMWnxgUPjtU+cnRo4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939034; c=relaxed/simple; bh=leZ46mQPLqgNhxXzPhKOPF0xiVc/gRGHXsPgaRDY0Yg=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=agVC6xIf6vNUddJrLSyKKIVmFe1BoZZBZeraCfktKAurXRPEROHkSHdf5VB73euTl+nS/UYh6yYcTCKAFiWFk6yMQOmr9gVrZxkxdSzBKxmgjf2WipdtRCZdzNHkZ7Kvp4Sk4AqRZb+z+s3C4FtMBy8yTRfenFTx5U28C8TMs3c= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=fMQh6jOu; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="fMQh6jOu" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939033; x=1782475033; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=leZ46mQPLqgNhxXzPhKOPF0xiVc/gRGHXsPgaRDY0Yg=; b=fMQh6jOuQx2NaHnP58NCofMNWLMViy2WzCP9ZzOcGUbgEc3QacO7f7M/ 5WlXKN6UvGHdS7z5DpBbjLm6AtkXExNEj9eigLixwMAJ9xjlXGqzZuJZm cywWSRWIgM7dumabxiDh+cS6LMP+FHHqfV6pGF2ZwloxRJ9i/kAZaG9LN xevsLEUj5Na0fxNAahxvsA0HYKRQgMy5trNFEVFaay+YS/UGmUZ+g9hXG qr1fkzJqpfG8WYQTUiRCNQ3gWYxWXhbfD5olN8c6QF2/3DALreFLNMK/h re1Hhyo/Yx3+H3I2ED4ZQ7mTOv6/RQP5MZKIQEBLjXTXFqz5D0sVtl542 w==; X-CSE-ConnectionGUID: qTvtdnWgRaOjJkiFDh0TZQ== X-CSE-MsgGUID: Rhx3YRgSQVeZVk0W62c7qg== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304602" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304602" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:12 -0700 X-CSE-ConnectionGUID: 1E9prHQ2QwifEE0td92d4g== X-CSE-MsgGUID: gWkU89LGTfOojOdp5Qu8qA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800620" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:10 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 14/15] ASoC: rt5682: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:24 +0800 Message-ID: <20250626115625.536423-15-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt5682_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt5682-sdw.c | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/sound/soc/codecs/rt5682-sdw.c b/sound/soc/codecs/rt5682-sdw.c index aa229894129b..1c140691945f 100644 --- a/sound/soc/codecs/rt5682-sdw.c +++ b/sound/soc/codecs/rt5682-sdw.c @@ -129,6 +129,10 @@ static int rt5682_sdw_hw_params(struct snd_pcm_substre= am *substream, else port_config.num =3D 2; =20 + retval =3D sdw_slave_wait_for_initialization(rt5682->slave, RT5682_PROBE_= TIMEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt5682->slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { @@ -513,6 +517,7 @@ static int rt5682_update_status(struct sdw_slave *slave, enum sdw_slave_status status) { struct rt5682_priv *rt5682 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt5682->hw_init =3D false; @@ -525,7 +530,19 @@ static int rt5682_update_status(struct sdw_slave *slav= e, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt5682_io_init(&slave->dev, slave); + ret =3D rt5682_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init Failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt5682->sdw_regmap, false); + regcache_cache_only(rt5682->regmap, false); + regcache_sync(rt5682->regmap); + } + + return ret; } =20 static int rt5682_read_prop(struct sdw_slave *slave) @@ -757,7 +774,6 @@ static int rt5682_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt5682_priv *rt5682 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt5682->first_hw_init) return 0; @@ -772,14 +788,7 @@ static int rt5682_dev_resume(struct device *dev) goto regmap_sync; } =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT5682_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "%s: Initialization not complete, timed out\n", __f= unc__); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0 From nobody Wed Oct 8 16:06:07 2025 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.14]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3724E27A907; Thu, 26 Jun 2025 11:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.14 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939036; cv=none; b=dKL1TU/Sph+RJAdmSWCBNgLDkCGugeTJG/u04mW8o7eBFss1DFKgRask9QVApJb50vAyB4nidN7cenKsuRA/S4jgM9SEmOQspcEFPzdEw3F45ztXHo74k7yNX5h7vOClH7K6Xz7Trj9GC3v83GOBUUyZQH2495DHKeIn3CknVuM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1750939036; c=relaxed/simple; bh=0g7jBut0nG453ouvreWCxKiKGtz6IISQ1QPJOEG8E4w=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XykW4zmkFtiHhytnyipq1w2fE+yjjpK2HIkjOJmdWNhyoLfjnbSQqej18Y94SQfXkgX9luddMrZMfdRPdjPQolR83oRe7IIUEhkUQdUurA3cyG7xOFc8Vo5HXSeXTtPuHRCKb/GTZOcNvyVyLmcrcnWNQBkafpG0wdFp1CeSkxc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=none smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=Mm5CUn+4; arc=none smtp.client-ip=192.198.163.14 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=none smtp.mailfrom=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b="Mm5CUn+4" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1750939035; x=1782475035; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=0g7jBut0nG453ouvreWCxKiKGtz6IISQ1QPJOEG8E4w=; b=Mm5CUn+44LplNnHza7GeKZy21WQ7VyyPI0VnzPzIkKdId7aKYbU9wJwr tcDjNup7jOUE/vLN02RB6LREsKkm6JTXSWhGSONrRlSKjtXGkvf1aXiyp pE6IWiahXC+kmFWCZVs4EeVpBBd+rX/Aox9mC+e7V+ed3Mm12sPsWPZod 4z8oWR5jdO7l+bykNkyTMe9pHFEcK524zDw3emc2vfuR9u4Sv9hXpnOSO S0IPs1bNvnnEqL/tMRmI1gNVKM0065uqScOWabV3aN6l87o60j3NGuvOs 0LVA5iEWnkaFCZiUVyt0IfuvpceqrqmYEdZnR6Po4qZsspYJiKuttBlql Q==; X-CSE-ConnectionGUID: /o8XktcHStSF1ooMrtMZAw== X-CSE-MsgGUID: pAukafH9TfivmTN2RdOPog== X-IronPort-AV: E=McAfee;i="6800,10657,11475"; a="53304617" X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="53304617" Received: from fmviesa009.fm.intel.com ([10.60.135.149]) by fmvoesa108.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:15 -0700 X-CSE-ConnectionGUID: 87vwFAgURaiSTyTbdWGM0Q== X-CSE-MsgGUID: X9Mx4DxOSiyLCOtVoycZsA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.16,267,1744095600"; d="scan'208";a="152800626" Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa009-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 26 Jun 2025 04:57:13 -0700 From: Bard Liao To: broonie@kernel.org, tiwai@suse.de, linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, bard.liao@intel.com Subject: [PATCH 15/15] ASoC: rt1017: wait codec init in hw_params Date: Thu, 26 Jun 2025 19:56:25 +0800 Message-ID: <20250626115625.536423-16-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> References: <20250626115625.536423-1-yung-chuan.liao@linux.intel.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Move regmap sync to rt1017_sdca_update_status() when unattach_request is set, and only do regmap sync in resume when no reattach needed. And move waiting codec init to hw_params when the codec really need to be initialized. The change can shorten the resume time. Signed-off-by: Bard Liao Reviewed-by: Shuming Fan Reviewed-by: Charles Keepax --- sound/soc/codecs/rt1017-sdca-sdw.c | 32 +++++++++++++++++++----------- 1 file changed, 20 insertions(+), 12 deletions(-) diff --git a/sound/soc/codecs/rt1017-sdca-sdw.c b/sound/soc/codecs/rt1017-s= dca-sdw.c index 88fc23a4999f..bd9eb1854aa5 100644 --- a/sound/soc/codecs/rt1017-sdca-sdw.c +++ b/sound/soc/codecs/rt1017-sdca-sdw.c @@ -373,6 +373,7 @@ static int rt1017_sdca_update_status(struct sdw_slave *= slave, enum sdw_slave_status status) { struct rt1017_sdca_priv *rt1017 =3D dev_get_drvdata(&slave->dev); + int ret; =20 if (status =3D=3D SDW_SLAVE_UNATTACHED) rt1017->hw_init =3D false; @@ -385,7 +386,18 @@ static int rt1017_sdca_update_status(struct sdw_slave = *slave, return 0; =20 /* perform I/O transfers required for Slave initialization */ - return rt1017_sdca_io_init(&slave->dev, slave); + ret =3D rt1017_sdca_io_init(&slave->dev, slave); + if (ret < 0) { + dev_err(&slave->dev, "IO init failed: %d\n", ret); + return ret; + } + + if (slave->unattach_request) { + regcache_cache_only(rt1017->regmap, false); + regcache_sync(rt1017->regmap); + } + + return ret; } =20 static const char * const rt1017_rx_data_ch_select[] =3D { @@ -569,6 +581,8 @@ static void rt1017_sdca_shutdown(struct snd_pcm_substre= am *substream, snd_soc_dai_set_dma_data(dai, substream, NULL); } =20 +#define RT1017_PROBE_TIMEOUT 5000 + static int rt1017_sdca_pcm_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) @@ -616,6 +630,10 @@ static int rt1017_sdca_pcm_hw_params(struct snd_pcm_su= bstream *substream, params_rate(params), num_channels, snd_pcm_format_width(params_format(pa= rams)), direction, ch_mask, port); =20 + retval =3D sdw_slave_wait_for_initialization(rt1017->sdw_slave, RT1017_PR= OBE_TIMEOUT); + if (retval < 0) + return retval; + retval =3D sdw_stream_add_slave(rt1017->sdw_slave, &stream_config, &port_config, 1, sdw_stream); if (retval) { @@ -770,13 +788,10 @@ static int rt1017_sdca_dev_suspend(struct device *dev) return 0; } =20 -#define RT1017_PROBE_TIMEOUT 5000 - static int rt1017_sdca_dev_resume(struct device *dev) { struct sdw_slave *slave =3D dev_to_sdw_dev(dev); struct rt1017_sdca_priv *rt1017 =3D dev_get_drvdata(dev); - unsigned long time; =20 if (!rt1017->first_hw_init) return 0; @@ -784,14 +799,7 @@ static int rt1017_sdca_dev_resume(struct device *dev) if (!slave->unattach_request) goto regmap_sync; =20 - time =3D wait_for_completion_timeout(&slave->initialization_complete, - msecs_to_jiffies(RT1017_PROBE_TIMEOUT)); - if (!time) { - dev_err(&slave->dev, "Initialization not complete, timed out\n"); - sdw_show_ping_status(slave->bus, true); - - return -ETIMEDOUT; - } + return 0; =20 regmap_sync: slave->unattach_request =3D 0; --=20 2.43.0