From e09ca734c77cea998f5598e573c5ccf06b8f3bab Mon Sep 17 00:00:00 2001 From: Finley Xiao Date: Mon, 26 Jun 2023 10:49:03 +0800 Subject: [PATCH] soc: rockchip: opp_select: Add support to parse 'rockchip,pvtm-voltage-sel-hw' Signed-off-by: Finley Xiao Change-Id: I9d8ad8057f5fff32d5cd859b9d6ee71486c61160 --- drivers/soc/rockchip/rockchip_opp_select.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/soc/rockchip/rockchip_opp_select.c b/drivers/soc/rockchip/rockchip_opp_select.c index 3180b4b48bd5..0fcda11958a4 100644 --- a/drivers/soc/rockchip/rockchip_opp_select.c +++ b/drivers/soc/rockchip/rockchip_opp_select.c @@ -1176,12 +1176,13 @@ static int rockchip_get_pvtm(struct device *dev, struct device_node *np, } static void rockchip_of_get_pvtm_sel(struct device *dev, struct device_node *np, - const char *reg_name, int process, + const char *reg_name, int bin, int process, int *volt_sel, int *scale_sel) { struct property *prop = NULL; char name[NAME_MAX]; int pvtm, ret; + u32 hw = 0; if (of_property_read_bool(np, "rockchip,pvtm-pvtpll")) pvtm = rockchip_get_pvtm_pvtpll(dev, np, reg_name); @@ -1196,6 +1197,12 @@ static void rockchip_of_get_pvtm_sel(struct device *dev, struct device_node *np, snprintf(name, sizeof(name), "rockchip,p%d-pvtm-voltage-sel", process); prop = of_find_property(np, name, NULL); + } else if (bin >= 0) { + of_property_read_u32(np, "rockchip,pvtm-hw", &hw); + if (hw && (hw & BIT(bin))) { + sprintf(name, "rockchip,pvtm-voltage-sel-hw"); + prop = of_find_property(np, name, NULL); + } } if (!prop) sprintf(name, "rockchip,pvtm-voltage-sel"); @@ -1206,6 +1213,7 @@ static void rockchip_of_get_pvtm_sel(struct device *dev, struct device_node *np, next: if (!scale_sel) return; + prop = NULL; if (process >= 0) { snprintf(name, sizeof(name), "rockchip,p%d-pvtm-scaling-sel", process); @@ -1377,7 +1385,7 @@ static void rockchip_get_scale_volt_sel(struct device *dev, char *lkg_name, rockchip_of_get_lkg_sel(dev, np, lkg_name, info->process, &lkg_volt_sel, &lkg_scale); - rockchip_of_get_pvtm_sel(dev, np, reg_name, info->process, + rockchip_of_get_pvtm_sel(dev, np, reg_name, info->bin, info->process, &pvtm_volt_sel, &pvtm_scale); rockchip_of_get_bin_sel(dev, np, info->bin, &bin_scale); rockchip_of_get_bin_volt_sel(dev, np, info->bin, &bin_volt_sel);