diff options
author | Emmanuel Vadot <manu@FreeBSD.org> | 2018-04-20 20:30:33 +0000 |
---|---|---|
committer | Emmanuel Vadot <manu@FreeBSD.org> | 2018-04-20 20:30:33 +0000 |
commit | bfeb2bd7cab178be6d098455e5c4b24dd3c00ee3 (patch) | |
tree | 31d3968b3b767dea87079a85448304eec7cf7ebd /sys/dev | |
parent | c712135a32a8b20ef47c35950b6b521358b455d8 (diff) | |
download | src-bfeb2bd7cab178be6d098455e5c4b24dd3c00ee3.tar.gz src-bfeb2bd7cab178be6d098455e5c4b24dd3c00ee3.zip |
regulator: Check status before disabling
When disabling regulator when they are unused, check before is they are
enabled.
While here don't check the enable_cnt on the regulator entry as it is
checked by regnode_stop.
This solve the panic on any board using a fixed regulator that is driven
by a gpio when the regulator is unused.
Tested On: OrangePi One
Pointy Hat to: myself
Reported by: kevans, Milan Obuch (freebsd-arm@dino.sk)
Notes
Notes:
svn path=/head/; revision=332843
Diffstat (limited to 'sys/dev')
-rw-r--r-- | sys/dev/extres/regulator/regulator.c | 8 |
1 files changed, 5 insertions, 3 deletions
diff --git a/sys/dev/extres/regulator/regulator.c b/sys/dev/extres/regulator/regulator.c index 535665fcd1ec..7cebf27aee6f 100644 --- a/sys/dev/extres/regulator/regulator.c +++ b/sys/dev/extres/regulator/regulator.c @@ -166,17 +166,19 @@ static void regulator_shutdown(void *dummy) { struct regnode *entry; + int status, ret; int disable = 1; REG_TOPO_SLOCK(); TUNABLE_INT_FETCH("hw.regulator.disable_unused", &disable); TAILQ_FOREACH(entry, ®node_list, reglist_link) { - if (entry->enable_cnt == 0 && - entry->std_param.always_on == 0 && disable) { + if (entry->std_param.always_on == 0 && disable) { if (bootverbose) printf("regulator: shuting down %s\n", entry->name); - regnode_stop(entry, 0); + ret = regnode_status(entry, &status); + if (ret == 0 && status == REGULATOR_STATUS_ENABLED) + regnode_stop(entry, 0); } } REG_TOPO_UNLOCK(); |