diff --git a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver2.c b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver2.c index 33d570c496..c00b077c23 100644 --- a/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver2.c +++ b/drivers/cam_isp/isp_hw_mgr/isp_hw/vfe_hw/vfe_bus/cam_vfe_bus_ver2.c @@ -483,6 +483,7 @@ static int cam_vfe_bus_get_num_wm( case CAM_FORMAT_DPCM_14_10_14: case CAM_FORMAT_PLAIN8: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: case CAM_FORMAT_PLAIN16_12: case CAM_FORMAT_PLAIN16_14: case CAM_FORMAT_PLAIN16_16: @@ -506,6 +507,7 @@ static int cam_vfe_bus_get_num_wm( case CAM_FORMAT_UBWC_TP10: case CAM_FORMAT_UBWC_P010: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: return 2; default: break; @@ -518,6 +520,7 @@ static int cam_vfe_bus_get_num_wm( case CAM_FORMAT_PLAIN8: case CAM_FORMAT_TP10: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: return 2; case CAM_FORMAT_Y_ONLY: return 1; @@ -542,6 +545,7 @@ static int cam_vfe_bus_get_num_wm( case CAM_FORMAT_ARGB_14: case CAM_FORMAT_PLAIN8: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: case CAM_FORMAT_PLAIN16_12: case CAM_FORMAT_PLAIN16_14: return 1; @@ -553,6 +557,7 @@ static int cam_vfe_bus_get_num_wm( switch (format) { case CAM_FORMAT_PLAIN8: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: case CAM_FORMAT_PLAIN16_12: case CAM_FORMAT_PLAIN16_14: return 1; @@ -564,6 +569,7 @@ static int cam_vfe_bus_get_num_wm( switch (format) { case CAM_FORMAT_PLAIN16_8: case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: case CAM_FORMAT_PLAIN16_12: case CAM_FORMAT_PLAIN16_14: case CAM_FORMAT_PLAIN16_16: @@ -920,6 +926,7 @@ static enum cam_vfe_bus_packer_format case CAM_FORMAT_PLAIN8: return PACKER_FMT_PLAIN_8; case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: return PACKER_FMT_PLAIN_16_10BPP; case CAM_FORMAT_PLAIN16_12: return PACKER_FMT_PLAIN_16_12BPP; @@ -1022,6 +1029,7 @@ static int cam_vfe_bus_acquire_wm( rsrc_data->stride = rsrc_data->width; break; case CAM_FORMAT_PLAIN16_10: + case CAM_FORMAT_PLAIN16_10_LSB: case CAM_FORMAT_PLAIN16_12: case CAM_FORMAT_PLAIN16_14: case CAM_FORMAT_PLAIN16_16: @@ -1109,6 +1117,20 @@ static int cam_vfe_bus_acquire_wm( return -EINVAL; } break; + case CAM_FORMAT_PLAIN16_10_LSB: + rsrc_data->pack_fmt |= 0x10; + switch (plane) { + case PLANE_C: + rsrc_data->height /= 2; + break; + case PLANE_Y: + break; + default: + CAM_ERR(CAM_ISP, "Invalid plane %d", plane); + return -EINVAL; + } + rsrc_data->width *= 2; + break; case CAM_FORMAT_PLAIN16_10: switch (plane) { case PLANE_C: diff --git a/include/uapi/camera/media/cam_defs.h b/include/uapi/camera/media/cam_defs.h index d6e2a7fb15..8716d1e706 100644 --- a/include/uapi/camera/media/cam_defs.h +++ b/include/uapi/camera/media/cam_defs.h @@ -178,7 +178,8 @@ struct cam_iommu_handle { #define CAM_FORMAT_DPCM_12_10_12 46 #define CAM_FORMAT_PLAIN32 47 #define CAM_FORMAT_ARGB_16 48 -#define CAM_FORMAT_MAX 49 +#define CAM_FORMAT_PLAIN16_10_LSB 49 +#define CAM_FORMAT_MAX 50 /* Pixel Patterns */ #define PIXEL_PATTERN_RGRGRG 0x0