Commit 84b68263 authored by Mark Brown's avatar Mark Brown Committed by Liam Girdwood

regulator: Add notifier event on regulator disable

The intended use case is for drivers which disable regulators to save
power but need to do some work to restore the hardware state when
restarting.  If the supplies are not actually disabled due to board
limits or sharing with other active devices this notifier allows the
driver to avoid unneeded reinitialisation, particularly when used with
runtime PM.
Signed-off-by: default avatarMark Brown <broonie@opensource.wolfsonmicro.com>
parent 6faa7e0a
...@@ -1341,6 +1341,9 @@ static int _regulator_disable(struct regulator_dev *rdev) ...@@ -1341,6 +1341,9 @@ static int _regulator_disable(struct regulator_dev *rdev)
__func__, rdev_get_name(rdev)); __func__, rdev_get_name(rdev));
return ret; return ret;
} }
_notifier_call_chain(rdev, REGULATOR_EVENT_DISABLE,
NULL);
} }
/* decrease our supplies ref count and disable if required */ /* decrease our supplies ref count and disable if required */
...@@ -1399,8 +1402,8 @@ static int _regulator_force_disable(struct regulator_dev *rdev) ...@@ -1399,8 +1402,8 @@ static int _regulator_force_disable(struct regulator_dev *rdev)
return ret; return ret;
} }
/* notify other consumers that power has been forced off */ /* notify other consumers that power has been forced off */
_notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE, _notifier_call_chain(rdev, REGULATOR_EVENT_FORCE_DISABLE |
NULL); REGULATOR_EVENT_DISABLE, NULL);
} }
/* decrease our supplies ref count and disable if required */ /* decrease our supplies ref count and disable if required */
......
...@@ -89,8 +89,9 @@ ...@@ -89,8 +89,9 @@
* REGULATION_OUT Regulator output is out of regulation. * REGULATION_OUT Regulator output is out of regulation.
* FAIL Regulator output has failed. * FAIL Regulator output has failed.
* OVER_TEMP Regulator over temp. * OVER_TEMP Regulator over temp.
* FORCE_DISABLE Regulator shut down by software. * FORCE_DISABLE Regulator forcibly shut down by software.
* VOLTAGE_CHANGE Regulator voltage changed. * VOLTAGE_CHANGE Regulator voltage changed.
* DISABLE Regulator was disabled.
* *
* NOTE: These events can be OR'ed together when passed into handler. * NOTE: These events can be OR'ed together when passed into handler.
*/ */
...@@ -102,6 +103,7 @@ ...@@ -102,6 +103,7 @@
#define REGULATOR_EVENT_OVER_TEMP 0x10 #define REGULATOR_EVENT_OVER_TEMP 0x10
#define REGULATOR_EVENT_FORCE_DISABLE 0x20 #define REGULATOR_EVENT_FORCE_DISABLE 0x20
#define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40 #define REGULATOR_EVENT_VOLTAGE_CHANGE 0x40
#define REGULATOR_EVENT_DISABLE 0x80
struct regulator; struct regulator;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment