soc: swr-mstr: Fix headset detect issue due to master.num_dev not updated
Headset is not detected sometimes due to master.num_dev not being updated when we call GET_ENUM_SLAVE_STATUS as get_logical address may not have been called. Also enable slave irq only when swr wokeup from clk stop and not when master is already up. This will prevent valid irq to be discarded as spurious irq. Change-Id: I00284e9340668c853d0bd604fe66801118982780 Signed-off-by: Vatsal Bucha <vbucha@codeaurora.org>
This commit is contained in:
@@ -2066,20 +2066,21 @@ handle_irq:
|
|||||||
case SWRM_INTERRUPT_STATUS_CLK_STOP_FINISHED:
|
case SWRM_INTERRUPT_STATUS_CLK_STOP_FINISHED:
|
||||||
break;
|
break;
|
||||||
case SWRM_INTERRUPT_STATUS_EXT_CLK_STOP_WAKEUP:
|
case SWRM_INTERRUPT_STATUS_EXT_CLK_STOP_WAKEUP:
|
||||||
if (swrm->state == SWR_MSTR_UP)
|
if (swrm->state == SWR_MSTR_UP) {
|
||||||
dev_dbg(swrm->dev,
|
dev_dbg(swrm->dev,
|
||||||
"%s:SWR Master is already up\n",
|
"%s:SWR Master is already up\n",
|
||||||
__func__);
|
__func__);
|
||||||
else
|
} else {
|
||||||
dev_err_ratelimited(swrm->dev,
|
dev_err_ratelimited(swrm->dev,
|
||||||
"%s: SWR wokeup during clock stop\n",
|
"%s: SWR wokeup during clock stop\n",
|
||||||
__func__);
|
__func__);
|
||||||
/* It might be possible the slave device gets reset
|
/* It might be possible the slave device gets
|
||||||
* and slave interrupt gets missed. So re-enable
|
* reset and slave interrupt gets missed. So
|
||||||
* Host IRQ and process slave pending
|
* re-enable Host IRQ and process slave pending
|
||||||
* interrupts, if any.
|
* interrupts, if any.
|
||||||
*/
|
*/
|
||||||
swrm_enable_slave_irq(swrm);
|
swrm_enable_slave_irq(swrm);
|
||||||
|
}
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
dev_err_ratelimited(swrm->dev,
|
dev_err_ratelimited(swrm->dev,
|
||||||
@@ -2574,6 +2575,8 @@ static int swrm_probe(struct platform_device *pdev)
|
|||||||
SWRM_NUM_AUTO_ENUM_SLAVES);
|
SWRM_NUM_AUTO_ENUM_SLAVES);
|
||||||
ret = -EINVAL;
|
ret = -EINVAL;
|
||||||
goto err_pdata_fail;
|
goto err_pdata_fail;
|
||||||
|
} else {
|
||||||
|
swrm->master.num_dev = swrm->num_dev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user