From nobody Sat Sep 26 13:47:36 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (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 677E93CC7DF; Tue, 1 Sep 2026 03:03:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231806; cv=none; b=ne69Pnlq00SjEFPX2Ao/LUWucrSPGFcIf3T8+j8LsSf/sXZyfDyu0dNt+wDXdDwFphGvWFohuqj/CSEoaxc8w8/jtpw4mWmwUpaUyzGtOn0qIpyqQgsSNmF1RK5ooENGhULHeLoGenWhxAjEuOvuBSLpr2/wQlqh+LLzGUdi560= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231806; c=relaxed/simple; bh=lcA4azdtDkBiYtp5q68WE6f8RBGHe7sSNIzdR9ZARRA=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=W8CyKXPZYdg/F6NQ5t+i7vS8HoQ8yrMl5gjgqY1PZRjT9rQRLCSbULw1kv3kJ6JcB6gVrM1vB/uuBL49p9sFEpn9eoo44NZteOliKxFcfwlm9f0SqtrjspVGKn7jIX+NrmjGu5AVK8HWz0GBhUjezf9gVtUOscHrjp3TKkBYNVM= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=aHIhIHeJ; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass 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="aHIhIHeJ" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1788231805; x=1819767805; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lcA4azdtDkBiYtp5q68WE6f8RBGHe7sSNIzdR9ZARRA=; b=aHIhIHeJxd0j0K1mfgqxW2qxEXXN4HJK1/kNssyeZTmHBWpOlfe+X4mB 1QdJWICP4lL2plbGPcDLN57oja3Q7TyKVWUK/fDy8Y5ZMd5e5R9x9WjQP IOeB45cLghHsty9EwmCUyrXiRkiHoC1ekWzFaE0YEXTLkB8sHsNZra/xk DveZcS7DG20UgxcgmLI6MHi6Wb/ndetL7TExfhXGJtKYijALeiBZlrXEX ppeR2EHXhbhC9XnmhOQtSW6vMXqh5HM9D7kpZsvoaesWzLNYBlFVx8HXM LG3aWx0KTO3gIV0fLxa7Pr0t7y3DoaMSxD0+WPT0viNx116EFaqcJGmjs Q==; X-CSE-ConnectionGUID: vs0WdDazQvyOULeEkNk/wg== X-CSE-MsgGUID: qehQvTAPSx2ICx1rEIhqcw== X-IronPort-AV: E=McAfee;i="6800,10657,11892"; a="87785637" X-IronPort-AV: E=Sophos;i="6.25,255,1779174000"; d="scan'208";a="87785637" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:24 -0700 X-CSE-ConnectionGUID: pQR2SnNaSiun+bk0kGpVdA== X-CSE-MsgGUID: IRYuRQtjSyeKT4R8RBxe4A== X-ExtLoop1: 1 Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:21 -0700 From: Bard Liao To: linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, peter.ujfalusi@linux.intel.com, bard.liao@intel.com Subject: [PATCH v2 1/3] soundwire: bus: add CLOCK_STOP_MODE1 support back Date: Tue, 1 Sep 2026 11:03:09 +0800 Message-ID: <20260901030311.232823-2-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901030311.232823-1-yung-chuan.liao@linux.intel.com> References: <20260901030311.232823-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable CLOCK_STOP_MODE1 is used when the Peripheral might have entered a deeper power-saving mode that does not retain state while the Clock is stopped. It is useful when the device is more power consumption sensitive. Add it back to allow the Peripheral use CLOCK_STOP_MODE1. Signed-off-by: Bard Liao Reviewed-by: P=C3=A9ter Ujfalusi Reviewed-by: Pierre-Louis Bossart --- drivers/soundwire/bus.c | 54 ++++++++++++++++++++++------------- include/linux/soundwire/sdw.h | 4 +++ 2 files changed, 38 insertions(+), 20 deletions(-) diff --git a/drivers/soundwire/bus.c b/drivers/soundwire/bus.c index 0c1cdd603926..4df7899988ad 100644 --- a/drivers/soundwire/bus.c +++ b/drivers/soundwire/bus.c @@ -959,8 +959,31 @@ static void sdw_modify_slave_status(struct sdw_slave *= slave, mutex_unlock(&bus->bus_lock); } =20 +static enum sdw_clk_stop_mode sdw_get_clk_stop_mode(struct sdw_slave *slav= e) +{ + enum sdw_clk_stop_mode mode; + + mode =3D slave->prop.clk_stop_mode1 ? SDW_CLK_STOP_MODE1 : SDW_CLK_STOP_M= ODE0; + + mutex_lock(&slave->sdw_dev_lock); + + /* + * Query for clock stop mode if Slave implements + * ops->get_clk_stop_mode, else read from property. + */ + if (slave->probed) { + struct sdw_driver *drv =3D drv_to_sdw_driver(slave->dev.driver); + + if (drv->ops && drv->ops->get_clk_stop_mode) + mode =3D drv->ops->get_clk_stop_mode(slave); + } + + mutex_unlock(&slave->sdw_dev_lock); + + return mode; +} + static int sdw_slave_clk_stop_callback(struct sdw_slave *slave, - enum sdw_clk_stop_mode mode, enum sdw_clk_stop_type type) { int ret =3D 0; @@ -972,7 +995,7 @@ static int sdw_slave_clk_stop_callback(struct sdw_slave= *slave, struct sdw_driver *drv =3D drv_to_sdw_driver(dev->driver); =20 if (drv->ops && drv->ops->clk_stop) - ret =3D drv->ops->clk_stop(slave, mode, type); + ret =3D drv->ops->clk_stop(slave, slave->clk_stop_mode, type); } =20 mutex_unlock(&slave->sdw_dev_lock); @@ -981,7 +1004,6 @@ static int sdw_slave_clk_stop_callback(struct sdw_slav= e *slave, } =20 static int sdw_slave_clk_stop_prepare(struct sdw_slave *slave, - enum sdw_clk_stop_mode mode, bool prepare) { bool wake_en; @@ -993,7 +1015,7 @@ static int sdw_slave_clk_stop_prepare(struct sdw_slave= *slave, if (prepare) { val =3D SDW_SCP_SYSTEMCTRL_CLK_STP_PREP; =20 - if (mode =3D=3D SDW_CLK_STOP_MODE1) + if (slave->clk_stop_mode =3D=3D SDW_CLK_STOP_MODE1) val |=3D SDW_SCP_SYSTEMCTRL_CLK_STP_MODE1; =20 if (wake_en) @@ -1081,9 +1103,9 @@ int sdw_bus_prep_clk_stop(struct sdw_bus *bus) /* Identify if Slave(s) are available on Bus */ is_slave =3D true; =20 - ret =3D sdw_slave_clk_stop_callback(slave, - SDW_CLK_STOP_MODE0, - SDW_CLK_PRE_PREPARE); + slave->clk_stop_mode =3D sdw_get_clk_stop_mode(slave); + + ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_PRE_PREPARE); if (ret < 0 && ret !=3D -ENODATA) { dev_err(&slave->dev, "clock stop pre-prepare cb failed:%d\n", ret); return ret; @@ -1093,9 +1115,7 @@ int sdw_bus_prep_clk_stop(struct sdw_bus *bus) if (!slave->prop.simple_clk_stop_capable) { simple_clk_stop =3D false; =20 - ret =3D sdw_slave_clk_stop_prepare(slave, - SDW_CLK_STOP_MODE0, - true); + ret =3D sdw_slave_clk_stop_prepare(slave, true); if (ret < 0 && ret !=3D -ENODATA) { dev_err(&slave->dev, "clock stop prepare failed:%d\n", ret); return ret; @@ -1133,9 +1153,7 @@ int sdw_bus_prep_clk_stop(struct sdw_bus *bus) slave->status !=3D SDW_SLAVE_ALERT) continue; =20 - ret =3D sdw_slave_clk_stop_callback(slave, - SDW_CLK_STOP_MODE0, - SDW_CLK_POST_PREPARE); + ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_POST_PREPARE); =20 if (ret < 0 && ret !=3D -ENODATA) { dev_err(&slave->dev, "clock stop post-prepare cb failed:%d\n", ret); @@ -1207,8 +1225,7 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus) /* Identify if Slave(s) are available on Bus */ is_slave =3D true; =20 - ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0, - SDW_CLK_PRE_DEPREPARE); + ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_PRE_DEPREPARE); if (ret < 0) dev_warn(&slave->dev, "clock stop pre-deprepare cb failed:%d\n", ret); =20 @@ -1216,9 +1233,7 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus) if (!slave->prop.simple_clk_stop_capable) { simple_clk_stop =3D false; =20 - ret =3D sdw_slave_clk_stop_prepare(slave, SDW_CLK_STOP_MODE0, - false); - + ret =3D sdw_slave_clk_stop_prepare(slave, false); if (ret < 0) dev_warn(&slave->dev, "clock stop deprepare failed:%d\n", ret); } @@ -1246,8 +1261,7 @@ int sdw_bus_exit_clk_stop(struct sdw_bus *bus) slave->status !=3D SDW_SLAVE_ALERT) continue; =20 - ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_STOP_MODE0, - SDW_CLK_POST_DEPREPARE); + ret =3D sdw_slave_clk_stop_callback(slave, SDW_CLK_POST_DEPREPARE); if (ret < 0) dev_warn(&slave->dev, "clock stop post-deprepare cb failed:%d\n", ret); } diff --git a/include/linux/soundwire/sdw.h b/include/linux/soundwire/sdw.h index 769a8ba5b5c6..2a497ef8d33c 100644 --- a/include/linux/soundwire/sdw.h +++ b/include/linux/soundwire/sdw.h @@ -618,6 +618,7 @@ struct sdw_bus_params { * @update_status: Update Slave status * @bus_config: Update the bus config for Slave * @port_prep: Prepare the port with parameters + * @get_clk_stop_mode: Get the clock stop mode of the Slave * @clk_stop: handle imp-def sequences before and after prepare and de-pre= pare */ struct sdw_slave_ops { @@ -631,6 +632,7 @@ struct sdw_slave_ops { int (*port_prep)(struct sdw_slave *slave, struct sdw_prepare_ch *prepare_ch, enum sdw_port_prep_ops pre_ops); + enum sdw_clk_stop_mode (*get_clk_stop_mode)(struct sdw_slave *slave); int (*clk_stop)(struct sdw_slave *slave, enum sdw_clk_stop_mode mode, enum sdw_clk_stop_type type); @@ -649,6 +651,7 @@ struct sdw_slave_ops { * @node: node for bus list * @port_ready: Port ready completion flag for each Slave port * @m_port_map: static Master port map for each Slave port + * @clk_stop_mode: The clock stop mode of the Slave * @dev_num: Current Device Number, values can be 0 or dev_num_sticky * @dev_num_sticky: one-time static Device Number assigned by Bus * @probed: boolean tracking driver state @@ -683,6 +686,7 @@ struct sdw_slave { struct list_head node; struct completion port_ready[SDW_MAX_PORTS]; unsigned int m_port_map[SDW_MAX_PORTS]; + enum sdw_clk_stop_mode clk_stop_mode; u16 dev_num; u16 dev_num_sticky; bool probed; --=20 2.43.0 From nobody Sat Sep 26 13:47:36 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (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 7D58D40097E; Tue, 1 Sep 2026 03:03:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231808; cv=none; b=hJKDTJHAy1f5T9LmMaA0Wdif9ihoMDdsRvZg9G5/Q2a/w4qVTwTQlDEDh0Rami9Qvg0zDk2/C6kQEliimgYTYqCfyeNkqTfyJZMFfpje3CCDVsgqMiynag/vkrrtypUdb7EFSLj5wMoiiwwKecTj/m7KffgnDGo+5vW4KusqN58= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231808; c=relaxed/simple; bh=GTmRIAn2P363Oep1gxLQSdSM1FNmlsGBpeM84HegzmI=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=oOm4IHD4uM8W3CLqD1TZrfVvQPtrM/trn1k+/eIC+1QfR1cF/DpRlwS2LWeEJPko4YK60a6OAMaPzAz650s1EMgBMYnFVITXXySYvVVKEpD+iVoeHigtUHEyJbGUFJHCUgK2yh0Cr6dSHsyEkmdAcxzbrjP2NNyTzjMS5cEC9BY= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=k+MQT804; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass 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="k+MQT804" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1788231807; x=1819767807; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=GTmRIAn2P363Oep1gxLQSdSM1FNmlsGBpeM84HegzmI=; b=k+MQT804gObqIwYpwjQyOjc8SGcjtuTx3N+FhkPzYT3abLmE+biml4H1 DSvS80NxSN6aCur9VX1XvpJ5J0Gg3Xme/DJvP7BCVC06QjLDthJzHLFoY uXo6/XatDAsqvpg6lQQ1zrd2gt27EUmosBHJelfUXfHOuBZtHf7HvlYlp /lymWtTII/Lg9aVdvTzhSsT5gG/kwJxIuj3ynMDehiMr53MtBk9Z03CRQ 7koKSKDiosabnergH5sES9EeMNT/wBODyH75Xw8SWko1NZjoYNzTS4J// evyfa7jgmf9OEL/61t9HsPHLSjDykUJjhyNN8z62HuvhYnh29yPqXf9gA g==; X-CSE-ConnectionGUID: JD+BPQg3SMexlsjB4PXksw== X-CSE-MsgGUID: PBJd4bgoQPCZcnGsO8dAnQ== X-IronPort-AV: E=McAfee;i="6800,10657,11892"; a="87785643" X-IronPort-AV: E=Sophos;i="6.25,255,1779174000"; d="scan'208";a="87785643" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:26 -0700 X-CSE-ConnectionGUID: NVWdQ38SQ8W7KYg0Ce346Q== X-CSE-MsgGUID: xDa8jGtHRoa0d3yXQ4+UxQ== X-ExtLoop1: 1 Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:24 -0700 From: Bard Liao To: linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, peter.ujfalusi@linux.intel.com, bard.liao@intel.com Subject: [PATCH v2 2/3] soundwire: Intel: add wake_enable parameter to stop_bus ops Date: Tue, 1 Sep 2026 11:03:10 +0800 Message-ID: <20260901030311.232823-3-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901030311.232823-1-yung-chuan.liao@linux.intel.com> References: <20260901030311.232823-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Currently, we assume the bus is wakeable when the bus clock stops. But in some case like system suspend, we want to stop the bus but keep the bus unwakeable. No function change in this commit. Signed-off-by: Bard Liao Reviewed-by: P=C3=A9ter Ujfalusi Reviewed-by: Pierre-Louis Bossart --- drivers/soundwire/intel.h | 6 +++--- drivers/soundwire/intel_auxdevice.c | 6 +++--- drivers/soundwire/intel_bus_common.c | 8 ++++---- include/linux/soundwire/sdw_intel.h | 2 +- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/drivers/soundwire/intel.h b/drivers/soundwire/intel.h index 86abc465260f..7a2e7e73ad63 100644 --- a/drivers/soundwire/intel.h +++ b/drivers/soundwire/intel.h @@ -188,10 +188,10 @@ static inline int sdw_intel_start_bus_after_clock_sto= p(struct sdw_intel *sdw) return -ENOTSUPP; } =20 -static inline int sdw_intel_stop_bus(struct sdw_intel *sdw, bool clock_sto= p) +static inline int sdw_intel_stop_bus(struct sdw_intel *sdw, bool clock_sto= p, bool wake_enable) { if (SDW_INTEL_CHECK_OPS(sdw, stop_bus)) - return SDW_INTEL_OPS(sdw, stop_bus)(sdw, clock_stop); + return SDW_INTEL_OPS(sdw, stop_bus)(sdw, clock_stop, wake_enable); return -ENOTSUPP; } =20 @@ -261,7 +261,7 @@ int intel_start_bus(struct sdw_intel *sdw); int intel_start_bus_after_reset(struct sdw_intel *sdw); void intel_check_clock_stop(struct sdw_intel *sdw); int intel_start_bus_after_clock_stop(struct sdw_intel *sdw); -int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop); +int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop, bool wake_enabl= e); =20 /* common bank switch routines */ int intel_pre_bank_switch(struct sdw_intel *sdw); diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_= auxdevice.c index a8407560bf4f..77e09e0e9953 100644 --- a/drivers/soundwire/intel_auxdevice.c +++ b/drivers/soundwire/intel_auxdevice.c @@ -670,7 +670,7 @@ static int __maybe_unused intel_suspend(struct device *= dev) return 0; } =20 - ret =3D sdw_intel_stop_bus(sdw, false); + ret =3D sdw_intel_stop_bus(sdw, false, false); if (ret < 0) { dev_err(dev, "%s: cannot stop bus: %d\n", __func__, ret); return ret; @@ -696,14 +696,14 @@ static int __maybe_unused intel_suspend_runtime(struc= t device *dev) clock_stop_quirks =3D sdw->link_res->clock_stop_quirks; =20 if (clock_stop_quirks & SDW_INTEL_CLK_STOP_TEARDOWN) { - ret =3D sdw_intel_stop_bus(sdw, false); + ret =3D sdw_intel_stop_bus(sdw, false, false); if (ret < 0) { dev_err(dev, "%s: cannot stop bus during teardown: %d\n", __func__, ret); return ret; } } else if (clock_stop_quirks & SDW_INTEL_CLK_STOP_BUS_RESET || !clock_sto= p_quirks) { - ret =3D sdw_intel_stop_bus(sdw, true); + ret =3D sdw_intel_stop_bus(sdw, true, true); if (ret < 0) { dev_err(dev, "%s: cannot stop bus during clock_stop: %d\n", __func__, ret); diff --git a/drivers/soundwire/intel_bus_common.c b/drivers/soundwire/intel= _bus_common.c index ad1f8ebdbfc9..fa35eb2fc763 100644 --- a/drivers/soundwire/intel_bus_common.c +++ b/drivers/soundwire/intel_bus_common.c @@ -202,11 +202,11 @@ int intel_start_bus_after_clock_stop(struct sdw_intel= *sdw) return 0; } =20 -int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop) +int intel_stop_bus(struct sdw_intel *sdw, bool clock_stop, bool wake_enabl= e) { struct device *dev =3D sdw->cdns.dev; struct sdw_cdns *cdns =3D &sdw->cdns; - bool wake_enable =3D false; + bool en =3D false; int ret; =20 cancel_delayed_work_sync(&cdns->attach_dwork); @@ -216,7 +216,7 @@ int intel_stop_bus(struct sdw_intel *sdw, bool clock_st= op) if (ret < 0) dev_err(dev, "%s: cannot stop clock: %d\n", __func__, ret); else - wake_enable =3D true; + en =3D wake_enable; } =20 ret =3D sdw_cdns_enable_interrupt(cdns, false); @@ -231,7 +231,7 @@ int intel_stop_bus(struct sdw_intel *sdw, bool clock_st= op) return ret; } =20 - sdw_intel_shim_wake(sdw, wake_enable); + sdw_intel_shim_wake(sdw, en); =20 return 0; } diff --git a/include/linux/soundwire/sdw_intel.h b/include/linux/soundwire/= sdw_intel.h index 9c9435009537..9710f2dc04e2 100644 --- a/include/linux/soundwire/sdw_intel.h +++ b/include/linux/soundwire/sdw_intel.h @@ -424,7 +424,7 @@ struct sdw_intel_hw_ops { int (*start_bus)(struct sdw_intel *sdw); int (*start_bus_after_reset)(struct sdw_intel *sdw); int (*start_bus_after_clock_stop)(struct sdw_intel *sdw); - int (*stop_bus)(struct sdw_intel *sdw, bool clock_stop); + int (*stop_bus)(struct sdw_intel *sdw, bool clock_stop, bool wake_enable); =20 int (*link_power_up)(struct sdw_intel *sdw); int (*link_power_down)(struct sdw_intel *sdw); --=20 2.43.0 From nobody Sat Sep 26 13:47:36 2026 Received: from mgamail.intel.com (mgamail.intel.com [192.198.163.18]) (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 8B5052D9484; Tue, 1 Sep 2026 03:03:28 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=192.198.163.18 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231809; cv=none; b=Q2wpKtb4IGeP/k3NjBRNwLJn+elskJmJkH6V705y01dlG33OufIkkJOjrfKqV1VzMSEzJTmwhkmZHQhROwIEuvlHN5OMA6B4jwOvwjQfM/T3ly7/ARnsWHgZNkOGqjg2cjJoExShOIXu1H4GIIrXSdA5XqLexfplwcW7RtA7YN4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1788231809; c=relaxed/simple; bh=7hOKgSc7OBhDCCtt1l/cMiHEQp/E4TG8CaEkZHnFT0o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=tAOmxWk4pwfEPgShQe7kQDBsXBzJv769NfF+WtSxZPnG941+zWTIB7EpPJUnp4dqt97dmYcCqYxqDdHJct8OdfVW8URXzlkDB+DYfUxfQ8dkyBsxRgkO6+tnTIQ0SsGnNEMIyMLq0lD9fm8iZ2iGL/Y6bZwN7tUtsdLZRBUjE58= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com; spf=pass smtp.mailfrom=linux.intel.com; dkim=pass (2048-bit key) header.d=intel.com header.i=@intel.com header.b=dbi9JQi9; arc=none smtp.client-ip=192.198.163.18 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.intel.com Authentication-Results: smtp.subspace.kernel.org; spf=pass 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="dbi9JQi9" DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1788231809; x=1819767809; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=7hOKgSc7OBhDCCtt1l/cMiHEQp/E4TG8CaEkZHnFT0o=; b=dbi9JQi9M4p0biZhJt6KH7zYGk8/drqGc0UlOLd4Ey6NtVOnbLv5jLOE PNnP0Fhaluyzk66AzuFamGOoXjIDF+o8x0f50zmgKyesaMIAgj3silXyb 39kvGrBj4DnvSnsLczNt+kmnZh07zghGUzD088Y5zL2rEMtPEo7lGUY4B VVuHsvAUZpcmByUrL5JrHjRuBMbHF7cO25ncKjSTU4EqYO1XoLZFpjjfk V6nriaEKDsPJy3z1G+19YiEqgAhLENzZCQJU/mvak2XUe1Ply6hCEl+vd a7CUWSJbbznEQBwBPWr/6Ad+pa2UR7oYSr4ycn6k8aemHXC6+4F8oT/2S w==; X-CSE-ConnectionGUID: pzkkX93ETBuS0llatlMZmg== X-CSE-MsgGUID: gft1zBfLQh+PGPlJIa6kEA== X-IronPort-AV: E=McAfee;i="6800,10657,11892"; a="87785649" X-IronPort-AV: E=Sophos;i="6.25,255,1779174000"; d="scan'208";a="87785649" Received: from fmviesa003.fm.intel.com ([10.60.135.143]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:28 -0700 X-CSE-ConnectionGUID: NIGc9hV2QOKoFHnM5CAxDg== X-CSE-MsgGUID: eUXr/QqhTzSeza3wLYTibA== X-ExtLoop1: 1 Received: from yungchua-desk.itwn.intel.com ([10.227.8.136]) by fmviesa003-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 31 Aug 2026 20:03:26 -0700 From: Bard Liao To: linux-sound@vger.kernel.org, vkoul@kernel.org Cc: vinod.koul@linaro.org, linux-kernel@vger.kernel.org, pierre-louis.bossart@linux.dev, peter.ujfalusi@linux.intel.com, bard.liao@intel.com Subject: [PATCH v2 3/3] soundwire: Intel: stop sdw clock in system suspend Date: Tue, 1 Sep 2026 11:03:11 +0800 Message-ID: <20260901030311.232823-4-yung-chuan.liao@linux.intel.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20260901030311.232823-1-yung-chuan.liao@linux.intel.com> References: <20260901030311.232823-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-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Perform clock stop with proper mode so that the Peripherals can enter the deserved power state. And keep the bus unwakeable because there is no need to wake up the bus in system suspend. Signed-off-by: Bard Liao Reviewed-by: P=C3=A9ter Ujfalusi Reviewed-by: Pierre-Louis Bossart --- drivers/soundwire/intel_auxdevice.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/drivers/soundwire/intel_auxdevice.c b/drivers/soundwire/intel_= auxdevice.c index 77e09e0e9953..dfff44a30c7c 100644 --- a/drivers/soundwire/intel_auxdevice.c +++ b/drivers/soundwire/intel_auxdevice.c @@ -670,7 +670,8 @@ static int __maybe_unused intel_suspend(struct device *= dev) return 0; } =20 - ret =3D sdw_intel_stop_bus(sdw, false, false); + /* Perform clock stop with proper mode and keep the bus unwakeable in sys= tem suspend. */ + ret =3D sdw_intel_stop_bus(sdw, true, false); if (ret < 0) { dev_err(dev, "%s: cannot stop bus: %d\n", __func__, ret); return ret; --=20 2.43.0