video: driver: set force mem and pheripheral on flags
Set mvs0c clock flags (force mem and pheripheral on). Change-Id: I52380a30a4c74d9658f989377b5c77209cd8a33e Signed-off-by: Maheshwar Ajja <quic_majja@quicinc.com>
This commit is contained in:
@@ -434,6 +434,15 @@ static int __power_off_iris33_controller(struct msm_vidc_core *core)
|
|||||||
rc = call_res_op(core, reset_control_assert, core, "video_axi_reset");
|
rc = call_res_op(core, reset_control_assert, core, "video_axi_reset");
|
||||||
if (rc)
|
if (rc)
|
||||||
d_vpr_e("%s: assert video_axi_reset failed\n", __func__);
|
d_vpr_e("%s: assert video_axi_reset failed\n", __func__);
|
||||||
|
/* set retain mem and peripheral before asset mvs0c reset */
|
||||||
|
rc = call_res_op(core, clk_set_flag, core,
|
||||||
|
"video_cc_mvs0c_clk", CLKFLAG_RETAIN_MEM);
|
||||||
|
if (rc)
|
||||||
|
d_vpr_e("%s: set retain mem failed\n", __func__);
|
||||||
|
rc = call_res_op(core, clk_set_flag, core,
|
||||||
|
"video_cc_mvs0c_clk", CLKFLAG_RETAIN_PERIPH);
|
||||||
|
if (rc)
|
||||||
|
d_vpr_e("%s: set retain peripheral failed\n", __func__);
|
||||||
rc = call_res_op(core, reset_control_assert, core, "video_mvs0c_reset");
|
rc = call_res_op(core, reset_control_assert, core, "video_mvs0c_reset");
|
||||||
if (rc)
|
if (rc)
|
||||||
d_vpr_e("%s: assert video_mvs0c_reset failed\n", __func__);
|
d_vpr_e("%s: assert video_mvs0c_reset failed\n", __func__);
|
||||||
@@ -487,6 +496,16 @@ static int __power_off_iris33_controller(struct msm_vidc_core *core)
|
|||||||
if (rc)
|
if (rc)
|
||||||
return rc;
|
return rc;
|
||||||
|
|
||||||
|
/* remove retain mem and retain peripheral */
|
||||||
|
rc = call_res_op(core, clk_set_flag, core,
|
||||||
|
"video_cc_mvs0c_clk", CLKFLAG_NORETAIN_PERIPH);
|
||||||
|
if (rc)
|
||||||
|
d_vpr_e("%s: set noretain peripheral failed\n", __func__);
|
||||||
|
rc = call_res_op(core, clk_set_flag, core,
|
||||||
|
"video_cc_mvs0c_clk", CLKFLAG_NORETAIN_MEM);
|
||||||
|
if (rc)
|
||||||
|
d_vpr_e("%s: set noretain mem failed\n", __func__);
|
||||||
|
|
||||||
/* Turn off MVP MVS0C core clock */
|
/* Turn off MVP MVS0C core clock */
|
||||||
rc = call_res_op(core, clk_disable, core, "video_cc_mvs0c_clk");
|
rc = call_res_op(core, clk_disable, core, "video_cc_mvs0c_clk");
|
||||||
if (rc) {
|
if (rc) {
|
||||||
|
@@ -6,6 +6,8 @@
|
|||||||
#ifndef _MSM_VIDC_RESOURCES_H_
|
#ifndef _MSM_VIDC_RESOURCES_H_
|
||||||
#define _MSM_VIDC_RESOURCES_H_
|
#define _MSM_VIDC_RESOURCES_H_
|
||||||
|
|
||||||
|
#include <linux/clk/qcom.h>
|
||||||
|
|
||||||
struct icc_path;
|
struct icc_path;
|
||||||
struct regulator;
|
struct regulator;
|
||||||
struct clk;
|
struct clk;
|
||||||
@@ -223,6 +225,8 @@ struct msm_vidc_resources_ops {
|
|||||||
|
|
||||||
int (*clk_disable)(struct msm_vidc_core *core, const char *name);
|
int (*clk_disable)(struct msm_vidc_core *core, const char *name);
|
||||||
int (*clk_enable)(struct msm_vidc_core *core, const char *name);
|
int (*clk_enable)(struct msm_vidc_core *core, const char *name);
|
||||||
|
int (*clk_set_flag)(struct msm_vidc_core *core,
|
||||||
|
const char *name, enum branch_mem_flags flag);
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct msm_vidc_resources_ops *get_resources_ops(void);
|
const struct msm_vidc_resources_ops *get_resources_ops(void);
|
||||||
|
@@ -346,6 +346,28 @@ static int __init_clocks(struct msm_vidc_core *core)
|
|||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int __clock_set_flag(struct msm_vidc_core *core,
|
||||||
|
const char *name, enum branch_mem_flags flag)
|
||||||
|
{
|
||||||
|
struct clock_info *cinfo = NULL;
|
||||||
|
bool found = false;
|
||||||
|
|
||||||
|
/* get clock handle */
|
||||||
|
venus_hfi_for_each_clock(core, cinfo) {
|
||||||
|
if (strcmp(cinfo->name, name))
|
||||||
|
continue;
|
||||||
|
found = true;
|
||||||
|
qcom_clk_set_flags(cinfo->clk, flag);
|
||||||
|
d_vpr_h("%s: set flag %d on clock %s\n", __func__, flag, name);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (!found) {
|
||||||
|
d_vpr_e("%s: failed to find clock: %s\n", __func__, name);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int __init_reset_clocks(struct msm_vidc_core *core)
|
static int __init_reset_clocks(struct msm_vidc_core *core)
|
||||||
{
|
{
|
||||||
const struct clk_rst_table *rst_tbl;
|
const struct clk_rst_table *rst_tbl;
|
||||||
@@ -1437,6 +1459,7 @@ static const struct msm_vidc_resources_ops res_ops = {
|
|||||||
.set_clks = __set_clocks,
|
.set_clks = __set_clocks,
|
||||||
.clk_enable = __prepare_enable_clock,
|
.clk_enable = __prepare_enable_clock,
|
||||||
.clk_disable = __disable_unprepare_clock,
|
.clk_disable = __disable_unprepare_clock,
|
||||||
|
.clk_set_flag = __clock_set_flag,
|
||||||
};
|
};
|
||||||
|
|
||||||
const struct msm_vidc_resources_ops *get_resources_ops(void)
|
const struct msm_vidc_resources_ops *get_resources_ops(void)
|
||||||
|
Reference in New Issue
Block a user