#define TEGRA_VIP_H_ACTIVE_START 0x98
#define TEGRA_VIP_V_ACTIVE_START 0x10
-/* SYNCPTs 12-17 are reserved for VI. */
-#define TEGRA_VI_SYNCPT_VI NVSYNCPT_VI_ISP_2
-#define TEGRA_VI_SYNCPT_CSI_A NVSYNCPT_VI_ISP_3
-#define TEGRA_VI_SYNCPT_CSI_B NVSYNCPT_VI_ISP_4
-
/* Tegra CSI-MIPI registers. */
#define TEGRA_VI_OUT_1_INCR_SYNCPT 0x000
#define TEGRA_VI_OUT_1_INCR_SYNCPT_CNTRL 0x004
}
}
+static void vi_init_syncpts(struct tegra_camera_dev *cam)
+{
+ cam->syncpt_id_csi_a = nvhost_get_syncpt_client_managed("vi_csi_A");
+
+ cam->syncpt_id_csi_b = nvhost_get_syncpt_client_managed("vi_csi_B");
+
+ cam->syncpt_id_vip = nvhost_get_syncpt_client_managed("vi_vip");
+}
+
static void vi_save_syncpts(struct tegra_camera_dev *cam)
{
u32 val;
if (!nvhost_syncpt_read_ext_check(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A, &val))
+ cam->syncpt_id_csi_a, &val))
cam->syncpt_csi_a = val;
if (!nvhost_syncpt_read_ext_check(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B, &val))
+ cam->syncpt_id_csi_b, &val))
cam->syncpt_csi_b = val;
if (!nvhost_syncpt_read_ext_check(cam->ndev,
- TEGRA_VI_SYNCPT_VI, &val))
+ cam->syncpt_id_vip, &val))
cam->syncpt_vip = val;
}
static void vi_incr_syncpts(struct tegra_camera_dev *cam)
{
- nvhost_syncpt_cpu_incr_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A);
+ nvhost_syncpt_cpu_incr_ext(cam->ndev, cam->syncpt_id_csi_a);
- nvhost_syncpt_cpu_incr_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B);
+ nvhost_syncpt_cpu_incr_ext(cam->ndev, cam->syncpt_id_csi_b);
- nvhost_syncpt_cpu_incr_ext(cam->ndev,
- TEGRA_VI_SYNCPT_VI);
+ nvhost_syncpt_cpu_incr_ext(cam->ndev, cam->syncpt_id_vip);
}
static void vi_capture_clean(struct tegra_camera_dev *cam)
TC_VI_REG_WT(cam, TEGRA_VI_CONT_SYNCPT_CSI_PPA_FRAME_END,
(0x1 << 8) | /* Enable continuous syncpt */
- TEGRA_VI_SYNCPT_CSI_A);
+ cam->syncpt_id_csi_a);
TC_VI_REG_WT(cam, TEGRA_CSI_PHY_CIL_COMMAND, 0x00020001);
TC_VI_REG_WT(cam, TEGRA_VI_CONT_SYNCPT_CSI_PPB_FRAME_END,
(0x1 << 8) | /* Enable continuous syncpt */
- TEGRA_VI_SYNCPT_CSI_B);
+ cam->syncpt_id_csi_b);
TC_VI_REG_WT(cam, TEGRA_CSI_PHY_CIL_COMMAND, 0x00010002);
TC_VI_REG_WT(cam, TEGRA_VI_CONT_SYNCPT_VIP_VSYNC,
(0x1 << 8) | /* Enable continuous syncpt */
- TEGRA_VI_SYNCPT_VI);
+ cam->syncpt_id_vip);
TC_VI_REG_WT(cam, TEGRA_VI_CAMERA_CONTROL, 0x00000004);
}
TC_VI_REG_WT(cam, TEGRA_VI_CONT_SYNCPT_OUT_1,
(0x1 << 8) | /* Enable continuous syncpt */
- TEGRA_VI_SYNCPT_VI);
+ cam->syncpt_id_vip);
TC_VI_REG_WT(cam, TEGRA_VI_VI_ENABLE, 0x00000000);
} else if (buf->output_channel == 1) {
TC_VI_REG_WT(cam, TEGRA_VI_CONT_SYNCPT_OUT_2,
(0x1 << 8) | /* Enable continuous syncpt */
- TEGRA_VI_SYNCPT_VI);
+ cam->syncpt_id_vip);
TC_VI_REG_WT(cam, TEGRA_VI_VI_ENABLE_2, 0x00000000);
} else {
TC_VI_REG_WT(cam, TEGRA_CSI_PIXEL_STREAM_PPA_COMMAND,
0x0000f005);
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A,
+ cam->syncpt_id_csi_a,
cam->syncpt_csi_a,
TEGRA_SYNCPT_CSI_WAIT_TIMEOUT,
NULL,
TC_VI_REG_WT(cam, TEGRA_CSI_PIXEL_STREAM_PPB_COMMAND,
0x0000f005);
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B,
+ cam->syncpt_id_csi_b,
cam->syncpt_csi_b,
TEGRA_SYNCPT_CSI_WAIT_TIMEOUT,
NULL,
TC_VI_REG_WT(cam, TEGRA_VI_CAMERA_CONTROL,
0x00000001);
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_VI,
+ cam->syncpt_id_vip,
cam->syncpt_csi_a,
TEGRA_SYNCPT_VI_WAIT_TIMEOUT,
NULL,
if (vi_port_is_csi(port))
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_VI,
+ cam->syncpt_id_vip,
cam->syncpt_vip,
TEGRA_SYNCPT_VI_WAIT_TIMEOUT,
NULL,
.activate = vi_unpowergate,
.deactivate = vi_powergate,
+ .init_syncpts = vi_init_syncpts,
.save_syncpts = vi_save_syncpts,
.incr_syncpts = vi_incr_syncpts,
#define TEGRA_SYNCPT_CSI_WAIT_TIMEOUT 200
-#define TEGRA_VI_SYNCPT_CSI_A NVSYNCPT_VI_0_3
-#define TEGRA_VI_SYNCPT_CSI_B NVSYNCPT_VI_1_3
-
#define TEGRA_VI_CFG_VI_INCR_SYNCPT 0x000
#define TEGRA_VI_CFG_VI_INCR_SYNCPT_CNTRL 0x004
#define TEGRA_VI_CFG_VI_INCR_SYNCPT_ERROR 0x008
}
}
+static void vi2_init_syncpts(struct tegra_camera_dev *cam)
+{
+ cam->syncpt_id_csi_a = nvhost_get_syncpt_client_managed("vi_csi_A");
+
+ cam->syncpt_id_csi_b = nvhost_get_syncpt_client_managed("vi_csi_B");
+}
+
static void vi2_save_syncpts(struct tegra_camera_dev *cam)
{
u32 val;
if (!nvhost_syncpt_read_ext_check(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A, &val))
+ cam->syncpt_id_csi_a, &val))
cam->syncpt_csi_a = val;
if (!nvhost_syncpt_read_ext_check(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B, &val))
+ cam->syncpt_id_csi_b, &val))
cam->syncpt_csi_b = val;
}
static void vi2_incr_syncpts(struct tegra_camera_dev *cam)
{
- nvhost_syncpt_cpu_incr_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A);
+ nvhost_syncpt_cpu_incr_ext(cam->ndev, cam->syncpt_id_csi_a);
- nvhost_syncpt_cpu_incr_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B);
+ nvhost_syncpt_cpu_incr_ext(cam->ndev, cam->syncpt_id_csi_b);
}
static void vi2_capture_clean(struct tegra_camera_dev *cam)
/* VI_MWA_REQ_DONE */
TC_VI_REG_WT(cam, TEGRA_VI_CFG_VI_INCR_SYNCPT,
- (0x4 << 8) | TEGRA_VI_SYNCPT_CSI_A);
+ (0x4 << 8) | cam->syncpt_id_csi_a);
if (cam->tpg_mode) {
TC_VI_REG_WT(cam, TEGRA_CSI_PATTERN_GENERATOR_CTRL_A,
/* VI_MWB_REQ_DONE */
TC_VI_REG_WT(cam, TEGRA_VI_CFG_VI_INCR_SYNCPT,
- (0x5 << 8) | TEGRA_VI_SYNCPT_CSI_B);
+ (0x5 << 8) | cam->syncpt_id_csi_b);
if (cam->tpg_mode) {
TC_VI_REG_WT(cam, TEGRA_CSI_PATTERN_GENERATOR_CTRL_B,
0x0000f005);
TC_VI_REG_WT(cam, TEGRA_VI_CSI_0_SINGLE_SHOT, 0x1);
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_A,
+ cam->syncpt_id_csi_a,
cam->syncpt_csi_a,
TEGRA_SYNCPT_CSI_WAIT_TIMEOUT,
NULL,
0x0000f005);
TC_VI_REG_WT(cam, TEGRA_VI_CSI_1_SINGLE_SHOT, 0x1);
err = nvhost_syncpt_wait_timeout_ext(cam->ndev,
- TEGRA_VI_SYNCPT_CSI_B,
+ cam->syncpt_id_csi_b,
cam->syncpt_csi_b,
TEGRA_SYNCPT_CSI_WAIT_TIMEOUT,
NULL,
.activate = vi2_sw_reset,
+ .init_syncpts = vi2_init_syncpts,
.save_syncpts = vi2_save_syncpts,
.incr_syncpts = vi2_incr_syncpts,