Merge "msm: camera: cpp: Vote AHB with clock enabled and no mem retention"
This commit is contained in:
commit
0c50b41e40
2 changed files with 39 additions and 22 deletions
|
@ -373,24 +373,24 @@
|
|||
camss-vdd-supply = <&gdsc_camss_top>;
|
||||
vdd-supply = <&gdsc_cpp>;
|
||||
qcom,vdd-names = "smmu-vdd", "camss-vdd", "vdd";
|
||||
clocks = <&clock_mmss clk_mmss_mnoc_maxi_clk>,
|
||||
clocks = <&clock_gcc clk_mmssnoc_axi_clk>,
|
||||
<&clock_mmss clk_mmss_mnoc_maxi_clk>,
|
||||
<&clock_mmss clk_mmss_mnoc_ahb_clk>,
|
||||
<&clock_mmss clk_mmss_camss_ahb_clk>,
|
||||
<&clock_mmss clk_mmss_camss_top_ahb_clk>,
|
||||
<&clock_mmss clk_cpp_clk_src>,
|
||||
<&clock_mmss clk_mmss_camss_cpp_clk>,
|
||||
<&clock_mmss clk_mmss_camss_cpp_ahb_clk>,
|
||||
<&clock_mmss clk_mmss_camss_cpp_axi_clk>,
|
||||
<&clock_mmss clk_mmss_camss_cpp_clk>,
|
||||
<&clock_mmss clk_mmss_camss_micro_ahb_clk>,
|
||||
<&clock_mmss clk_mmss_bimc_smmu_axi_clk>,
|
||||
<&clock_mmss clk_mmss_camss_cpp_vbif_ahb_clk>;
|
||||
clock-names = "mnoc_maxi_clk", "mnoc_ahb_clk",
|
||||
clock-names = "mmssnoc_axi_clk",
|
||||
"mnoc_maxi_clk", "mnoc_ahb_clk",
|
||||
"camss_ahb_clk", "camss_top_ahb_clk",
|
||||
"cpp_core_clk", "camss_cpp_ahb_clk",
|
||||
"camss_cpp_axi_clk", "camss_cpp_clk",
|
||||
"micro_iface_clk", "mmss_smmu_axi_clk",
|
||||
"cpp_vbif_ahb_clk";
|
||||
qcom,clock-rates = <0 0 0 0 200000000 0 0 200000000 0 0 0>;
|
||||
"camss_cpp_axi_clk", "micro_iface_clk",
|
||||
"mmss_smmu_axi_clk", "cpp_vbif_ahb_clk";
|
||||
qcom,clock-rates = <0 0 0 0 0 200000000 0 0 0 0 0>;
|
||||
qcom,min-clock-rate = <200000000>;
|
||||
qcom,bus-master = <1>;
|
||||
qcom,vbif-qos-setting = <0x20 0x10000000>,
|
||||
|
|
|
@ -25,6 +25,7 @@
|
|||
#include <linux/timer.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/workqueue.h>
|
||||
#include <linux/clk/msm-clk.h>
|
||||
#include <media/v4l2-event.h>
|
||||
#include <media/v4l2-ioctl.h>
|
||||
#include <media/msmb_camera.h>
|
||||
|
@ -788,13 +789,6 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
|
|||
int rc = 0;
|
||||
uint32_t vbif_version;
|
||||
|
||||
rc = cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SVS_VOTE);
|
||||
if (rc < 0) {
|
||||
pr_err("%s: failed to vote for AHB\n", __func__);
|
||||
goto ahb_vote_fail;
|
||||
}
|
||||
|
||||
rc = msm_camera_regulator_enable(cpp_dev->cpp_vdd,
|
||||
cpp_dev->num_reg, true);
|
||||
if (rc < 0) {
|
||||
|
@ -817,6 +811,13 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
|
|||
goto clk_failed;
|
||||
}
|
||||
|
||||
rc = cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SVS_VOTE);
|
||||
if (rc < 0) {
|
||||
pr_err("%s: failed to vote for AHB\n", __func__);
|
||||
goto ahb_vote_fail;
|
||||
}
|
||||
|
||||
if (cpp_dev->state != CPP_STATE_BOOT) {
|
||||
rc = msm_camera_register_irq(cpp_dev->pdev, cpp_dev->irq,
|
||||
msm_cpp_irq, IRQF_TRIGGER_RISING, "cpp", cpp_dev);
|
||||
|
@ -880,16 +881,16 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
|
|||
pwr_collapse_reset:
|
||||
msm_cpp_update_gdscr_status(cpp_dev, false);
|
||||
req_irq_fail:
|
||||
if (cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SUSPEND_VOTE) < 0)
|
||||
pr_err("%s: failed to remove vote for AHB\n", __func__);
|
||||
ahb_vote_fail:
|
||||
msm_camera_clk_enable(&cpp_dev->pdev->dev, cpp_dev->clk_info,
|
||||
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
||||
clk_failed:
|
||||
msm_camera_regulator_enable(cpp_dev->cpp_vdd,
|
||||
cpp_dev->num_reg, false);
|
||||
reg_enable_failed:
|
||||
if (cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SUSPEND_VOTE) < 0)
|
||||
pr_err("%s: failed to remove vote for AHB\n", __func__);
|
||||
ahb_vote_fail:
|
||||
return rc;
|
||||
}
|
||||
|
||||
|
@ -903,6 +904,9 @@ static void cpp_release_hardware(struct cpp_device *cpp_dev)
|
|||
}
|
||||
msm_cpp_delete_buff_queue(cpp_dev);
|
||||
msm_cpp_update_gdscr_status(cpp_dev, false);
|
||||
if (cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SUSPEND_VOTE) < 0)
|
||||
pr_err("%s: failed to remove vote for AHB\n", __func__);
|
||||
msm_camera_clk_enable(&cpp_dev->pdev->dev, cpp_dev->clk_info,
|
||||
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
||||
msm_camera_regulator_enable(cpp_dev->cpp_vdd, cpp_dev->num_reg, false);
|
||||
|
@ -912,9 +916,6 @@ static void cpp_release_hardware(struct cpp_device *cpp_dev)
|
|||
}
|
||||
cpp_dev->stream_cnt = 0;
|
||||
|
||||
if (cam_config_ahb_clk(NULL, 0, CAM_AHB_CLIENT_CPP,
|
||||
CAM_AHB_SUSPEND_VOTE) < 0)
|
||||
pr_err("%s: failed to remove vote for AHB\n", __func__);
|
||||
}
|
||||
|
||||
static int32_t cpp_load_fw(struct cpp_device *cpp_dev, char *fw_name_bin)
|
||||
|
@ -3932,6 +3933,7 @@ static int cpp_probe(struct platform_device *pdev)
|
|||
{
|
||||
struct cpp_device *cpp_dev;
|
||||
int rc = 0;
|
||||
int i = 0;
|
||||
CPP_DBG("E");
|
||||
|
||||
cpp_dev = kzalloc(sizeof(struct cpp_device), GFP_KERNEL);
|
||||
|
@ -4000,6 +4002,21 @@ static int cpp_probe(struct platform_device *pdev)
|
|||
goto mem_err;
|
||||
}
|
||||
|
||||
/* set memcore and mem periphery logic flags to 0 */
|
||||
for (i = 0; i < cpp_dev->num_clks; i++) {
|
||||
if ((strcmp(cpp_dev->clk_info[i].clk_name,
|
||||
"cpp_core_clk") == 0) ||
|
||||
(strcmp(cpp_dev->clk_info[i].clk_name,
|
||||
"camss_cpp_axi_clk") == 0) ||
|
||||
(strcmp(cpp_dev->clk_info[i].clk_name,
|
||||
"micro_iface_clk") == 0)) {
|
||||
msm_camera_set_clk_flags(cpp_dev->cpp_clk[i],
|
||||
CLKFLAG_NORETAIN_MEM);
|
||||
msm_camera_set_clk_flags(cpp_dev->cpp_clk[i],
|
||||
CLKFLAG_NORETAIN_PERIPH);
|
||||
}
|
||||
}
|
||||
|
||||
rc = msm_camera_get_regulator_info(pdev, &cpp_dev->cpp_vdd,
|
||||
&cpp_dev->num_reg);
|
||||
if (rc < 0) {
|
||||
|
|
Loading…
Add table
Reference in a new issue