Commit fb956ef4 authored by Krzysztof Kozlowski's avatar Krzysztof Kozlowski Committed by Wen Zhiwei
Browse files

soundwire: stream: Revert "soundwire: stream: fix programming slave ports for...

soundwire: stream: Revert "soundwire: stream: fix programming slave ports for non-continous port maps"

stable inclusion
from stable-v6.6.52
commit 28425a10a4fa0499e3b2574b8741b8e1e4de57c2
category: bugfix
bugzilla: https://gitee.com/openeuler/kernel/issues/IAYXOD

Reference: https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/commit/?id=28425a10a4fa0499e3b2574b8741b8e1e4de57c2



--------------------------------

commit 233a95fd574fde1c375c486540a90304a2d2d49f upstream.

This reverts commit ab8d66d132bc8f1992d3eb6cab8d32dda6733c84 because it
breaks codecs using non-continuous masks in source and sink ports.  The
commit missed the point that port numbers are not used as indices for
iterating over prop.sink_ports or prop.source_ports.

Soundwire core and existing codecs expect that the array passed as
prop.sink_ports and prop.source_ports is continuous.  The port mask still
might be non-continuous, but that's unrelated.

Reported-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Closes: https://lore.kernel.org/all/b6c75eee-761d-44c8-8413-2a5b34ee2f98@linux.intel.com/


Fixes: ab8d66d132bc ("soundwire: stream: fix programming slave ports for non-continous port maps")
Acked-by: default avatarBard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: default avatarCharles Keepax <ckeepax@opensource.cirrus.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarKrzysztof Kozlowski <krzysztof.kozlowski@linaro.org>
Tested-by: default avatarPeter Ujfalusi <peter.ujfalusi@linux.intel.com>
Link: https://lore.kernel.org/r/20240909164746.136629-1-krzysztof.kozlowski@linaro.org


Signed-off-by: default avatarVinod Koul <vkoul@kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Signed-off-by: default avatarWen Zhiwei <wenzhiwei@kylinos.cn>
parent 1195ddd6
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -1286,18 +1286,18 @@ struct sdw_dpn_prop *sdw_get_slave_dpn_prop(struct sdw_slave *slave,
					    unsigned int port_num)
{
	struct sdw_dpn_prop *dpn_prop;
	unsigned long mask;
	u8 num_ports;
	int i;

	if (direction == SDW_DATA_DIR_TX) {
		mask = slave->prop.source_ports;
		num_ports = hweight32(slave->prop.source_ports);
		dpn_prop = slave->prop.src_dpn_prop;
	} else {
		mask = slave->prop.sink_ports;
		num_ports = hweight32(slave->prop.sink_ports);
		dpn_prop = slave->prop.sink_dpn_prop;
	}

	for_each_set_bit(i, &mask, 32) {
	for (i = 0; i < num_ports; i++) {
		if (dpn_prop[i].num == port_num)
			return &dpn_prop[i];
	}