summaryrefslogtreecommitdiff
path: root/drivers/power
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/power')
-rw-r--r--drivers/power/domain/power-domain-uclass.c40
-rw-r--r--drivers/power/domain/sandbox-power-domain-test.c1
-rw-r--r--drivers/power/regulator/scmi_regulator.c9
3 files changed, 12 insertions, 38 deletions
diff --git a/drivers/power/domain/power-domain-uclass.c b/drivers/power/domain/power-domain-uclass.c
index a6e5f9ed036..938bd8cbc9f 100644
--- a/drivers/power/domain/power-domain-uclass.c
+++ b/drivers/power/domain/power-domain-uclass.c
@@ -12,10 +12,6 @@
#include <power-domain-uclass.h>
#include <dm/device-internal.h>
-struct power_domain_priv {
- int on_count;
-};
-
static inline struct power_domain_ops *power_domain_dev_ops(struct udevice *dev)
{
return (struct power_domain_ops *)dev->driver->ops;
@@ -111,49 +107,22 @@ int power_domain_free(struct power_domain *power_domain)
return ops->rfree ? ops->rfree(power_domain) : 0;
}
-int power_domain_on_lowlevel(struct power_domain *power_domain)
+int power_domain_on(struct power_domain *power_domain)
{
- struct power_domain_priv *priv = dev_get_uclass_priv(power_domain->dev);
struct power_domain_ops *ops = power_domain_dev_ops(power_domain->dev);
- int ret;
debug("%s(power_domain=%p)\n", __func__, power_domain);
- if (priv->on_count++ > 0)
- return -EALREADY;
-
- ret = ops->on ? ops->on(power_domain) : 0;
- if (ret) {
- priv->on_count--;
- return ret;
- }
-
- return 0;
+ return ops->on ? ops->on(power_domain) : 0;
}
-int power_domain_off_lowlevel(struct power_domain *power_domain)
+int power_domain_off(struct power_domain *power_domain)
{
- struct power_domain_priv *priv = dev_get_uclass_priv(power_domain->dev);
struct power_domain_ops *ops = power_domain_dev_ops(power_domain->dev);
- int ret;
debug("%s(power_domain=%p)\n", __func__, power_domain);
- if (priv->on_count <= 0) {
- debug("Power domain %s already off.\n", power_domain->dev->name);
- return -EALREADY;
- }
-
- if (priv->on_count-- > 1)
- return -EBUSY;
-
- ret = ops->off ? ops->off(power_domain) : 0;
- if (ret) {
- priv->on_count++;
- return ret;
- }
-
- return 0;
+ return ops->off ? ops->off(power_domain) : 0;
}
#if CONFIG_IS_ENABLED(OF_REAL)
@@ -211,5 +180,4 @@ int dev_power_domain_off(struct udevice *dev)
UCLASS_DRIVER(power_domain) = {
.id = UCLASS_POWER_DOMAIN,
.name = "power_domain",
- .per_device_auto = sizeof(struct power_domain_priv),
};
diff --git a/drivers/power/domain/sandbox-power-domain-test.c b/drivers/power/domain/sandbox-power-domain-test.c
index 5b530974e94..08c15ef342b 100644
--- a/drivers/power/domain/sandbox-power-domain-test.c
+++ b/drivers/power/domain/sandbox-power-domain-test.c
@@ -51,5 +51,4 @@ U_BOOT_DRIVER(sandbox_power_domain_test) = {
.id = UCLASS_MISC,
.of_match = sandbox_power_domain_test_ids,
.priv_auto = sizeof(struct sandbox_power_domain_test),
- .flags = DM_FLAG_DEFAULT_PD_CTRL_OFF,
};
diff --git a/drivers/power/regulator/scmi_regulator.c b/drivers/power/regulator/scmi_regulator.c
index 99f6506f162..79db1a6a8aa 100644
--- a/drivers/power/regulator/scmi_regulator.c
+++ b/drivers/power/regulator/scmi_regulator.c
@@ -175,12 +175,19 @@ U_BOOT_DRIVER(scmi_regulator) = {
static int scmi_regulator_bind(struct udevice *dev)
{
struct driver *drv;
+ ofnode regul_node;
ofnode node;
int ret;
+ regul_node = ofnode_find_subnode(dev_ofnode(dev), "regulators");
+ if (!ofnode_valid(regul_node)) {
+ dev_err(dev, "no regulators node\n");
+ return -ENXIO;
+ }
+
drv = DM_DRIVER_GET(scmi_regulator);
- ofnode_for_each_subnode(node, dev_ofnode(dev)) {
+ ofnode_for_each_subnode(node, regul_node) {
ret = device_bind(dev, drv, ofnode_get_name(node),
NULL, node, NULL);
if (ret)