Ver código fonte

Merge "asoc: wsa883x: release supplies when device probe error"

qctecmdr 4 anos atrás
pai
commit
c69fbb5b00
1 arquivos alterados com 9 adições e 2 exclusões
  1. 9 2
      asoc/codecs/wsa883x/wsa883x.c

+ 9 - 2
asoc/codecs/wsa883x/wsa883x.c

@@ -1607,7 +1607,7 @@ static int wsa883x_swr_probe(struct swr_device *pdev)
 					     "qcom,spkr-sd-n-node", 0);
 	if (!wsa883x->wsa_rst_np) {
 		dev_dbg(&pdev->dev, "%s: pinctrl not defined\n", __func__);
-		goto err;
+		goto err_supply;
 	}
 	swr_set_dev_data(pdev, wsa883x);
 	wsa883x->swr_slave = pdev;
@@ -1625,7 +1625,7 @@ static int wsa883x_swr_probe(struct swr_device *pdev)
 			"%s get devnum %d for dev addr %lx failed\n",
 			__func__, devnum, pdev->addr);
 		ret = -EPROBE_DEFER;
-		goto err;
+		goto err_supply;
 	}
 	pdev->dev_num = devnum;
 
@@ -1857,6 +1857,10 @@ dev_err:
 	if (pin_state_current == false)
 		wsa883x_gpio_ctrl(wsa883x, false);
 	swr_remove_device(pdev);
+err_supply:
+	msm_cdc_release_supplies(&pdev->dev, wsa883x->supplies,
+				 wsa883x->regulator,
+				 wsa883x->num_supplies);
 err:
 	swr_set_dev_data(pdev, NULL);
 	return ret;
@@ -1902,6 +1906,9 @@ static int wsa883x_swr_remove(struct swr_device *pdev)
 		kfree(wsa883x->driver->name);
 		kfree(wsa883x->driver);
 	}
+	msm_cdc_release_supplies(&pdev->dev, wsa883x->supplies,
+				 wsa883x->regulator,
+				 wsa883x->num_supplies);
 	swr_set_dev_data(pdev, NULL);
 	return 0;
 }