diff --git a/soc/swr-mstr-ctrl.c b/soc/swr-mstr-ctrl.c index 6838158115..2c689252c7 100644 --- a/soc/swr-mstr-ctrl.c +++ b/soc/swr-mstr-ctrl.c @@ -2927,14 +2927,16 @@ static int swrm_probe(struct platform_device *pdev) if (ret) { dev_err(&pdev->dev, "%s: Looking up %s property failed\n", __func__, "qcom,swr-num-dev"); - goto err_pdata_fail; + mutex_unlock(&swrm->mlock); + goto err_parse_num_dev; } else { if (swrm->num_dev > swrm->num_auto_enum) { dev_err(&pdev->dev, "%s: num_dev %d > max limit %d\n", __func__, swrm->num_dev, swrm->num_auto_enum); ret = -EINVAL; - goto err_pdata_fail; + mutex_unlock(&swrm->mlock); + goto err_parse_num_dev; } else { dev_dbg(&pdev->dev, "max swr devices expected to attach - %d, supported auto_enum - %d\n", @@ -2994,6 +2996,7 @@ static int swrm_probe(struct platform_device *pdev) return 0; err_irq_wakeup_fail: device_init_wakeup(swrm->dev, false); +err_parse_num_dev: err_mstr_init_fail: swr_unregister_master(&swrm->master); err_mstr_fail: