mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-10-05 00:20:32 +00:00
soundwire: bus: use quirk to filter out invalid parity errors
If a Slave device reports with a quirk that its initial parity check may be incorrect, filter it but keep the parity checks active in steady state. Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Signed-off-by: Bard Liao <yung-chuan.liao@linux.intel.com> Reviewed-by: Kai Vehmanen <kai.vehmanen@linux.intel.com> Reviewed-by: Guennadi Liakhovetski <guennadi.liakhovetski@linux.intel.com> Link: https://lore.kernel.org/r/20200908134521.6781-5-yung-chuan.liao@linux.intel.com Signed-off-by: Vinod Koul <vkoul@kernel.org>
This commit is contained in:
parent
c2819e196b
commit
4724f12c13
2 changed files with 11 additions and 1 deletions
|
@ -1362,6 +1362,8 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
||||||
unsigned long port;
|
unsigned long port;
|
||||||
bool slave_notify = false;
|
bool slave_notify = false;
|
||||||
u8 buf, buf2[2], _buf, _buf2[2];
|
u8 buf, buf2[2], _buf, _buf2[2];
|
||||||
|
bool parity_check;
|
||||||
|
bool parity_quirk;
|
||||||
|
|
||||||
sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
|
sdw_modify_slave_status(slave, SDW_SLAVE_ALERT);
|
||||||
|
|
||||||
|
@ -1394,7 +1396,11 @@ static int sdw_handle_slave_alerts(struct sdw_slave *slave)
|
||||||
* interrupt
|
* interrupt
|
||||||
*/
|
*/
|
||||||
if (buf & SDW_SCP_INT1_PARITY) {
|
if (buf & SDW_SCP_INT1_PARITY) {
|
||||||
if (slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY)
|
parity_check = slave->prop.scp_int1_mask & SDW_SCP_INT1_PARITY;
|
||||||
|
parity_quirk = !slave->first_interrupt_done &&
|
||||||
|
(slave->prop.quirks & SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY);
|
||||||
|
|
||||||
|
if (parity_check && !parity_quirk)
|
||||||
dev_err(&slave->dev, "Parity error detected\n");
|
dev_err(&slave->dev, "Parity error detected\n");
|
||||||
clear |= SDW_SCP_INT1_PARITY;
|
clear |= SDW_SCP_INT1_PARITY;
|
||||||
}
|
}
|
||||||
|
|
|
@ -358,6 +358,7 @@ struct sdw_dpn_prop {
|
||||||
* @src_dpn_prop: Source Data Port N properties
|
* @src_dpn_prop: Source Data Port N properties
|
||||||
* @sink_dpn_prop: Sink Data Port N properties
|
* @sink_dpn_prop: Sink Data Port N properties
|
||||||
* @scp_int1_mask: SCP_INT1_MASK desired settings
|
* @scp_int1_mask: SCP_INT1_MASK desired settings
|
||||||
|
* @quirks: bitmask identifying deltas from the MIPI specification
|
||||||
*/
|
*/
|
||||||
struct sdw_slave_prop {
|
struct sdw_slave_prop {
|
||||||
u32 mipi_revision;
|
u32 mipi_revision;
|
||||||
|
@ -380,8 +381,11 @@ struct sdw_slave_prop {
|
||||||
struct sdw_dpn_prop *src_dpn_prop;
|
struct sdw_dpn_prop *src_dpn_prop;
|
||||||
struct sdw_dpn_prop *sink_dpn_prop;
|
struct sdw_dpn_prop *sink_dpn_prop;
|
||||||
u8 scp_int1_mask;
|
u8 scp_int1_mask;
|
||||||
|
u32 quirks;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#define SDW_SLAVE_QUIRKS_INVALID_INITIAL_PARITY BIT(0)
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* struct sdw_master_prop - Master properties
|
* struct sdw_master_prop - Master properties
|
||||||
* @revision: MIPI spec version of the implementation
|
* @revision: MIPI spec version of the implementation
|
||||||
|
|
Loading…
Reference in a new issue