Loading drivers/media/platform/msm/camera_v2/isp/msm_isp46.c +23 −17 Original line number Diff line number Diff line Loading @@ -649,10 +649,13 @@ static int32_t msm_vfe46_convert_bpp_to_reg(int32_t bpp, uint32_t *bpp_reg) *bpp_reg = 0; break; case 10: *bpp_reg = 1 << 0; *bpp_reg = 0x1; break; case 12: *bpp_reg = 1 << 1; *bpp_reg = 0x2; break; case 14: *bpp_reg = 0x3; break; default: pr_err("%s:%d invalid bpp %d", __func__, __LINE__, bpp); Loading Loading @@ -1002,6 +1005,7 @@ static void msm_vfe46_axi_cfg_wm_reg( if (stream_info->frame_based) val |= 0x2; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0xC); if (!stream_info->frame_based) { /* WR_IMAGE_SIZE */ val = ((msm_isp_cal_word_per_line( Loading @@ -1013,11 +1017,13 @@ static void msm_vfe46_axi_cfg_wm_reg( msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x14); /* WR_BUFFER_CFG */ val = VFE46_BURST_LEN | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | ((msm_isp_cal_word_per_line(stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_stride)+1)/2) << 16; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x18); } /* WR_IRQ_SUBSAMPLE_PATTERN */ msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + wm_base + 0x20); Loading drivers/media/platform/msm/camera_v2/isp/msm_isp47.c +12 −10 Original line number Diff line number Diff line Loading @@ -850,9 +850,9 @@ static void msm_vfe47_axi_cfg_wm_reg( if (stream_info->frame_based) val |= 0x2; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0xC); if (!stream_info->frame_based) { /* WR_IMAGE_SIZE */ val = ((msm_isp_cal_word_per_line( val = ((msm_isp_cal_word_per_line( stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_width)+3)/4 - 1) << 16 | Loading @@ -861,10 +861,12 @@ static void msm_vfe47_axi_cfg_wm_reg( msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x14); /* WR_BUFFER_CFG */ val = VFE47_BURST_LEN | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | ((msm_isp_cal_word_per_line(stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_stride)+1)/2) << 16; } msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x18); /* WR_IRQ_SUBSAMPLE_PATTERN */ msm_camera_io_w(0xFFFFFFFF, Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +16 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ int msm_isp_validate_axi_request(struct msm_vfe_axi_shared_data *axi_data, case V4L2_PIX_FMT_SGBRG12: case V4L2_PIX_FMT_SGRBG12: case V4L2_PIX_FMT_SRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR8: case V4L2_PIX_FMT_QGBRG8: case V4L2_PIX_FMT_QGRBG8: Loading @@ -116,6 +120,10 @@ int msm_isp_validate_axi_request(struct msm_vfe_axi_shared_data *axi_data, case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_META: stream_info->num_planes = 1; Loading Loading @@ -216,6 +224,14 @@ static uint32_t msm_isp_axi_get_plane_size( case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: /* TODO: fix me */ size = plane_cfg[plane_idx].output_height * plane_cfg[plane_idx].output_width; Loading drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +29 −0 Original line number Diff line number Diff line Loading @@ -1198,6 +1198,12 @@ int msm_isp_cal_word_per_line(uint32_t output_format, case V4L2_PIX_FMT_SRGGB12: val = CAL_WORD(pixel_per_line, 3, 16); break; case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: val = CAL_WORD(pixel_per_line, 7, 32); break; case V4L2_PIX_FMT_QBGGR10: case V4L2_PIX_FMT_QGBRG10: case V4L2_PIX_FMT_QGRBG10: Loading @@ -1210,6 +1216,12 @@ int msm_isp_cal_word_per_line(uint32_t output_format, case V4L2_PIX_FMT_QRGGB12: val = CAL_WORD(pixel_per_line, 1, 5); break; case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: val = CAL_WORD(pixel_per_line, 1, 4); break; case V4L2_PIX_FMT_NV12: case V4L2_PIX_FMT_NV21: case V4L2_PIX_FMT_NV14: Loading Loading @@ -1247,6 +1259,10 @@ enum msm_isp_pack_fmt msm_isp_get_pack_format(uint32_t output_format) case V4L2_PIX_FMT_SGBRG12: case V4L2_PIX_FMT_SGRBG12: case V4L2_PIX_FMT_SRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: return MIPI; case V4L2_PIX_FMT_QBGGR8: case V4L2_PIX_FMT_QGBRG8: Loading @@ -1260,6 +1276,10 @@ enum msm_isp_pack_fmt msm_isp_get_pack_format(uint32_t output_format) case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: return QCOM; default: msm_isp_print_fourcc_error(__func__, output_format); Loading Loading @@ -1331,6 +1351,15 @@ int msm_isp_get_bit_per_pixel(uint32_t output_format) case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_Y12: return 12; case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: return 14; case V4L2_PIX_FMT_NV16: case V4L2_PIX_FMT_NV61: case V4L2_PIX_FMT_Y16: Loading include/media/msmb_isp.h +8 −0 Original line number Diff line number Diff line Loading @@ -489,9 +489,17 @@ struct msm_isp_event_data { #define V4L2_PIX_FMT_QGBRG12 v4l2_fourcc('Q', 'G', 'B', '2') #define V4L2_PIX_FMT_QGRBG12 v4l2_fourcc('Q', 'G', 'R', '2') #define V4L2_PIX_FMT_QRGGB12 v4l2_fourcc('Q', 'R', 'G', '2') #define V4L2_PIX_FMT_QBGGR14 v4l2_fourcc('Q', 'B', 'G', '4') #define V4L2_PIX_FMT_QGBRG14 v4l2_fourcc('Q', 'G', 'B', '4') #define V4L2_PIX_FMT_QGRBG14 v4l2_fourcc('Q', 'G', 'R', '4') #define V4L2_PIX_FMT_QRGGB14 v4l2_fourcc('Q', 'R', 'G', '4') #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') #define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14 BGBG.GRGR.*/ #define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14 GBGB.RGRG.*/ #define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4') /* 14 GRGR.BGBG.*/ #define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14 RGRG.GBGB.*/ #define VIDIOC_MSM_VFE_REG_CFG \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2) Loading Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp46.c +23 −17 Original line number Diff line number Diff line Loading @@ -649,10 +649,13 @@ static int32_t msm_vfe46_convert_bpp_to_reg(int32_t bpp, uint32_t *bpp_reg) *bpp_reg = 0; break; case 10: *bpp_reg = 1 << 0; *bpp_reg = 0x1; break; case 12: *bpp_reg = 1 << 1; *bpp_reg = 0x2; break; case 14: *bpp_reg = 0x3; break; default: pr_err("%s:%d invalid bpp %d", __func__, __LINE__, bpp); Loading Loading @@ -1002,6 +1005,7 @@ static void msm_vfe46_axi_cfg_wm_reg( if (stream_info->frame_based) val |= 0x2; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0xC); if (!stream_info->frame_based) { /* WR_IMAGE_SIZE */ val = ((msm_isp_cal_word_per_line( Loading @@ -1013,11 +1017,13 @@ static void msm_vfe46_axi_cfg_wm_reg( msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x14); /* WR_BUFFER_CFG */ val = VFE46_BURST_LEN | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | ((msm_isp_cal_word_per_line(stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_stride)+1)/2) << 16; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x18); } /* WR_IRQ_SUBSAMPLE_PATTERN */ msm_camera_io_w(0xFFFFFFFF, vfe_dev->vfe_base + wm_base + 0x20); Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp47.c +12 −10 Original line number Diff line number Diff line Loading @@ -850,9 +850,9 @@ static void msm_vfe47_axi_cfg_wm_reg( if (stream_info->frame_based) val |= 0x2; msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0xC); if (!stream_info->frame_based) { /* WR_IMAGE_SIZE */ val = ((msm_isp_cal_word_per_line( val = ((msm_isp_cal_word_per_line( stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_width)+3)/4 - 1) << 16 | Loading @@ -861,10 +861,12 @@ static void msm_vfe47_axi_cfg_wm_reg( msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x14); /* WR_BUFFER_CFG */ val = VFE47_BURST_LEN | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | (stream_info->plane_cfg[plane_idx].output_height - 1) << 2 | ((msm_isp_cal_word_per_line(stream_info->output_format, stream_info->plane_cfg[plane_idx]. output_stride)+1)/2) << 16; } msm_camera_io_w(val, vfe_dev->vfe_base + wm_base + 0x18); /* WR_IRQ_SUBSAMPLE_PATTERN */ msm_camera_io_w(0xFFFFFFFF, Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_axi_util.c +16 −0 Original line number Diff line number Diff line Loading @@ -104,6 +104,10 @@ int msm_isp_validate_axi_request(struct msm_vfe_axi_shared_data *axi_data, case V4L2_PIX_FMT_SGBRG12: case V4L2_PIX_FMT_SGRBG12: case V4L2_PIX_FMT_SRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR8: case V4L2_PIX_FMT_QGBRG8: case V4L2_PIX_FMT_QGRBG8: Loading @@ -116,6 +120,10 @@ int msm_isp_validate_axi_request(struct msm_vfe_axi_shared_data *axi_data, case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: case V4L2_PIX_FMT_JPEG: case V4L2_PIX_FMT_META: stream_info->num_planes = 1; Loading Loading @@ -216,6 +224,14 @@ static uint32_t msm_isp_axi_get_plane_size( case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: /* TODO: fix me */ size = plane_cfg[plane_idx].output_height * plane_cfg[plane_idx].output_width; Loading
drivers/media/platform/msm/camera_v2/isp/msm_isp_util.c +29 −0 Original line number Diff line number Diff line Loading @@ -1198,6 +1198,12 @@ int msm_isp_cal_word_per_line(uint32_t output_format, case V4L2_PIX_FMT_SRGGB12: val = CAL_WORD(pixel_per_line, 3, 16); break; case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: val = CAL_WORD(pixel_per_line, 7, 32); break; case V4L2_PIX_FMT_QBGGR10: case V4L2_PIX_FMT_QGBRG10: case V4L2_PIX_FMT_QGRBG10: Loading @@ -1210,6 +1216,12 @@ int msm_isp_cal_word_per_line(uint32_t output_format, case V4L2_PIX_FMT_QRGGB12: val = CAL_WORD(pixel_per_line, 1, 5); break; case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: val = CAL_WORD(pixel_per_line, 1, 4); break; case V4L2_PIX_FMT_NV12: case V4L2_PIX_FMT_NV21: case V4L2_PIX_FMT_NV14: Loading Loading @@ -1247,6 +1259,10 @@ enum msm_isp_pack_fmt msm_isp_get_pack_format(uint32_t output_format) case V4L2_PIX_FMT_SGBRG12: case V4L2_PIX_FMT_SGRBG12: case V4L2_PIX_FMT_SRGGB12: case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: return MIPI; case V4L2_PIX_FMT_QBGGR8: case V4L2_PIX_FMT_QGBRG8: Loading @@ -1260,6 +1276,10 @@ enum msm_isp_pack_fmt msm_isp_get_pack_format(uint32_t output_format) case V4L2_PIX_FMT_QGBRG12: case V4L2_PIX_FMT_QGRBG12: case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: return QCOM; default: msm_isp_print_fourcc_error(__func__, output_format); Loading Loading @@ -1331,6 +1351,15 @@ int msm_isp_get_bit_per_pixel(uint32_t output_format) case V4L2_PIX_FMT_QRGGB12: case V4L2_PIX_FMT_Y12: return 12; case V4L2_PIX_FMT_SBGGR14: case V4L2_PIX_FMT_SGBRG14: case V4L2_PIX_FMT_SGRBG14: case V4L2_PIX_FMT_SRGGB14: case V4L2_PIX_FMT_QBGGR14: case V4L2_PIX_FMT_QGBRG14: case V4L2_PIX_FMT_QGRBG14: case V4L2_PIX_FMT_QRGGB14: return 14; case V4L2_PIX_FMT_NV16: case V4L2_PIX_FMT_NV61: case V4L2_PIX_FMT_Y16: Loading
include/media/msmb_isp.h +8 −0 Original line number Diff line number Diff line Loading @@ -489,9 +489,17 @@ struct msm_isp_event_data { #define V4L2_PIX_FMT_QGBRG12 v4l2_fourcc('Q', 'G', 'B', '2') #define V4L2_PIX_FMT_QGRBG12 v4l2_fourcc('Q', 'G', 'R', '2') #define V4L2_PIX_FMT_QRGGB12 v4l2_fourcc('Q', 'R', 'G', '2') #define V4L2_PIX_FMT_QBGGR14 v4l2_fourcc('Q', 'B', 'G', '4') #define V4L2_PIX_FMT_QGBRG14 v4l2_fourcc('Q', 'G', 'B', '4') #define V4L2_PIX_FMT_QGRBG14 v4l2_fourcc('Q', 'G', 'R', '4') #define V4L2_PIX_FMT_QRGGB14 v4l2_fourcc('Q', 'R', 'G', '4') #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') #define V4L2_PIX_FMT_SBGGR14 v4l2_fourcc('B', 'G', '1', '4') /* 14 BGBG.GRGR.*/ #define V4L2_PIX_FMT_SGBRG14 v4l2_fourcc('G', 'B', '1', '4') /* 14 GBGB.RGRG.*/ #define V4L2_PIX_FMT_SGRBG14 v4l2_fourcc('B', 'A', '1', '4') /* 14 GRGR.BGBG.*/ #define V4L2_PIX_FMT_SRGGB14 v4l2_fourcc('R', 'G', '1', '4') /* 14 RGRG.GBGB.*/ #define VIDIOC_MSM_VFE_REG_CFG \ _IOWR('V', BASE_VIDIOC_PRIVATE, struct msm_vfe_cfg_cmd2) Loading