Date: Fri, 21 May 2021 16:04:20 GMT From: Emmanuel Vadot <manu@FreeBSD.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-main@FreeBSD.org Subject: git: 115e71a45714 - main - arm: allwinner: aw_mmc: Check regulators status before enabling/disabling them Message-ID: <202105211604.14LG4Klp005200@gitrepo.freebsd.org>
next in thread | raw e-mail | index | archive | help
The branch main has been updated by manu: URL: https://cgit.FreeBSD.org/src/commit/?id=115e71a4571459e69001b5017ec19532e9d60e1b commit 115e71a4571459e69001b5017ec19532e9d60e1b Author: Emmanuel Vadot <manu@FreeBSD.org> AuthorDate: 2021-05-16 14:24:31 +0000 Commit: Emmanuel Vadot <manu@FreeBSD.org> CommitDate: 2021-05-21 15:39:47 +0000 arm: allwinner: aw_mmc: Check regulators status before enabling/disabling them Sponsored by: Diablotin Systems Differential Revision: https://reviews.freebsd.org/D30294 --- sys/arm/allwinner/aw_mmc.c | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/sys/arm/allwinner/aw_mmc.c b/sys/arm/allwinner/aw_mmc.c index f63b41f9b73c..0b3f19aea55f 100644 --- a/sys/arm/allwinner/aw_mmc.c +++ b/sys/arm/allwinner/aw_mmc.c @@ -1285,6 +1285,8 @@ aw_mmc_update_ios(device_t bus, device_t child) struct mmc_ios *ios; unsigned int clock; uint32_t reg, div = 1; + int reg_status; + int rv; sc = device_get_softc(bus); @@ -1310,10 +1312,16 @@ aw_mmc_update_ios(device_t bus, device_t child) if (__predict_false(aw_mmc_debug & AW_MMC_DEBUG_CARD)) device_printf(sc->aw_dev, "Powering down sd/mmc\n"); - if (sc->mmc_helper.vmmc_supply) - regulator_disable(sc->mmc_helper.vmmc_supply); - if (sc->mmc_helper.vqmmc_supply) - regulator_disable(sc->mmc_helper.vqmmc_supply); + if (sc->mmc_helper.vmmc_supply) { + rv = regulator_status(sc->mmc_helper.vmmc_supply, ®_status); + if (rv == 0 && reg_status == REGULATOR_STATUS_ENABLED) + regulator_disable(sc->mmc_helper.vmmc_supply); + } + if (sc->mmc_helper.vqmmc_supply) { + rv = regulator_status(sc->mmc_helper.vqmmc_supply, ®_status); + if (rv == 0 && reg_status == REGULATOR_STATUS_ENABLED) + regulator_disable(sc->mmc_helper.vqmmc_supply); + } aw_mmc_reset(sc); break; @@ -1321,10 +1329,16 @@ aw_mmc_update_ios(device_t bus, device_t child) if (__predict_false(aw_mmc_debug & AW_MMC_DEBUG_CARD)) device_printf(sc->aw_dev, "Powering up sd/mmc\n"); - if (sc->mmc_helper.vmmc_supply) - regulator_enable(sc->mmc_helper.vmmc_supply); - if (sc->mmc_helper.vqmmc_supply) - regulator_enable(sc->mmc_helper.vqmmc_supply); + if (sc->mmc_helper.vmmc_supply) { + rv = regulator_status(sc->mmc_helper.vmmc_supply, ®_status); + if (rv == 0 && reg_status != REGULATOR_STATUS_ENABLED) + regulator_enable(sc->mmc_helper.vmmc_supply); + } + if (sc->mmc_helper.vqmmc_supply) { + rv = regulator_status(sc->mmc_helper.vqmmc_supply, ®_status); + if (rv == 0 && reg_status != REGULATOR_STATUS_ENABLED) + regulator_enable(sc->mmc_helper.vqmmc_supply); + } aw_mmc_init(sc); break; };
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?202105211604.14LG4Klp005200>