From bfa2e1c4384b3dd75d1a5df5541f4073a499b900 Mon Sep 17 00:00:00 2001 From: Bryan Wu Date: Fri, 26 Feb 2016 16:16:15 -0800 Subject: [PATCH] media: tegra_camera: add support continuous clk Some sensor support continuous clk some not, this patch add support for this. Bug 1716418 Change-Id: Iba2027564156c931af3aadbb25459e61bb704a61 Signed-off-by: Bryan Wu Reviewed-on: http://git-master/r/1020983 (cherry picked from commit ecd730e4931f4bfef2e04da9cf1d23ed01735f88) Reviewed-on: http://git-master/r/1020988 Reviewed-by: Automatic_Commit_Validation_User GVS: Gerrit_Virtual_Submit Reviewed-by: Jihoon Bang --- drivers/media/platform/soc_camera/tegra_camera/common.h | 3 ++- drivers/media/platform/soc_camera/tegra_camera/vi2.c | 7 +++++-- 2 files changed, 7 insertions(+), 3 deletions(-) diff --git a/drivers/media/platform/soc_camera/tegra_camera/common.h b/drivers/media/platform/soc_camera/tegra_camera/common.h index 28555b7b9ba..1c43e1d6e20 100644 --- a/drivers/media/platform/soc_camera/tegra_camera/common.h +++ b/drivers/media/platform/soc_camera/tegra_camera/common.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2012-2015, NVIDIA CORPORATION. All rights reserved. + * Copyright (c) 2012-2016, NVIDIA CORPORATION. All rights reserved. * * This program is free software; you can redistribute it and/or modify it * under the terms and conditions of the GNU General Public License, @@ -57,6 +57,7 @@ static inline struct tegra_camera_platform_data *icd_to_pdata( #define icd_to_port(icd) (icd_to_pdata(icd)->port) #define icd_to_lanes(icd) (icd_to_pdata(icd)->lanes) +#define icd_to_continuous_clk(icd) (icd_to_pdata(icd)->continuous_clk) struct tegra_camera; diff --git a/drivers/media/platform/soc_camera/tegra_camera/vi2.c b/drivers/media/platform/soc_camera/tegra_camera/vi2.c index 7a732e0eb5a..aeecd41fd1a 100644 --- a/drivers/media/platform/soc_camera/tegra_camera/vi2.c +++ b/drivers/media/platform/soc_camera/tegra_camera/vi2.c @@ -447,6 +447,7 @@ struct vi2_channel { int port; int lanes; + int continuous_clk; s32 bytes_per_line; int fourcc; int code; @@ -773,6 +774,7 @@ static int vi2_channel_init(struct vi2_camera *vi2_cam, chan->sof = 1; chan->port = port; chan->lanes = icd_to_lanes(icd); + chan->continuous_clk = icd_to_continuous_clk(icd); if (IS_ENABLED(CONFIG_ARCH_TEGRA_12x_SOC) || IS_ENABLED(CONFIG_ARCH_TEGRA_13x_SOC)) @@ -1219,7 +1221,8 @@ static int vi2_channel_capture_setup(struct vi2_channel *chan) cil_regs_write(vi2_cam, chan, TEGRA_CSI_CIL_INTERRUPT_MASK, 0x0); - cil_regs_write(vi2_cam, chan, TEGRA_CSI_CIL_PHY_CONTROL, 0xA); + cil_regs_write(vi2_cam, chan, TEGRA_CSI_CIL_PHY_CONTROL, + (chan->continuous_clk << 6) | 0xA); if (lanes == 4) { regs->cil_base = vi2_cal_regs_base(TEGRA_CSI_CIL_0_BASE, port + 1); @@ -1228,7 +1231,7 @@ static int vi2_channel_capture_setup(struct vi2_channel *chan) cil_regs_write(vi2_cam, chan, TEGRA_CSI_CIL_INTERRUPT_MASK, 0x0); cil_regs_write(vi2_cam, chan, TEGRA_CSI_CIL_PHY_CONTROL, - 0xA); + (chan->continuous_clk << 6) | 0xA); regs->cil_base = vi2_cal_regs_base(TEGRA_CSI_CIL_0_BASE, port); } -- 2.39.2