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>;
|
camss-vdd-supply = <&gdsc_camss_top>;
|
||||||
vdd-supply = <&gdsc_cpp>;
|
vdd-supply = <&gdsc_cpp>;
|
||||||
qcom,vdd-names = "smmu-vdd", "camss-vdd", "vdd";
|
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_mnoc_ahb_clk>,
|
||||||
<&clock_mmss clk_mmss_camss_ahb_clk>,
|
<&clock_mmss clk_mmss_camss_ahb_clk>,
|
||||||
<&clock_mmss clk_mmss_camss_top_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_ahb_clk>,
|
||||||
<&clock_mmss clk_mmss_camss_cpp_axi_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_camss_micro_ahb_clk>,
|
||||||
<&clock_mmss clk_mmss_bimc_smmu_axi_clk>,
|
<&clock_mmss clk_mmss_bimc_smmu_axi_clk>,
|
||||||
<&clock_mmss clk_mmss_camss_cpp_vbif_ahb_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",
|
"camss_ahb_clk", "camss_top_ahb_clk",
|
||||||
"cpp_core_clk", "camss_cpp_ahb_clk",
|
"cpp_core_clk", "camss_cpp_ahb_clk",
|
||||||
"camss_cpp_axi_clk", "camss_cpp_clk",
|
"camss_cpp_axi_clk", "micro_iface_clk",
|
||||||
"micro_iface_clk", "mmss_smmu_axi_clk",
|
"mmss_smmu_axi_clk", "cpp_vbif_ahb_clk";
|
||||||
"cpp_vbif_ahb_clk";
|
qcom,clock-rates = <0 0 0 0 0 200000000 0 0 0 0 0>;
|
||||||
qcom,clock-rates = <0 0 0 0 200000000 0 0 200000000 0 0 0>;
|
|
||||||
qcom,min-clock-rate = <200000000>;
|
qcom,min-clock-rate = <200000000>;
|
||||||
qcom,bus-master = <1>;
|
qcom,bus-master = <1>;
|
||||||
qcom,vbif-qos-setting = <0x20 0x10000000>,
|
qcom,vbif-qos-setting = <0x20 0x10000000>,
|
||||||
|
|
|
@ -25,6 +25,7 @@
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/workqueue.h>
|
#include <linux/workqueue.h>
|
||||||
|
#include <linux/clk/msm-clk.h>
|
||||||
#include <media/v4l2-event.h>
|
#include <media/v4l2-event.h>
|
||||||
#include <media/v4l2-ioctl.h>
|
#include <media/v4l2-ioctl.h>
|
||||||
#include <media/msmb_camera.h>
|
#include <media/msmb_camera.h>
|
||||||
|
@ -788,13 +789,6 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
uint32_t vbif_version;
|
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,
|
rc = msm_camera_regulator_enable(cpp_dev->cpp_vdd,
|
||||||
cpp_dev->num_reg, true);
|
cpp_dev->num_reg, true);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
@ -817,6 +811,13 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
|
||||||
goto clk_failed;
|
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) {
|
if (cpp_dev->state != CPP_STATE_BOOT) {
|
||||||
rc = msm_camera_register_irq(cpp_dev->pdev, cpp_dev->irq,
|
rc = msm_camera_register_irq(cpp_dev->pdev, cpp_dev->irq,
|
||||||
msm_cpp_irq, IRQF_TRIGGER_RISING, "cpp", cpp_dev);
|
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:
|
pwr_collapse_reset:
|
||||||
msm_cpp_update_gdscr_status(cpp_dev, false);
|
msm_cpp_update_gdscr_status(cpp_dev, false);
|
||||||
req_irq_fail:
|
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,
|
msm_camera_clk_enable(&cpp_dev->pdev->dev, cpp_dev->clk_info,
|
||||||
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
||||||
clk_failed:
|
clk_failed:
|
||||||
msm_camera_regulator_enable(cpp_dev->cpp_vdd,
|
msm_camera_regulator_enable(cpp_dev->cpp_vdd,
|
||||||
cpp_dev->num_reg, false);
|
cpp_dev->num_reg, false);
|
||||||
reg_enable_failed:
|
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;
|
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_delete_buff_queue(cpp_dev);
|
||||||
msm_cpp_update_gdscr_status(cpp_dev, false);
|
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,
|
msm_camera_clk_enable(&cpp_dev->pdev->dev, cpp_dev->clk_info,
|
||||||
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
cpp_dev->cpp_clk, cpp_dev->num_clks, false);
|
||||||
msm_camera_regulator_enable(cpp_dev->cpp_vdd, cpp_dev->num_reg, 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;
|
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)
|
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;
|
struct cpp_device *cpp_dev;
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
|
int i = 0;
|
||||||
CPP_DBG("E");
|
CPP_DBG("E");
|
||||||
|
|
||||||
cpp_dev = kzalloc(sizeof(struct cpp_device), GFP_KERNEL);
|
cpp_dev = kzalloc(sizeof(struct cpp_device), GFP_KERNEL);
|
||||||
|
@ -4000,6 +4002,21 @@ static int cpp_probe(struct platform_device *pdev)
|
||||||
goto mem_err;
|
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,
|
rc = msm_camera_get_regulator_info(pdev, &cpp_dev->cpp_vdd,
|
||||||
&cpp_dev->num_reg);
|
&cpp_dev->num_reg);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
|
|
Loading…
Add table
Reference in a new issue