soc:soundwire: soundwire master updates
Set the number of auto enumeration slaves to six. Handle auto enumeration failed status. Change-Id: I322e228ccee57c87840b585ab40947a0afd1b554 Signed-off-by: Sudheer Papothi <spapothi@codeaurora.org>
这个提交包含在:

提交者
Gerrit - the friendly Code Review server

父节点
14f50ed4f2
当前提交
087a9f7661
@@ -53,6 +53,8 @@
|
||||
#define SWRM_COL_02 02
|
||||
#define SWRM_COL_16 16
|
||||
|
||||
#define SWRM_NUM_AUTO_ENUM_SLAVES 6
|
||||
|
||||
/* pm runtime auto suspend timer in msecs */
|
||||
static int auto_suspend_timer = SWR_AUTO_SUSPEND_DELAY * 1000;
|
||||
module_param(auto_suspend_timer, int, 0664);
|
||||
@@ -1749,6 +1751,7 @@ static irqreturn_t swr_mstr_interrupt_v2(int irq, void *dev)
|
||||
int ret = IRQ_HANDLED;
|
||||
struct swr_device *swr_dev;
|
||||
struct swr_master *mstr = &swrm->master;
|
||||
int retry = 5;
|
||||
|
||||
if (unlikely(swrm_lock_sleep(swrm) == false)) {
|
||||
dev_err(swrm->dev, "%s Failed to hold suspend\n", __func__);
|
||||
@@ -1902,6 +1905,17 @@ handle_irq:
|
||||
__func__);
|
||||
break;
|
||||
case SWRM_INTERRUPT_STATUS_AUTO_ENUM_FAILED_V2:
|
||||
swr_master_write(swrm, SWRM_ENUMERATOR_CFG_ADDR, 0);
|
||||
while (swr_master_read(swrm, SWRM_ENUMERATOR_STATUS)) {
|
||||
if (!retry) {
|
||||
dev_dbg(swrm->dev,
|
||||
"%s: ENUM status is not idle\n",
|
||||
__func__);
|
||||
break;
|
||||
}
|
||||
retry--;
|
||||
}
|
||||
swr_master_write(swrm, SWRM_ENUMERATOR_CFG_ADDR, 1);
|
||||
break;
|
||||
case SWRM_INTERRUPT_STATUS_AUTO_ENUM_TABLE_IS_FULL_V2:
|
||||
break;
|
||||
@@ -2401,9 +2415,10 @@ static int swrm_probe(struct platform_device *pdev)
|
||||
dev_dbg(&pdev->dev, "%s: Looking up %s property failed\n",
|
||||
__func__, "qcom,swr-num-dev");
|
||||
} else {
|
||||
if (swrm->num_dev > SWR_MAX_SLAVE_DEVICES) {
|
||||
if (swrm->num_dev > SWRM_NUM_AUTO_ENUM_SLAVES) {
|
||||
dev_err(&pdev->dev, "%s: num_dev %d > max limit %d\n",
|
||||
__func__, swrm->num_dev, SWR_MAX_SLAVE_DEVICES);
|
||||
__func__, swrm->num_dev,
|
||||
SWRM_NUM_AUTO_ENUM_SLAVES);
|
||||
ret = -EINVAL;
|
||||
goto err_pdata_fail;
|
||||
}
|
||||
@@ -2767,6 +2782,7 @@ static int swrm_runtime_resume(struct device *dev)
|
||||
}
|
||||
swr_master_write(swrm, SWRM_COMP_SW_RESET, 0x01);
|
||||
swr_master_write(swrm, SWRM_COMP_SW_RESET, 0x01);
|
||||
swr_master_write(swrm, SWRM_MCP_BUS_CTRL_ADDR, 0x01);
|
||||
swrm_master_init(swrm);
|
||||
/* wait for hw enumeration to complete */
|
||||
usleep_range(100, 105);
|
||||
|
@@ -137,6 +137,7 @@
|
||||
#define SWRM_ENUMERATOR_CFG_AUTO_ENUM_EN_BMSK 0x1
|
||||
#define SWRM_ENUMERATOR_CFG_AUTO_ENUM_EN_SHFT 0x0
|
||||
|
||||
#define SWRM_ENUMERATOR_STATUS (SWRM_BASE_ADDRESS+0x00000504)
|
||||
#define SWRM_ENUMERATOR_SLAVE_DEV_ID_1(m) (SWRM_BASE_ADDRESS+0x530+0x8*m)
|
||||
#define SWRM_ENUMERATOR_SLAVE_DEV_ID_2(m) (SWRM_BASE_ADDRESS+0x534+0x8*m)
|
||||
|
||||
|
在新工单中引用
屏蔽一个用户