mirror of
https://github.com/hardkernel/linux.git
synced 2026-06-07 19:30:30 +09:00
soc: rockchip: power-domain: support qos node status get
check if qos node is available for use. Change-Id: Ife40ee58664cd53a9705cda934b92d886ca35522 Signed-off-by: Elaine Zhang <zhangqing@rock-chips.com>
This commit is contained in:
@@ -511,6 +511,7 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
|
|||||||
const struct rockchip_domain_info *pd_info;
|
const struct rockchip_domain_info *pd_info;
|
||||||
struct rockchip_pm_domain *pd;
|
struct rockchip_pm_domain *pd;
|
||||||
struct device_node *qos_node;
|
struct device_node *qos_node;
|
||||||
|
int num_qos = 0, num_qos_reg = 0;
|
||||||
int i, j;
|
int i, j;
|
||||||
u32 id;
|
u32 id;
|
||||||
int error;
|
int error;
|
||||||
@@ -572,8 +573,14 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
|
|||||||
if (error)
|
if (error)
|
||||||
goto err_put_clocks;
|
goto err_put_clocks;
|
||||||
|
|
||||||
pd->num_qos = of_count_phandle_with_args(node, "pm_qos",
|
num_qos = of_count_phandle_with_args(node, "pm_qos", NULL);
|
||||||
NULL);
|
|
||||||
|
for (j = 0; j < num_qos; j++) {
|
||||||
|
qos_node = of_parse_phandle(node, "pm_qos", j);
|
||||||
|
if (qos_node && of_device_is_available(qos_node))
|
||||||
|
pd->num_qos++;
|
||||||
|
of_node_put(qos_node);
|
||||||
|
}
|
||||||
|
|
||||||
if (pd->num_qos > 0) {
|
if (pd->num_qos > 0) {
|
||||||
pd->qos_regmap = devm_kcalloc(pmu->dev, pd->num_qos,
|
pd->qos_regmap = devm_kcalloc(pmu->dev, pd->num_qos,
|
||||||
@@ -595,19 +602,25 @@ static int rockchip_pm_add_one_domain(struct rockchip_pmu *pmu,
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
for (j = 0; j < pd->num_qos; j++) {
|
for (j = 0; j < num_qos; j++) {
|
||||||
qos_node = of_parse_phandle(node, "pm_qos", j);
|
qos_node = of_parse_phandle(node, "pm_qos", j);
|
||||||
if (!qos_node) {
|
if (!qos_node) {
|
||||||
error = -ENODEV;
|
error = -ENODEV;
|
||||||
goto err_unprepare_clocks;
|
goto err_unprepare_clocks;
|
||||||
}
|
}
|
||||||
pd->qos_regmap[j] = syscon_node_to_regmap(qos_node);
|
if (of_device_is_available(qos_node)) {
|
||||||
if (IS_ERR(pd->qos_regmap[j])) {
|
pd->qos_regmap[num_qos_reg] =
|
||||||
error = -ENODEV;
|
syscon_node_to_regmap(qos_node);
|
||||||
of_node_put(qos_node);
|
if (IS_ERR(pd->qos_regmap[num_qos_reg])) {
|
||||||
goto err_unprepare_clocks;
|
error = -ENODEV;
|
||||||
|
of_node_put(qos_node);
|
||||||
|
goto err_unprepare_clocks;
|
||||||
|
}
|
||||||
|
num_qos_reg++;
|
||||||
}
|
}
|
||||||
of_node_put(qos_node);
|
of_node_put(qos_node);
|
||||||
|
if (num_qos_reg > pd->num_qos)
|
||||||
|
goto err_unprepare_clocks;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user