]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
soundwire: cadence_master: clear interrupt status before enabling interrupt
authorRander Wang <rander.wang@intel.com>
Fri, 10 Jan 2020 21:57:27 +0000 (15:57 -0600)
committerVinod Koul <vkoul@kernel.org>
Tue, 14 Jan 2020 06:23:12 +0000 (11:53 +0530)
make sure all interrupts status are cleared before enabling interrupt
so that there is no unexpected interrupt triggered.

Signed-off-by: Rander Wang <rander.wang@intel.com>
Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://lore.kernel.org/r/20200110215731.30747-3-pierre-louis.bossart@linux.intel.com
Signed-off-by: Vinod Koul <vkoul@kernel.org>
drivers/soundwire/cadence_master.c

index a0ec21b64d4225cf9da1aae09f97d0334143b1cb..847b8f5f0a32eaae03e7c882853f183a4464629a 100644 (file)
@@ -856,6 +856,16 @@ int sdw_cdns_enable_interrupt(struct sdw_cdns *cdns, bool state)
                mask = interrupt_mask;
 
 update_masks:
+       /* clear slave interrupt status before enabling interrupt */
+       if (state) {
+               u32 slave_state;
+
+               slave_state = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT0);
+               cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT0, slave_state);
+               slave_state = cdns_readl(cdns, CDNS_MCP_SLAVE_INTSTAT1);
+               cdns_writel(cdns, CDNS_MCP_SLAVE_INTSTAT1, slave_state);
+       }
+
        cdns_writel(cdns, CDNS_MCP_SLAVE_INTMASK0, slave_intmask0);
        cdns_writel(cdns, CDNS_MCP_SLAVE_INTMASK1, slave_intmask1);
        cdns_writel(cdns, CDNS_MCP_INTMASK, mask);