diff options
| author | VijayaKumar T M <vtmuni@codeaurora.org> | 2020-10-01 16:04:26 +0530 |
|---|---|---|
| committer | VijayaKumar T M <vtmuni@codeaurora.org> | 2020-10-01 23:54:47 +0530 |
| commit | 5a1f74c0faa022d5b3c7b1fdec5dc28d12a6d7c0 (patch) | |
| tree | 5b140376a48709f04230b8524977d8b41a1aabad | |
| parent | dce57d817758260a14181dece4a2c8b92887e6e9 (diff) | |
mm-camera2:isp2: Add support for 12bit-plain16 raw format
VFE hardware is capable of handling 12 bit
plain16 raw image format. As this support
is not there in software, failure is returned
whenever the raw format is 12bit plain16.
Change-Id: Iceca409e33a19e5fe9e56dd563a535416bf7e107
Signed-off-by: VijayaKumar T M <vtmuni@codeaurora.org>
5 files changed, 38 insertions, 6 deletions
diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c index b19ec3141eec..72c0ba57fb50 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp40.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2018, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2018, 2020 The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -150,7 +150,7 @@ static int32_t msm_vfe40_init_qos_parms(struct vfe_device *vfe_dev, void __iomem *vfebase = vfe_dev->vfe_base; struct device_node *of_node; uint32_t *ds_settings = NULL, *ds_regs = NULL, ds_entries = 0; - int32_t i = 0 , rc = 0; + int32_t i = 0, rc = 0; uint32_t *qos_settings = NULL, *qos_regs = NULL, qos_entries = 0; of_node = vfe_dev->pdev->dev.of_node; @@ -256,7 +256,7 @@ static int32_t msm_vfe40_init_vbif_parms(struct vfe_device *vfe_dev, { void __iomem *vfe_vbif_base = vfe_dev->vfe_vbif_base; struct device_node *of_node; - int32_t i = 0 , rc = 0; + int32_t i = 0, rc = 0; uint32_t *vbif_settings = NULL, *vbif_regs = NULL, vbif_entries = 0; of_node = vfe_dev->pdev->dev.of_node; @@ -1244,6 +1244,10 @@ static void msm_vfe40_cfg_fetch_engine(struct vfe_device *vfe_dev, case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: main_unpack_pattern = 0xB210; break; default: diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c index cf9e7547d4e2..c74ea09b01ea 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp47.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -192,7 +192,7 @@ static int32_t msm_vfe47_init_dt_parms(struct vfe_device *vfe_dev, struct msm_vfe_hw_init_parms *dt_parms, void __iomem *dev_mem_base) { struct device_node *of_node; - int32_t i = 0 , rc = 0; + int32_t i = 0, rc = 0; uint32_t *dt_settings = NULL, *dt_regs = NULL, num_dt_entries = 0; of_node = vfe_dev->pdev->dev.of_node; @@ -1257,6 +1257,10 @@ void msm_vfe47_cfg_fetch_engine(struct vfe_device *vfe_dev, case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: main_unpack_pattern = 0xB210; break; default: diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c index 9d83bf2a4ad4..f398ce00dab4 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c @@ -243,6 +243,10 @@ static int msm_isp_validate_axi_request(struct vfe_device *vfe_dev, case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_META: case V4L2_PIX_FMT_META10: @@ -386,6 +390,10 @@ static uint32_t msm_isp_axi_get_plane_size( case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: size = plane_cfg[plane_idx].output_height * plane_cfg[plane_idx].output_width; break; diff --git a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c index 54ca0dd57819..3e9544fc94a7 100644 --- a/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +++ b/drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c @@ -1,4 +1,4 @@ -/* Copyright (c) 2013-2019, The Linux Foundation. All rights reserved. +/* Copyright (c) 2013-2020, The Linux Foundation. All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License version 2 and @@ -1619,6 +1619,10 @@ int msm_isp_cal_word_per_line(uint32_t output_format, case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: val = CAL_WORD(pixel_per_line, 1, 4); break; case V4L2_PIX_FMT_NV24: @@ -1682,6 +1686,10 @@ enum msm_isp_pack_fmt msm_isp_get_pack_format(uint32_t output_format) case V4L2_PIX_FMT_P16GBRG10: case V4L2_PIX_FMT_P16GRBG10: case V4L2_PIX_FMT_P16RGGB10: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: return PLAIN16; default: msm_isp_print_fourcc_error(__func__, output_format); @@ -1766,6 +1774,10 @@ int msm_isp_get_bit_per_pixel(uint32_t output_format) case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_Y12: + case V4L2_PIX_FMT_P16BGGR12: + case V4L2_PIX_FMT_P16GBRG12: + case V4L2_PIX_FMT_P16GRBG12: + case V4L2_PIX_FMT_P16RGGB12: case MSM_V4L2_PIX_FMT_META12: return 12; case V4L2_PIX_FMT_SBGGR14: diff --git a/include/uapi/media/msmb_isp.h b/include/uapi/media/msmb_isp.h index b1c02f297e91..273388c657c5 100644 --- a/include/uapi/media/msmb_isp.h +++ b/include/uapi/media/msmb_isp.h @@ -879,6 +879,10 @@ struct msm_vfe_dual_lpm_mode { #define V4L2_PIX_FMT_P16GBRG10 v4l2_fourcc('P', 'G', 'B', '0') #define V4L2_PIX_FMT_P16GRBG10 v4l2_fourcc('P', 'G', 'R', '0') #define V4L2_PIX_FMT_P16RGGB10 v4l2_fourcc('P', 'R', 'G', '0') +#define V4L2_PIX_FMT_P16BGGR12 v4l2_fourcc('P', 'B', 'G', '2') +#define V4L2_PIX_FMT_P16GBRG12 v4l2_fourcc('P', 'G', 'B', '2') +#define V4L2_PIX_FMT_P16GRBG12 v4l2_fourcc('P', 'G', 'R', '2') +#define V4L2_PIX_FMT_P16RGGB12 v4l2_fourcc('P', 'R', 'G', '2') #define V4L2_PIX_FMT_NV14 v4l2_fourcc('N', 'V', '1', '4') #define V4L2_PIX_FMT_NV41 v4l2_fourcc('N', 'V', '4', '1') #define V4L2_PIX_FMT_META v4l2_fourcc('Q', 'M', 'E', 'T') |
