Adding missing interrupt masks (parity, etc) and missing checks.
Clarify which masks are for which usage.

Signed-off-by: Bard Liao <yung-chuan.l...@linux.intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.boss...@linux.intel.com>
---
 drivers/soundwire/cadence_master.c | 29 +++++++++++++++++++++++++----
 1 file changed, 25 insertions(+), 4 deletions(-)

diff --git a/drivers/soundwire/cadence_master.c 
b/drivers/soundwire/cadence_master.c
index a1c5f05ef27b..5d9729b4d634 100644
--- a/drivers/soundwire/cadence_master.c
+++ b/drivers/soundwire/cadence_master.c
@@ -76,9 +76,12 @@
 #define CDNS_MCP_INT_DPINT                     BIT(11)
 #define CDNS_MCP_INT_CTRL_CLASH                        BIT(10)
 #define CDNS_MCP_INT_DATA_CLASH                        BIT(9)
+#define CDNS_MCP_INT_PARITY                    BIT(8)
 #define CDNS_MCP_INT_CMD_ERR                   BIT(7)
+#define CDNS_MCP_INT_RX_NE                     BIT(3)
 #define CDNS_MCP_INT_RX_WL                     BIT(2)
 #define CDNS_MCP_INT_TXE                       BIT(1)
+#define CDNS_MCP_INT_TXF                       BIT(0)
 
 #define CDNS_MCP_INTSET                                0x4C
 
@@ -669,6 +672,11 @@ irqreturn_t sdw_cdns_irq(int irq, void *dev_id)
                }
        }
 
+       if (int_status & CDNS_MCP_INT_PARITY) {
+               /* Parity error detected by Master */
+               dev_err_ratelimited(cdns->dev, "Parity error\n");
+       }
+
        if (int_status & CDNS_MCP_INT_CTRL_CLASH) {
                /* Slave is driving bit slot during control word */
                dev_err_ratelimited(cdns->dev, "Bus clash for control word\n");
@@ -736,10 +744,23 @@ static int _cdns_enable_interrupt(struct sdw_cdns *cdns)
        cdns_writel(cdns, CDNS_MCP_SLAVE_INTMASK1,
                    CDNS_MCP_SLAVE_INTMASK1_MASK);
 
-       mask = CDNS_MCP_INT_SLAVE_RSVD | CDNS_MCP_INT_SLAVE_ALERT |
-               CDNS_MCP_INT_SLAVE_ATTACH | CDNS_MCP_INT_SLAVE_NATTACH |
-               CDNS_MCP_INT_CTRL_CLASH | CDNS_MCP_INT_DATA_CLASH |
-               CDNS_MCP_INT_RX_WL | CDNS_MCP_INT_IRQ | CDNS_MCP_INT_DPINT;
+       /* enable detection of all slave state changes */
+       mask = CDNS_MCP_INT_SLAVE_MASK;
+
+       /* enable detection of bus issues */
+       mask |= CDNS_MCP_INT_CTRL_CLASH | CDNS_MCP_INT_DATA_CLASH |
+               CDNS_MCP_INT_PARITY;
+
+       /* no detection of port interrupts for now */
+
+       /* enable detection of RX fifo level */
+       mask |= CDNS_MCP_INT_RX_WL;
+
+       /*
+        * CDNS_MCP_INT_IRQ needs to be set otherwise all previous
+        * settings are irrelevant
+        */
+       mask |= CDNS_MCP_INT_IRQ;
 
        cdns_writel(cdns, CDNS_MCP_INTMASK, mask);
 
-- 
2.20.1

Reply via email to