camera: Optimize bus scaling table for 8960.
Change-Id: I4db338d173a99a18ba8ab86bd8f34dc322e54ff7
Signed-off-by: Shuzhen Wang <shuzhenw@codeaurora.org>
diff --git a/arch/arm/mach-msm/board-msm8960.c b/arch/arm/mach-msm/board-msm8960.c
index 47f1592..3ac41ed 100644
--- a/arch/arm/mach-msm/board-msm8960.c
+++ b/arch/arm/mach-msm/board-msm8960.c
@@ -998,16 +998,159 @@
};
#endif
+#ifdef CONFIG_MSM_BUS_SCALING
+
+static struct msm_bus_vectors cam_init_vectors[] = {
+ {
+ .src = MSM_BUS_MASTER_VFE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+ {
+ .src = MSM_BUS_MASTER_VPE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+ {
+ .src = MSM_BUS_MASTER_JPEG_ENC,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+};
+
+static struct msm_bus_vectors cam_preview_vectors[] = {
+ {
+ .src = MSM_BUS_MASTER_VFE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 27648000,
+ .ib = 110592000,
+ },
+ {
+ .src = MSM_BUS_MASTER_VPE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+ {
+ .src = MSM_BUS_MASTER_JPEG_ENC,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+};
+
+static struct msm_bus_vectors cam_video_vectors[] = {
+ {
+ .src = MSM_BUS_MASTER_VFE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 140451840,
+ .ib = 561807360,
+ },
+ {
+ .src = MSM_BUS_MASTER_VPE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 206807040,
+ .ib = 488816640,
+ },
+ {
+ .src = MSM_BUS_MASTER_JPEG_ENC,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+};
+
+static struct msm_bus_vectors cam_snapshot_vectors[] = {
+ {
+ .src = MSM_BUS_MASTER_VFE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 274423680,
+ .ib = 1097694720,
+ },
+ {
+ .src = MSM_BUS_MASTER_VPE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+ {
+ .src = MSM_BUS_MASTER_JPEG_ENC,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 540000000,
+ .ib = 1350000000,
+ },
+};
+
+static struct msm_bus_vectors cam_zsl_vectors[] = {
+ {
+ .src = MSM_BUS_MASTER_VFE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 302071680,
+ .ib = 1208286720,
+ },
+ {
+ .src = MSM_BUS_MASTER_VPE,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 0,
+ .ib = 0,
+ },
+ {
+ .src = MSM_BUS_MASTER_JPEG_ENC,
+ .dst = MSM_BUS_SLAVE_EBI_CH0,
+ .ab = 540000000,
+ .ib = 1350000000,
+ },
+};
+
+static struct msm_bus_paths cam_bus_client_config[] = {
+ {
+ ARRAY_SIZE(cam_init_vectors),
+ cam_init_vectors,
+ },
+ {
+ ARRAY_SIZE(cam_preview_vectors),
+ cam_preview_vectors,
+ },
+ {
+ ARRAY_SIZE(cam_video_vectors),
+ cam_video_vectors,
+ },
+ {
+ ARRAY_SIZE(cam_snapshot_vectors),
+ cam_snapshot_vectors,
+ },
+ {
+ ARRAY_SIZE(cam_zsl_vectors),
+ cam_zsl_vectors,
+ },
+};
+
+static struct msm_bus_scale_pdata cam_bus_client_pdata = {
+ cam_bus_client_config,
+ ARRAY_SIZE(cam_bus_client_config),
+ .name = "msm_camera",
+};
+#endif
+
struct msm_camera_device_platform_data msm_camera_csi_device_data[] = {
{
.ioclk.mclk_clk_rate = 24000000,
.ioclk.vfe_clk_rate = 228570000,
.csid_core = 0,
+#ifdef CONFIG_MSM_BUS_SCALING
+ .cam_bus_scale_table = &cam_bus_client_pdata,
+#endif
},
{
.ioclk.mclk_clk_rate = 24000000,
.ioclk.vfe_clk_rate = 228570000,
.csid_core = 1,
+#ifdef CONFIG_MSM_BUS_SCALING
+ .cam_bus_scale_table = &cam_bus_client_pdata,
+#endif
},
};
diff --git a/drivers/media/video/msm/msm_io_8960.c b/drivers/media/video/msm/msm_io_8960.c
index 5951774..43f893b 100644
--- a/drivers/media/video/msm/msm_io_8960.c
+++ b/drivers/media/video/msm/msm_io_8960.c
@@ -140,140 +140,7 @@
static struct resource *csid_mem, *csiphy_mem, *s3drw_mem, *s3dctl_mem;
static struct resource *csid_irq, *csiphy_irq;
void __iomem *csidbase, *csiphybase, *s3d_rw, *s3d_ctl;
-
-static struct msm_bus_vectors cam_init_vectors[] = {
- {
- .src = MSM_BUS_MASTER_VFE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
- {
- .src = MSM_BUS_MASTER_VPE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
- {
- .src = MSM_BUS_MASTER_JPEG_ENC,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
-};
-
-static struct msm_bus_vectors cam_preview_vectors[] = {
- {
- .src = MSM_BUS_MASTER_VFE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
- {
- .src = MSM_BUS_MASTER_VPE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
- {
- .src = MSM_BUS_MASTER_JPEG_ENC,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
-};
-
-static struct msm_bus_vectors cam_video_vectors[] = {
- {
- .src = MSM_BUS_MASTER_VFE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
- {
- .src = MSM_BUS_MASTER_VPE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
- {
- .src = MSM_BUS_MASTER_JPEG_ENC,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
-};
-
-static struct msm_bus_vectors cam_snapshot_vectors[] = {
- {
- .src = MSM_BUS_MASTER_VFE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
- {
- .src = MSM_BUS_MASTER_VPE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
- {
- .src = MSM_BUS_MASTER_JPEG_ENC,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
-};
-
-static struct msm_bus_vectors cam_zsl_vectors[] = {
- {
- .src = MSM_BUS_MASTER_VFE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
- {
- .src = MSM_BUS_MASTER_VPE,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 0,
- .ib = 0,
- },
- {
- .src = MSM_BUS_MASTER_JPEG_ENC,
- .dst = MSM_BUS_SLAVE_EBI_CH0,
- .ab = 1521190000,
- .ib = 1521190000,
- },
-};
-
-static struct msm_bus_paths cam_bus_client_config[] = {
- {
- ARRAY_SIZE(cam_init_vectors),
- cam_init_vectors,
- },
- {
- ARRAY_SIZE(cam_preview_vectors),
- cam_preview_vectors,
- },
- {
- ARRAY_SIZE(cam_video_vectors),
- cam_video_vectors,
- },
- {
- ARRAY_SIZE(cam_snapshot_vectors),
- cam_snapshot_vectors,
- },
- {
- ARRAY_SIZE(cam_zsl_vectors),
- cam_zsl_vectors,
- },
-};
-
-static struct msm_bus_scale_pdata cam_bus_client_pdata = {
- cam_bus_client_config,
- ARRAY_SIZE(cam_bus_client_config),
- .name = "msm_camera",
-};
+struct msm_bus_scale_pdata *cam_bus_scale_table;
void msm_io_w(u32 data, void __iomem *addr)
@@ -1104,6 +971,7 @@
camio_dev = pdev;
camio_clk = camdev->ioclk;
+ cam_bus_scale_table = camdev->cam_bus_scale_table;
rc = msm_camio_enable_all_clks(csid_core);
if (rc < 0)
@@ -1473,7 +1341,7 @@
switch (perf_setting) {
case S_INIT:
bus_perf_client =
- msm_bus_scale_register_client(&cam_bus_client_pdata);
+ msm_bus_scale_register_client(cam_bus_scale_table);
if (!bus_perf_client) {
CDBG("%s: Registration Failed!!!\n", __func__);
bus_perf_client = 0;
diff --git a/drivers/media/video/msm/msm_vfe32.c b/drivers/media/video/msm/msm_vfe32.c
index c04005b..1e80ef8 100644
--- a/drivers/media/video/msm/msm_vfe32.c
+++ b/drivers/media/video/msm/msm_vfe32.c
@@ -691,6 +691,7 @@
static int vfe32_start_recording(void)
{
+ msm_camio_set_perf_lvl(S_VIDEO);
vfe32_ctrl->recording_state = VFE_REC_STATE_START_REQUESTED;
msm_io_w_mb(1, vfe32_ctrl->vfebase + VFE_REG_UPDATE_CMD);
return 0;
@@ -700,6 +701,7 @@
{
vfe32_ctrl->recording_state = VFE_REC_STATE_STOP_REQUESTED;
msm_io_w_mb(1, vfe32_ctrl->vfebase + VFE_REG_UPDATE_CMD);
+ msm_camio_set_perf_lvl(S_PREVIEW);
return 0;
}
@@ -815,6 +817,7 @@
}
msm_io_w(irq_comp_mask, vfe32_ctrl->vfebase + VFE_IRQ_COMP_MASK);
msm_io_r(vfe32_ctrl->vfebase + VFE_IRQ_COMP_MASK);
+ msm_camio_set_perf_lvl(S_CAPTURE);
vfe32_start_common();
msm_io_r(vfe32_ctrl->vfebase + VFE_IRQ_COMP_MASK);
/* for debug */
@@ -851,6 +854,7 @@
msm_io_w(1, vfe32_ctrl->vfebase +
vfe32_AXI_WM_CFG[vfe32_ctrl->outpath.out0.ch1]);
}
+ msm_camio_set_perf_lvl(S_PREVIEW);
vfe32_start_common();
return 0;
}