summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLiang Chen <cl@rock-chips.com>2018-01-08 17:35:17 +0800
committerTao Huang <huangtao@rock-chips.com>2018-01-09 09:28:53 +0800
commit225047ca4a61569efc8fbda4d8aa967553e2af91 (patch)
tree88e20585bb6b3f6f9cadf84d2365d3e55697aa6e
parent84a2162b284e28c9813912a27dc9c46dc1c62e55 (diff)
video: rockchip: vpu: auto select opp-table by leakage
Change-Id: I3937d7bd896cca9aedb80bac2a8eb8737c79e7fb Signed-off-by: Liang Chen <cl@rock-chips.com>
-rw-r--r--drivers/video/rockchip/vcodec/vcodec_service.c13
1 files changed, 13 insertions, 0 deletions
diff --git a/drivers/video/rockchip/vcodec/vcodec_service.c b/drivers/video/rockchip/vcodec/vcodec_service.c
index 6aa7b317b47c..45f8ca2b54c7 100644
--- a/drivers/video/rockchip/vcodec/vcodec_service.c
+++ b/drivers/video/rockchip/vcodec/vcodec_service.c
@@ -54,6 +54,7 @@
#include <linux/dma-buf.h>
#include <linux/rockchip-iovmm.h>
#include <video/rk_vpu_service.h>
+#include <soc/rockchip/rockchip_opp_select.h>
#include "vcodec_hw_info.h"
#include "vcodec_hw_vpu.h"
@@ -3271,6 +3272,9 @@ static int vcodec_probe(struct platform_device *pdev)
struct vpu_service_info *pservice = NULL;
struct vcodec_device_info *driver_data;
struct vpu_session *session = NULL;
+#define MAX_PROP_NAME_LEN 3
+ char name[MAX_PROP_NAME_LEN];
+ int lkg_volt_sel;
pservice = devm_kzalloc(dev, sizeof(struct vpu_service_info),
GFP_KERNEL);
@@ -3327,6 +3331,15 @@ static int vcodec_probe(struct platform_device *pdev)
goto err;
if (!IS_ERR(pservice->vdd_vcodec)) {
+ lkg_volt_sel = rockchip_of_get_lkg_volt_sel(dev,
+ "rkvdec_leakage");
+ if (lkg_volt_sel >= 0) {
+ snprintf(name, MAX_PROP_NAME_LEN, "L%d", lkg_volt_sel);
+ ret = dev_pm_opp_set_prop_name(dev, name);
+ if (ret)
+ dev_err(dev, "Failed to set prop name\n");
+ }
+
if (dev_pm_opp_of_add_table(dev)) {
dev_err(dev, "Invalid operating-points\n");
return -EINVAL;