soundwire: stream: fix disable sequence
When we disable the stream and then call hw_free, two bank switches will be handled and as a result we re-enable the stream on hw_free. Make sure the stream is disabled on both banks. TODO: we need to completely revisit all this and make sure we have a mirroring mechanism between current and alternate banks. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://lore.kernel.org/r/20190806005522.22642-9-pierre-louis.bossart@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
ce3304d8da
commit
e0279b6b55
|
@ -1637,7 +1637,24 @@ static int _sdw_disable_stream(struct sdw_stream_runtime *stream)
|
|||
}
|
||||
}
|
||||
|
||||
return do_bank_switch(stream);
|
||||
ret = do_bank_switch(stream);
|
||||
if (ret < 0) {
|
||||
dev_err(bus->dev, "Bank switch failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* make sure alternate bank (previous current) is also disabled */
|
||||
list_for_each_entry(m_rt, &stream->master_list, stream_node) {
|
||||
bus = m_rt->bus;
|
||||
/* Disable port(s) */
|
||||
ret = sdw_enable_disable_ports(m_rt, false);
|
||||
if (ret < 0) {
|
||||
dev_err(bus->dev, "Disable port(s) failed: %d\n", ret);
|
||||
return ret;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
Loading…
Reference in New Issue