Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2490e977 authored by Linux Build Service Account's avatar Linux Build Service Account Committed by Gerrit - the friendly Code Review server
Browse files

Merge "msm: camera2: cpp: Reset MICRO block before clock enable"

parents 8e223209 ddfb16da
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -328,6 +328,7 @@ static struct branch_clk oxilicx_axi_clk;
#define CAMSS_VFE_VFE_AXI_CBCR                             (0x36BC)
#define CAMSS_CSI_VFE0_BCR                                 (0x3700)
#define CAMSS_CSI_VFE0_CBCR                                (0x3704)
#define CAMSS_MICRO_BCR                                    (0x3490)
#define OXILI_GFX3D_CBCR                                   (0x4028)
#define OXILICX_BCR                                        (0x4030)
#define OXILICX_AXI_CBCR                                   (0x4038)
@@ -2303,6 +2304,7 @@ static struct branch_clk camss_mclk1_clk = {
static struct branch_clk camss_micro_ahb_clk = {
	.cbcr_reg = CAMSS_MICRO_AHB_CBCR,
	.has_sibling = 1,
	.bcr_reg = CAMSS_MICRO_BCR,
	.base = &virt_bases[MMSS_BASE],
	.c = {
		.dbg_name = "camss_micro_ahb_clk",
+1 −0
Original line number Diff line number Diff line
@@ -3828,6 +3828,7 @@ static struct branch_clk camss_mclk3_clk = {
static struct branch_clk camss_micro_ahb_clk = {
	.cbcr_reg = CAMSS_MICRO_AHB_CBCR,
	.has_sibling = 1,
	.bcr_reg = CAMSS_MICRO_BCR,
	.base = &virt_bases[MMSS_BASE],
	.c = {
		.dbg_name = "camss_micro_ahb_clk",
+34 −0
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@
#include <linux/timer.h>
#include <linux/kernel.h>
#include <linux/workqueue.h>
#include <mach/clk.h>
#include <mach/iommu_domains.h>
#include <mach/iommu.h>
#include <mach/vreg.h>
@@ -48,6 +49,7 @@
#define CONFIG_MSM_CPP_DBG 0

#define CPP_CMD_TIMEOUT_MS 300
#define MSM_MICRO_IFACE_CLK_IDX 7

#define MSM_CPP_NOMINAL_CLOCK 266670000
#define MSM_CPP_TURBO_CLOCK 320000000
@@ -649,6 +651,38 @@ static int cpp_init_hardware(struct cpp_device *cpp_dev)
		}
	}

	cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX] =
		clk_get(&cpp_dev->pdev->dev,
		cpp_clk_info[MSM_MICRO_IFACE_CLK_IDX].clk_name);
	if (IS_ERR(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX])) {
		pr_err("%s get failed\n",
			cpp_clk_info[MSM_MICRO_IFACE_CLK_IDX].clk_name);
		rc = PTR_ERR(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX]);
		goto remap_failed;
	}

	rc = clk_reset(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX],
		CLK_RESET_ASSERT);
	if (rc) {
		pr_err("%s:micro_iface_clk assert failed\n", __func__);
		clk_put(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX]);
		goto remap_failed;
	}

	usleep_range(10000, 12000);

	rc = clk_reset(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX],
		CLK_RESET_DEASSERT);
	  if (rc) {
		pr_err("%s:micro_iface_clk assert failed\n", __func__);
		clk_put(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX]);
		goto remap_failed;
	}

	usleep_range(1000, 1200);

	clk_put(cpp_dev->cpp_clk[MSM_MICRO_IFACE_CLK_IDX]);

	rc = msm_cam_clk_enable(&cpp_dev->pdev->dev, cpp_clk_info,
			cpp_dev->cpp_clk, ARRAY_SIZE(cpp_clk_info), 1);
	if (rc < 0) {