From 74e1e1627e4984d975e85634b5d817a09f45e38f Mon Sep 17 00:00:00 2001 From: Allon Huang Date: Wed, 15 Jul 2020 21:54:57 +0800 Subject: [PATCH] include : uapi: linux: camera: change struct rkmodule_lvds_cfg for lvds sync code parameters Signed-off-by: Allon Huang Change-Id: I4cdf7d7d4c4454f42de3614bdbc1c193f39616c3 --- drivers/media/platform/rockchip/isp/rkisp.c | 7 +++- include/uapi/linux/rk-camera-module.h | 43 +++++++++++++++++++-- 2 files changed, 44 insertions(+), 6 deletions(-) diff --git a/drivers/media/platform/rockchip/isp/rkisp.c b/drivers/media/platform/rockchip/isp/rkisp.c index be09ecab59ce..a4eee1df9edb 100644 --- a/drivers/media/platform/rockchip/isp/rkisp.c +++ b/drivers/media/platform/rockchip/isp/rkisp.c @@ -732,9 +732,12 @@ static int rkisp_config_lvds(struct rkisp_device *dev) ret = -EINVAL; goto err; } - val = SW_LVDS_SAV(cfg.act.sav) | SW_LVDS_EAV(cfg.act.eav); + + val = SW_LVDS_SAV(cfg.frm_sync_code[LVDS_CODE_GRP_LINEAR].odd_sync_code.act.sav) | + SW_LVDS_EAV(cfg.frm_sync_code[LVDS_CODE_GRP_LINEAR].odd_sync_code.act.eav); writel(val, dev->base_addr + LVDS_SAV_EAV_ACT); - val = SW_LVDS_SAV(cfg.blk.sav) | SW_LVDS_EAV(cfg.blk.eav); + val = SW_LVDS_SAV(cfg.frm_sync_code[LVDS_CODE_GRP_LINEAR].odd_sync_code.blk.sav) | + SW_LVDS_EAV(cfg.frm_sync_code[LVDS_CODE_GRP_LINEAR].odd_sync_code.blk.eav); writel(val, dev->base_addr + LVDS_SAV_EAV_BLK); val = SW_LVDS_EN | SW_LVDS_WIDTH(data) | SW_LVDS_LANE_EN(lane) | cfg.mode; writel(val, dev->base_addr + LVDS_CTRL); diff --git a/include/uapi/linux/rk-camera-module.h b/include/uapi/linux/rk-camera-module.h index 464c2e1ab498..55dcf5db51ad 100644 --- a/include/uapi/linux/rk-camera-module.h +++ b/include/uapi/linux/rk-camera-module.h @@ -228,20 +228,55 @@ struct rkmodule_sync_code { * le: line end * fs: frame start * fe: frame end + * SONY_DOL_HDR_1: sony dol hdr pattern 1 + * SONY_DOL_HDR_2: sony dol hdr pattern 2 */ enum rkmodule_lvds_mode { LS_FIRST = 0, - FS_FIRST = BIT(1), + FS_FIRST, + SONY_DOL_HDR_1, + SONY_DOL_HDR_2 }; -/* struct rkmodule_lvds_cfg +/* sync code of different frame type (hdr or linear) for lvds * act: valid line sync code * blk: invalid line sync code */ -struct rkmodule_lvds_cfg { - enum rkmodule_lvds_mode mode; +struct rkmodule_lvds_frm_sync_code { struct rkmodule_sync_code act; struct rkmodule_sync_code blk; +}; + +/* sync code for lvds of sensor + * odd_sync_code: sync code of odd frame id for lvds of sony sensor + * even_sync_code: sync code of even frame id for lvds of sony sensor + */ +struct rkmodule_lvds_frame_sync_code { + struct rkmodule_lvds_frm_sync_code odd_sync_code; + struct rkmodule_lvds_frm_sync_code even_sync_code; +}; + +/* lvds sync code category of sensor for different operation */ +enum rkmodule_lvds_sync_code_group { + LVDS_CODE_GRP_LINEAR = 0x0, + LVDS_CODE_GRP_LONG, + LVDS_CODE_GRP_MEDIUM, + LVDS_CODE_GRP_SHORT, + LVDS_CODE_GRP_MAX +}; + +/* struct rkmodule_lvds_cfg + * frm_sync_code[index]: + * index == LVDS_CODE_GRP_LONG: + * sync code for frame of linear mode or for long frame of hdr mode + * index == LVDS_CODE_GRP_MEDIUM: + * sync code for medium long frame of hdr mode + * index == LVDS_CODE_GRP_SHOR: + * sync code for short long frame of hdr mode + */ +struct rkmodule_lvds_cfg { + enum rkmodule_lvds_mode mode; + struct rkmodule_lvds_frame_sync_code frm_sync_code[LVDS_CODE_GRP_MAX]; } __attribute__ ((packed)); /**