Loading soc/swr-mstr-ctrl.c +11 −9 Original line number Diff line number Diff line Loading @@ -1744,6 +1744,7 @@ static void swrm_enable_slave_irq(struct swr_mstr_ctrl *swrm) { int i; int status = 0; u32 temp; status = swr_master_read(swrm, SWRM_MCP_SLV_STATUS); if (!status) { Loading @@ -1754,6 +1755,8 @@ static void swrm_enable_slave_irq(struct swr_mstr_ctrl *swrm) dev_dbg(swrm->dev, "%s: slave status: 0x%x\n", __func__, status); for (i = 0; i < (swrm->master.num_dev + 1); i++) { if (status & SWRM_MCP_SLV_STATUS_MASK) { swrm_cmd_fifo_rd_cmd(swrm, &temp, i, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1, 1); swrm_cmd_fifo_wr_cmd(swrm, 0xFF, i, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, i, 0x0, Loading Loading @@ -2069,10 +2072,7 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) * as hw will mask host_irq at slave * but will not unmask it afterwards. */ swrm_cmd_fifo_wr_cmd(swrm, 0xFF, devnum, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, devnum, 0x0, SWRS_SCP_INT_STATUS_MASK_1); swrm->enable_slave_irq = true; } break; case SWR_ATTACHED_OK: Loading @@ -2080,11 +2080,7 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) "%s: device %d got attached\n", __func__, devnum); /* enable host irq from slave device*/ swrm_cmd_fifo_wr_cmd(swrm, 0xFF, devnum, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, devnum, 0x0, SWRS_SCP_INT_STATUS_MASK_1); swrm->enable_slave_irq = true; break; case SWR_ALERT: dev_dbg(swrm->dev, Loading Loading @@ -2187,6 +2183,12 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) swr_master_write(swrm, SWRM_INTERRUPT_CLEAR, intr_sts); swr_master_write(swrm, SWRM_INTERRUPT_CLEAR, 0x0); if (swrm->enable_slave_irq) { /* Enable slave irq here */ swrm_enable_slave_irq(swrm); swrm->enable_slave_irq = false; } intr_sts = swr_master_read(swrm, SWRM_INTERRUPT_STATUS); intr_sts_masked = intr_sts & swrm->intr_mask; Loading soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -184,6 +184,7 @@ struct swr_mstr_ctrl { u32 disable_div2_clk_switch; u32 rd_fifo_depth; u32 wr_fifo_depth; bool enable_slave_irq; #ifdef CONFIG_DEBUG_FS struct dentry *debugfs_swrm_dent; struct dentry *debugfs_peek; Loading Loading
soc/swr-mstr-ctrl.c +11 −9 Original line number Diff line number Diff line Loading @@ -1744,6 +1744,7 @@ static void swrm_enable_slave_irq(struct swr_mstr_ctrl *swrm) { int i; int status = 0; u32 temp; status = swr_master_read(swrm, SWRM_MCP_SLV_STATUS); if (!status) { Loading @@ -1754,6 +1755,8 @@ static void swrm_enable_slave_irq(struct swr_mstr_ctrl *swrm) dev_dbg(swrm->dev, "%s: slave status: 0x%x\n", __func__, status); for (i = 0; i < (swrm->master.num_dev + 1); i++) { if (status & SWRM_MCP_SLV_STATUS_MASK) { swrm_cmd_fifo_rd_cmd(swrm, &temp, i, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1, 1); swrm_cmd_fifo_wr_cmd(swrm, 0xFF, i, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, i, 0x0, Loading Loading @@ -2069,10 +2072,7 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) * as hw will mask host_irq at slave * but will not unmask it afterwards. */ swrm_cmd_fifo_wr_cmd(swrm, 0xFF, devnum, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, devnum, 0x0, SWRS_SCP_INT_STATUS_MASK_1); swrm->enable_slave_irq = true; } break; case SWR_ATTACHED_OK: Loading @@ -2080,11 +2080,7 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) "%s: device %d got attached\n", __func__, devnum); /* enable host irq from slave device*/ swrm_cmd_fifo_wr_cmd(swrm, 0xFF, devnum, 0x0, SWRS_SCP_INT_STATUS_CLEAR_1); swrm_cmd_fifo_wr_cmd(swrm, 0x4, devnum, 0x0, SWRS_SCP_INT_STATUS_MASK_1); swrm->enable_slave_irq = true; break; case SWR_ALERT: dev_dbg(swrm->dev, Loading Loading @@ -2187,6 +2183,12 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev) swr_master_write(swrm, SWRM_INTERRUPT_CLEAR, intr_sts); swr_master_write(swrm, SWRM_INTERRUPT_CLEAR, 0x0); if (swrm->enable_slave_irq) { /* Enable slave irq here */ swrm_enable_slave_irq(swrm); swrm->enable_slave_irq = false; } intr_sts = swr_master_read(swrm, SWRM_INTERRUPT_STATUS); intr_sts_masked = intr_sts & swrm->intr_mask; Loading
soc/swr-mstr-ctrl.h +1 −0 Original line number Diff line number Diff line Loading @@ -184,6 +184,7 @@ struct swr_mstr_ctrl { u32 disable_div2_clk_switch; u32 rd_fifo_depth; u32 wr_fifo_depth; bool enable_slave_irq; #ifdef CONFIG_DEBUG_FS struct dentry *debugfs_swrm_dent; struct dentry *debugfs_peek; Loading