Lines Matching +full:powered +full:- +full:on
1 // SPDX-License-Identifier: GPL-2.0
8 #include <power-domain-uclass.h>
10 #include <asm/arch/power-domain.h>
11 #include <dm/device-internal.h>
37 struct udevice *dev = power_domain->dev; in imx8_power_domain_on()
46 /* Need to power on parent node first */ in imx8_power_domain_on()
57 debug("%s(power_domain=%s) resource_id %d\n", __func__, dev->name, in imx8_power_domain_on()
58 pdata->resource_id); in imx8_power_domain_on()
60 /* Already powered on */ in imx8_power_domain_on()
61 if (ppriv->state_on) in imx8_power_domain_on()
64 if (pdata->resource_id != SC_R_LAST) { in imx8_power_domain_on()
65 ret = sc_pm_set_resource_power_mode(-1, pdata->resource_id, in imx8_power_domain_on()
69 dev->name, ret); in imx8_power_domain_on()
70 return -EIO; in imx8_power_domain_on()
74 ppriv->state_on = true; in imx8_power_domain_on()
75 debug("%s is powered on\n", dev->name); in imx8_power_domain_on()
82 struct udevice *dev = power_domain->dev; in imx8_power_domain_off_node()
92 debug("%s, %s, state_on %d\n", __func__, dev->name, ppriv->state_on); in imx8_power_domain_off_node()
94 /* Already powered off */ in imx8_power_domain_off_node()
95 if (!ppriv->state_on) in imx8_power_domain_off_node()
105 if (child_ppriv->state_on) in imx8_power_domain_off_node()
106 return -EPERM; in imx8_power_domain_off_node()
110 if (pdata->resource_id != SC_R_LAST) { in imx8_power_domain_off_node()
111 if (!sc_rm_is_resource_owned(-1, pdata->resource_id)) { in imx8_power_domain_off_node()
112 printf("%s not owned by curr partition\n", dev->name); in imx8_power_domain_off_node()
115 ret = sc_pm_set_resource_power_mode(-1, pdata->resource_id, in imx8_power_domain_off_node()
119 dev->name, ret); in imx8_power_domain_off_node()
120 return -EIO; in imx8_power_domain_off_node()
124 ppriv->state_on = false; in imx8_power_domain_off_node()
125 debug("%s is powered off\n", dev->name); in imx8_power_domain_off_node()
132 struct udevice *dev = power_domain->dev; in imx8_power_domain_off_parentnodes()
146 debug("%s, %s, state_on %d\n", __func__, parent->name, in imx8_power_domain_off_parentnodes()
147 ppriv->state_on); in imx8_power_domain_off_parentnodes()
149 /* Already powered off */ in imx8_power_domain_off_parentnodes()
150 if (!ppriv->state_on) in imx8_power_domain_off_parentnodes()
162 /* Find a power on sibling */ in imx8_power_domain_off_parentnodes()
163 if (child_ppriv->state_on) { in imx8_power_domain_off_parentnodes()
165 child->name, in imx8_power_domain_off_parentnodes()
166 child_ppriv->state_on); in imx8_power_domain_off_parentnodes()
173 if (pdata->resource_id != SC_R_LAST) { in imx8_power_domain_off_parentnodes()
174 ret = sc_pm_set_resource_power_mode(-1, in imx8_power_domain_off_parentnodes()
175 pdata->resource_id, in imx8_power_domain_off_parentnodes()
179 parent->name, ret); in imx8_power_domain_off_parentnodes()
180 return -EIO; in imx8_power_domain_off_parentnodes()
184 ppriv->state_on = false; in imx8_power_domain_off_parentnodes()
185 debug("%s is powered off\n", parent->name); in imx8_power_domain_off_parentnodes()
204 power_domain->dev->name, ret); in imx8_power_domain_off()
212 power_domain->dev->name, ret); in imx8_power_domain_off()
238 for (offset = fdt_first_subnode(gd->fdt_blob, offset); offset > 0; in imx8_power_domain_bind()
239 offset = fdt_next_subnode(gd->fdt_blob, offset)) { in imx8_power_domain_bind()
241 name = fdt_get_name(gd->fdt_blob, offset, NULL); in imx8_power_domain_bind()
243 ret = device_bind_with_driver_data(dev, dev->driver, name, in imx8_power_domain_bind()
244 dev->driver_data, in imx8_power_domain_bind()
248 if (ret == -ENODEV) in imx8_power_domain_bind()
250 dev->driver->name); in imx8_power_domain_bind()
254 dev->driver->name, ret); in imx8_power_domain_bind()
264 debug("%s(dev=%s)\n", __func__, dev->name); in imx8_power_domain_probe()
270 ppriv->state_on = false; in imx8_power_domain_probe()
280 reg = fdtdec_get_int(gd->fdt_blob, dev_of_offset(dev), "reg", -1); in imx8_power_domain_ofdata_to_platdata()
281 if (reg == -1) { in imx8_power_domain_ofdata_to_platdata()
283 return -EINVAL; in imx8_power_domain_ofdata_to_platdata()
285 pdata->resource_id = (sc_rsrc_t)reg; in imx8_power_domain_ofdata_to_platdata()
287 debug("%s resource_id %d\n", __func__, pdata->resource_id); in imx8_power_domain_ofdata_to_platdata()
293 { .compatible = "nxp,imx8-pd" },
300 .on = imx8_power_domain_on,