mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2025-01-07 21:53:44 +00:00
soundwire: cadence: fix ACK/NAK handling
The existing code reports a NAK only when ACK=0
This is not aligned with the SoundWire 1.x specifications.
Table 32 in the SoundWire 1.2 specification shows that a Device shall
not set NAK=1 if ACK=1. But Table 33 shows the Combined Response
may very well be NAK=1/ACK=1, e.g. if another Device than the one
addressed reports a parity error.
NAK=1 signals a 'Command_Aborted', regardless of the ACK bit value.
Move the tests for NAK so that the NAK=1/ACK=1 combination is properly
detected according to the specification.
Fixes: 956baa1992
('soundwire: cdns: Add sdw_master_ops and IO transfer support')
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Link: https://lore.kernel.org/r/20210115053738.22630-5-yung-chuan.liao@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
ec47518742
commit
db9d9f944f
@ -484,10 +484,10 @@ cdns_fill_msg_resp(struct sdw_cdns *cdns,
|
||||
if (!(cdns->response_buf[i] & CDNS_MCP_RESP_ACK)) {
|
||||
no_ack = 1;
|
||||
dev_dbg_ratelimited(cdns->dev, "Msg Ack not received\n");
|
||||
if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) {
|
||||
nack = 1;
|
||||
dev_err_ratelimited(cdns->dev, "Msg NACK received\n");
|
||||
}
|
||||
}
|
||||
if (cdns->response_buf[i] & CDNS_MCP_RESP_NACK) {
|
||||
nack = 1;
|
||||
dev_err_ratelimited(cdns->dev, "Msg NACK received\n");
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user