| From 0c713423edf8e06b1b765437ed9428c54059ddcf Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Sat, 16 Oct 2021 08:21:44 +0200 |
| Subject: mmc: mxs-mmc: disable regulator on error and in the remove function |
| |
| From: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| |
| [ Upstream commit ce5f6c2c9b0fcb4094f8e162cfd37fb4294204f7 ] |
| |
| The 'reg_vmmc' regulator is enabled in the probe. It is never disabled. |
| Neither in the error handling path of the probe nor in the remove |
| function. |
| |
| Register a devm_action to disable it when needed. |
| |
| Fixes: 4dc5a79f1350 ("mmc: mxs-mmc: enable regulator for mmc slot") |
| Signed-off-by: Christophe JAILLET <christophe.jaillet@wanadoo.fr> |
| Link: https://lore.kernel.org/r/4aadb3c97835f7b80f00819c3d549e6130384e67.1634365151.git.christophe.jaillet@wanadoo.fr |
| Signed-off-by: Ulf Hansson <ulf.hansson@linaro.org> |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| drivers/mmc/host/mxs-mmc.c | 10 ++++++++++ |
| 1 file changed, 10 insertions(+) |
| |
| diff --git a/drivers/mmc/host/mxs-mmc.c b/drivers/mmc/host/mxs-mmc.c |
| index 52054931c3507..3a90037254a4d 100644 |
| --- a/drivers/mmc/host/mxs-mmc.c |
| +++ b/drivers/mmc/host/mxs-mmc.c |
| @@ -565,6 +565,11 @@ static const struct of_device_id mxs_mmc_dt_ids[] = { |
| }; |
| MODULE_DEVICE_TABLE(of, mxs_mmc_dt_ids); |
| |
| +static void mxs_mmc_regulator_disable(void *regulator) |
| +{ |
| + regulator_disable(regulator); |
| +} |
| + |
| static int mxs_mmc_probe(struct platform_device *pdev) |
| { |
| const struct of_device_id *of_id = |
| @@ -606,6 +611,11 @@ static int mxs_mmc_probe(struct platform_device *pdev) |
| "Failed to enable vmmc regulator: %d\n", ret); |
| goto out_mmc_free; |
| } |
| + |
| + ret = devm_add_action_or_reset(&pdev->dev, mxs_mmc_regulator_disable, |
| + reg_vmmc); |
| + if (ret) |
| + goto out_mmc_free; |
| } |
| |
| ssp->clk = devm_clk_get(&pdev->dev, NULL); |
| -- |
| 2.33.0 |
| |