From f5a032a46a6d8f978de5ecdd8d8268dc8f89803e Mon Sep 17 00:00:00 2001 From: Jozef Kruger Date: Thu, 15 Dec 2011 11:07:06 -0800 Subject: [PATCH] [PORT FROM R2] atomisp: optimize DVS BZ: 18089 This patch optimizes the DVS code. Change-Id: I4e630e5687e47237edb94989d3887417f1f745a2 Orig-Change-Id: Ie3efeda5d26d4a6c4783d7d343607083d0b18bdd Signed-off-by: Jozef Kruger Reviewed-on: http://android.intel.com:8080/27836 Reviewed-by: Bhat, Sheethal Reviewed-by: Toivonen, Tuukka Reviewed-by: Wang, Wen W Reviewed-by: Cohen, David A Tested-by: Koski, Anttu Reviewed-on: http://android.intel.com:8080/29600 Reviewed-by: Lampila, KalleX Reviewed-by: Koski, Anttu Reviewed-by: buildbot Tested-by: buildbot --- drivers/media/video/atomisp/atomisp_cmd.c | 153 ++++++++++----------- drivers/media/video/atomisp/atomisp_cmd.h | 21 ++- drivers/media/video/atomisp/atomisp_ioctl.c | 11 +- drivers/media/video/atomisp/css/sh_css_binary.c | 6 +- drivers/media/video/atomisp/css/sh_css_params.c | 32 ++++- drivers/media/video/atomisp/css/sh_css_types.h | 2 + .../atomisp/include/atomisp/atomisp_internal.h | 4 - include/linux/atomisp.h | 109 ++++++++------- 8 files changed, 194 insertions(+), 144 deletions(-) diff --git a/drivers/media/video/atomisp/atomisp_cmd.c b/drivers/media/video/atomisp/atomisp_cmd.c index 5921e34..8e153ca 100644 --- a/drivers/media/video/atomisp/atomisp_cmd.c +++ b/drivers/media/video/atomisp/atomisp_cmd.c @@ -338,7 +338,6 @@ irqreturn_t atomisp_isr(int irq, void *dev) } else { isp->sw_contex.invalid_frame = false; } - ret = atomisp_start_binary(isp); if (ret) goto no_frame_done; @@ -536,10 +535,6 @@ static int atomisp_start_binary(struct atomisp_device *isp) } break; case CI_MODE_VIDEO: - if (isp->params.video_dis_en) { - sh_css_video_set_dis_vector(isp->params.dis_x, - isp->params.dis_y); - } ret = sh_css_video_start(NULL, isp->regular_output_frame, isp->vf_frame); if (sh_css_success != ret) { @@ -1746,12 +1741,12 @@ static void atomisp_update_grid_info(struct atomisp_device *isp) /* DIS projections. */ isp->params.dis_hor_proj_bytes = - isp->params.curr_grid_info.dis_height * + isp->params.curr_grid_info.dis_aligned_height * SH_CSS_DIS_NUM_COEF_TYPES * sizeof(*isp->params.dis_hor_proj_buf); isp->params.dis_ver_proj_bytes = - isp->params.curr_grid_info.dis_width * + isp->params.curr_grid_info.dis_aligned_width * SH_CSS_DIS_NUM_COEF_TYPES * sizeof(*isp->params.dis_ver_proj_buf); @@ -1786,14 +1781,18 @@ static void atomisp_curr_user_grid_info(struct atomisp_device *isp, info->s3a_height = isp->params.curr_grid_info.s3a_height; info->s3a_bqs_per_grid_cell = isp->params.curr_grid_info.s3a_bqs_per_grid_cell; - info->dis_width = isp->params.curr_grid_info.dis_width; - info->dis_height = isp->params.curr_grid_info.dis_height; + + info->dis_width = isp->params.curr_grid_info.dis_width; + info->dis_aligned_width = isp->params.curr_grid_info.dis_aligned_width; + info->dis_height = isp->params.curr_grid_info.dis_height; + info->dis_aligned_height = + isp->params.curr_grid_info.dis_aligned_height; info->dis_bqs_per_grid_cell = - isp->params.curr_grid_info.dis_bqs_per_grid_cell; + isp->params.curr_grid_info.dis_bqs_per_grid_cell; info->dis_hor_coef_num = - isp->params.curr_grid_info.dis_hor_coef_num; + isp->params.curr_grid_info.dis_hor_coef_num; info->dis_ver_coef_num = - isp->params.curr_grid_info.dis_ver_coef_num; + isp->params.curr_grid_info.dis_ver_coef_num; } /* @@ -1927,93 +1926,91 @@ int atomisp_macc_table(struct atomisp_device *isp, int flag, return 0; } -int atomisp_dis_vector(struct atomisp_device *isp, - void *config) +int atomisp_set_dis_vector(struct atomisp_device *isp, + struct atomisp_dis_vector *vector) { - struct atomisp_dis_config *arg = (struct atomisp_dis_config *)config; + unsigned long irqflags; + + /* Avoid race conditions with ISR */ + spin_lock_irqsave(&isp->irq_lock, irqflags); + sh_css_video_set_dis_vector(vector->x, vector->y); + spin_unlock_irqrestore(&isp->irq_lock, irqflags); - /* The dis parameter is initialized at start_video_capture - * in atomisp_work - */ - mutex_lock(&isp->isp_lock); - isp->params.dis_x = arg->dis_x; - isp->params.dis_y = arg->dis_y; - mutex_unlock(&isp->isp_lock); return 0; } /* * Function to set/get image stablization statistics */ -int atomisp_dis_stat(struct atomisp_device *isp, int flag, - void *config) +int atomisp_get_dis_stat(struct atomisp_device *isp, + struct atomisp_dis_statistics *stats) { int error; - struct atomisp_dis_config *arg = (struct atomisp_dis_config *)config; + long left; - if (flag == 0) { - long time_left; + if (stats->vertical_projections == NULL || + stats->horizontal_projections == NULL || + isp->params.dis_hor_proj_buf == NULL || + isp->params.dis_ver_proj_buf == NULL) + return -EINVAL; - if (arg->w_sdis_vertproj_tbl == NULL || - arg->w_sdis_horiproj_tbl == NULL || - isp->params.dis_hor_proj_buf == NULL || - isp->params.dis_ver_proj_buf == NULL) - return -EINVAL; + /* isp needs to be streaming to get DIS statistics */ + if (!isp->sw_contex.isp_streaming) + return -EINVAL; + if (!isp->params.video_dis_en) + return -EINVAL; - /* isp need to be streaming to get DIS statistics */ - if (!isp->sw_contex.isp_streaming) - return -EINVAL; - if (!isp->params.video_dis_en) - return -EINVAL; + INIT_COMPLETION(isp->dis_state_complete); - INIT_COMPLETION(isp->dis_state_complete); + left = wait_for_completion_timeout(&isp->dis_state_complete, 1 * HZ); + + /* Timeout to get the statistics */ + if (left == 0) { + v4l2_err(&atomisp_dev, "Failed to wait frame DIS state\n"); + return -EINVAL; + } - time_left = - wait_for_completion_timeout(&isp->dis_state_complete, - 1 * HZ); + sh_css_get_dis_projections(isp->params.dis_hor_proj_buf, + isp->params.dis_ver_proj_buf); - /* Timeout to get the statistics */ - if (time_left == 0) { - v4l2_err(&atomisp_dev, - "Failed to wait frame DIS state\n"); - return -EINVAL; - } + error = copy_to_user(stats->vertical_projections, + isp->params.dis_ver_proj_buf, + isp->params.dis_ver_proj_bytes); + if (error) + return -EFAULT; + error = copy_to_user(stats->horizontal_projections, + isp->params.dis_hor_proj_buf, + isp->params.dis_hor_proj_bytes); + if (error) + return -EFAULT; - sh_css_get_dis_projections(isp->params.dis_hor_proj_buf, - isp->params.dis_ver_proj_buf); + return 0; +} - error = copy_to_user(arg->w_sdis_vertproj_tbl, - isp->params.dis_ver_proj_buf, - isp->params.dis_ver_proj_bytes); - if (error) - return -EFAULT; +int atomisp_set_dis_coefs(struct atomisp_device *isp, + struct atomisp_dis_coefficients *coefs) +{ + int error; - error = copy_to_user(arg->w_sdis_horiproj_tbl, - isp->params.dis_hor_proj_buf, - isp->params.dis_hor_proj_bytes); - if (error) - return -EFAULT; - } else { - if (arg->sdis_vertcoef_tbl == NULL || - arg->sdis_horicoef_tbl == NULL || - isp->params.dis_hor_coef_buf == NULL || - isp->params.dis_ver_coef_buf == NULL) - return -EINVAL; + if (coefs->horizontal_coefficients == NULL || + coefs->vertical_coefficients == NULL || + isp->params.dis_hor_coef_buf == NULL || + isp->params.dis_ver_coef_buf == NULL) + return -EINVAL; - error = copy_from_user(isp->params.dis_hor_coef_buf, - (void __user *)arg->sdis_horicoef_tbl, - isp->params.dis_hor_coef_bytes); - if (error) - return -EFAULT; - error = copy_from_user(isp->params.dis_ver_coef_buf, - (void __user *)arg->sdis_vertcoef_tbl, - isp->params.dis_ver_coef_bytes); - if (error) - return -EFAULT; - sh_css_set_dis_coefficients(isp->params.dis_hor_coef_buf, - isp->params.dis_ver_coef_buf); - } + error = copy_from_user(isp->params.dis_hor_coef_buf, + (void __user *)coefs->horizontal_coefficients, + isp->params.dis_hor_coef_bytes); + if (error) + return -EFAULT; + error = copy_from_user(isp->params.dis_ver_coef_buf, + (void __user *)coefs->vertical_coefficients, + isp->params.dis_ver_coef_bytes); + if (error) + return -EFAULT; + sh_css_set_dis_coefficients(isp->params.dis_hor_coef_buf, + isp->params.dis_ver_coef_buf); return 0; } diff --git a/drivers/media/video/atomisp/atomisp_cmd.h b/drivers/media/video/atomisp/atomisp_cmd.h index 9cc3dd1b..6587abd 100644 --- a/drivers/media/video/atomisp/atomisp_cmd.h +++ b/drivers/media/video/atomisp/atomisp_cmd.h @@ -150,10 +150,22 @@ int atomisp_gdc_cac_table(struct atomisp_device *isp, int flag, int atomisp_macc_table(struct atomisp_device *isp, int flag, void *config); /* - * Function to set/get image stablization statistics + * Function to get DIS statistics. */ -int atomisp_dis_stat(struct atomisp_device *isp, int flag, - void *config); +int atomisp_get_dis_stat(struct atomisp_device *isp, + struct atomisp_dis_statistics *stats); + +/* + * Function to set the DIS coefficients. + */ +int atomisp_set_dis_coefs(struct atomisp_device *isp, + struct atomisp_dis_coefficients *coefs); + +/* + * Function to set the DIS motion vector. + */ +int atomisp_set_dis_vector(struct atomisp_device *isp, + struct atomisp_dis_vector *vector); /* * Function to set/get 3A stat from isp @@ -183,9 +195,6 @@ int atomisp_bad_pixel(struct atomisp_device *isp, int flag, __s32 *value); int atomisp_bad_pixel_param(struct atomisp_device *isp, int flag, void *config); -int atomisp_dis_vector(struct atomisp_device *isp, - void *arg); - /* * Function to enable/disable video image stablization */ diff --git a/drivers/media/video/atomisp/atomisp_ioctl.c b/drivers/media/video/atomisp/atomisp_ioctl.c index da6a7d7..269a8c4 100644 --- a/drivers/media/video/atomisp/atomisp_ioctl.c +++ b/drivers/media/video/atomisp/atomisp_ioctl.c @@ -1650,13 +1650,16 @@ static long atomisp_vidioc_default(struct file *file, void *fh, return atomisp_ee(isp, 1, arg); case ATOMISP_IOC_G_DIS_STAT: - return atomisp_dis_stat(isp, 0, arg); + return atomisp_get_dis_stat(isp, + (struct atomisp_dis_statistics *)arg); - case ATOMISP_IOC_S_DIS_STAT: - return atomisp_dis_stat(isp, 1, arg); + case ATOMISP_IOC_S_DIS_COEFS: + return atomisp_set_dis_coefs(isp, + (struct atomisp_dis_coefficients *)arg); case ATOMISP_IOC_S_DIS_VECTOR: - return atomisp_dis_vector(isp, arg); + return atomisp_set_dis_vector(isp, + (struct atomisp_dis_vector*) arg); case ATOMISP_IOC_G_ISP_PARM: return atomisp_param(isp, 0, arg); diff --git a/drivers/media/video/atomisp/css/sh_css_binary.c b/drivers/media/video/atomisp/css/sh_css_binary.c index 6b4fae0..bbc5ebc 100644 --- a/drivers/media/video/atomisp/css/sh_css_binary.c +++ b/drivers/media/video/atomisp/css/sh_css_binary.c @@ -37,12 +37,10 @@ enum sh_css_err sh_css_binary_grid_info(struct sh_css_binary *binary, struct sh_css_grid_info *info) { - /* for DIS, we use a division instead of a ceil_div. If this is smaller - * than the 3a grid size, it indicates that the outer values are not - * valid for DIS. - */ info->dis_width = binary->dis_ver_proj_num_3a; + info->dis_aligned_width = binary->dis_ver_proj_num_isp; info->dis_height = binary->dis_hor_proj_num_3a; + info->dis_aligned_height = binary->dis_hor_proj_num_isp; info->dis_bqs_per_grid_cell = 1 << binary->dis_deci_factor_log2; info->dis_hor_coef_num = binary->dis_hor_coef_num_3a; info->dis_ver_coef_num = binary->dis_ver_coef_num_3a; diff --git a/drivers/media/video/atomisp/css/sh_css_params.c b/drivers/media/video/atomisp/css/sh_css_params.c index ebe139d..8790bbc 100644 --- a/drivers/media/video/atomisp/css/sh_css_params.c +++ b/drivers/media/video/atomisp/css/sh_css_params.c @@ -652,6 +652,35 @@ sh_css_set_dis_coefficients(const short *horizontal_coefficients, dis_coef_table_changed = true; } +#if 0 +/* This is the optimized code that uses the aligned_width and aligned_height + * for the projections. This should be enabled in the same patch set that + * adds the correct handling of these strides to the DIS IA code. + */ +void +sh_css_get_dis_projections(int *horizontal_projections, + int *vertical_projections) +{ + unsigned int hor_num_isp, ver_num_isp, + hor_bytes, ver_bytes; + int *hor_ptr_isp = dis_hor_projections[curr_valid_buffer], + *ver_ptr_isp = dis_ver_projections[curr_valid_buffer]; + + if (current_3a_binary == NULL) + return; + + hor_num_isp = current_3a_binary->dis_hor_proj_num_isp; + ver_num_isp = current_3a_binary->dis_ver_proj_num_isp; + + hor_bytes = hor_num_isp * sizeof(*horizontal_projections) * + SH_CSS_DIS_NUM_COEF_TYPES; + ver_bytes = ver_num_isp * sizeof(*vertical_projections) * + SH_CSS_DIS_NUM_COEF_TYPES; + + hrt_isp_css_mm_load(hor_ptr_isp, horizontal_projections, hor_bytes); + hrt_isp_css_mm_load(ver_ptr_isp, vertical_projections, ver_bytes); +} +#else void sh_css_get_dis_projections(int *horizontal_projections, int *vertical_projections) @@ -673,7 +702,7 @@ sh_css_get_dis_projections(int *horizontal_projections, for (i = 0; i < SH_CSS_DIS_NUM_COEF_TYPES; i++) { hrt_isp_css_mm_load(hor_ptr_isp, hor_ptr_3a, - hor_num_3a * sizeof(int)); + hor_num_3a * sizeof(int)); hor_ptr_isp += hor_num_isp; hor_ptr_3a += hor_num_3a; @@ -683,6 +712,7 @@ sh_css_get_dis_projections(int *horizontal_projections, ver_ptr_3a += ver_num_3a; } } +#endif static void get_3a_stats_from_dmem(struct sh_css_3a_output *output) diff --git a/drivers/media/video/atomisp/css/sh_css_types.h b/drivers/media/video/atomisp/css/sh_css_types.h index 86a5247..956ea58 100644 --- a/drivers/media/video/atomisp/css/sh_css_types.h +++ b/drivers/media/video/atomisp/css/sh_css_types.h @@ -470,7 +470,9 @@ struct sh_css_grid_info { unsigned int s3a_bqs_per_grid_cell; /* DIS grid: */ unsigned int dis_width; /* also used for vertical projections */ + unsigned int dis_aligned_width; unsigned int dis_height; /* also used for horizontal projections */ + unsigned int dis_aligned_height; unsigned int dis_bqs_per_grid_cell; unsigned int dis_hor_coef_num; unsigned int dis_ver_coef_num; diff --git a/drivers/media/video/atomisp/include/atomisp/atomisp_internal.h b/drivers/media/video/atomisp/include/atomisp/atomisp_internal.h index 1c5532b..7eacf18 100644 --- a/drivers/media/video/atomisp/include/atomisp/atomisp_internal.h +++ b/drivers/media/video/atomisp/include/atomisp/atomisp_internal.h @@ -194,10 +194,6 @@ struct atomisp_css_params { /* Current grid info */ struct sh_css_grid_info curr_grid_info; - /* DIS coefficients, must remain alive during execution */ - int dis_x; - int dis_y; - /* Intermediate buffers used to communicate data between CSS and user space. These are needed to perform the copy_to_user. */ diff --git a/include/linux/atomisp.h b/include/linux/atomisp.h index cd992f4..4928505 100644 --- a/include/linux/atomisp.h +++ b/include/linux/atomisp.h @@ -97,15 +97,6 @@ struct atomisp_ee_config { unsigned int detail_gain; }; -struct atomisp_dis_config { - int *w_sdis_vertproj_tbl; - int *w_sdis_horiproj_tbl; - short *sdis_vertcoef_tbl; - short *sdis_horicoef_tbl; - int dis_x; - int dis_y; -}; - struct atomisp_3a_output { int ae_y; int awb_cnt; @@ -150,12 +141,31 @@ struct atomisp_grid_info { unsigned int s3a_bqs_per_grid_cell; /* DIS grid: */ unsigned int dis_width; /* also used for vertical projections */ + unsigned int dis_aligned_width; unsigned int dis_height; /* also used for horizontal projections */ + unsigned int dis_aligned_height; unsigned int dis_bqs_per_grid_cell; unsigned int dis_hor_coef_num; unsigned int dis_ver_coef_num; }; +struct atomisp_dis_vector { + int x; + int y; +}; + +struct atomisp_dis_coefficients { + struct atomisp_grid_info grid_info; + short *vertical_coefficients; + short *horizontal_coefficients; +}; + +struct atomisp_dis_statistics { + struct atomisp_grid_info grid_info; + int *vertical_projections; + int *horizontal_projections; +}; + struct atomisp_3a_statistics { struct atomisp_grid_info grid_info; struct atomisp_3a_output *data; @@ -484,56 +494,64 @@ struct v4l2_private_int_data { _IOR('v', BASE_VIDIOC_PRIVATE + 12, struct atomisp_ee_config) #define ATOMISP_IOC_S_EE \ _IOW('v', BASE_VIDIOC_PRIVATE + 13, struct atomisp_ee_config) +/* Digital Image Stabilization: + * 1. get dis statistics: reads DIS statistics from ISP (every frame) + * 2. set dis coefficients: set DIS filter coefficients (one time) + * 3. set dis motion vecotr: set motion vector (result of DIS, every frame) + */ #define ATOMISP_IOC_G_DIS_STAT \ - _IOW('v', BASE_VIDIOC_PRIVATE + 14, struct atomisp_dis_config) -#define ATOMISP_IOC_S_DIS_STAT \ - _IOW('v', BASE_VIDIOC_PRIVATE + 15, struct atomisp_dis_config) + _IOWR('v', BASE_VIDIOC_PRIVATE + 14, struct atomisp_dis_statistics) +#define ATOMISP_IOC_S_DIS_COEFS \ + _IOW('v', BASE_VIDIOC_PRIVATE + 15, struct atomisp_dis_coefficients) +#define ATOMISP_IOC_S_DIS_VECTOR \ + _IOW('v', BASE_VIDIOC_PRIVATE + 16, struct atomisp_dis_vector) + #define ATOMISP_IOC_G_3A_STAT \ - _IOW('v', BASE_VIDIOC_PRIVATE + 16, struct atomisp_3a_statistics) + _IOW('v', BASE_VIDIOC_PRIVATE + 17, struct atomisp_3a_statistics) #define ATOMISP_IOC_G_ISP_PARM \ - _IOR('v', BASE_VIDIOC_PRIVATE + 17, struct atomisp_parm) + _IOR('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_parm) #define ATOMISP_IOC_S_ISP_PARM \ - _IOW('v', BASE_VIDIOC_PRIVATE + 18, struct atomisp_parm) + _IOW('v', BASE_VIDIOC_PRIVATE + 19, struct atomisp_parm) #define ATOMISP_IOC_G_ISP_GAMMA \ - _IOR('v', BASE_VIDIOC_PRIVATE + 19, struct atomisp_gamma_table) + _IOR('v', BASE_VIDIOC_PRIVATE + 20, struct atomisp_gamma_table) #define ATOMISP_IOC_S_ISP_GAMMA \ - _IOW('v', BASE_VIDIOC_PRIVATE + 20, struct atomisp_gamma_table) + _IOW('v', BASE_VIDIOC_PRIVATE + 21, struct atomisp_gamma_table) #define ATOMISP_IOC_G_ISP_GDC_TAB \ - _IOR('v', BASE_VIDIOC_PRIVATE + 21, struct atomisp_morph_table) + _IOR('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_morph_table) #define ATOMISP_IOC_S_ISP_GDC_TAB \ - _IOW('v', BASE_VIDIOC_PRIVATE + 22, struct atomisp_morph_table) + _IOW('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_morph_table) #define ATOMISP_IOC_ISP_MAKERNOTE \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 23, struct atomisp_makernote_info) + _IOWR('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_makernote_info) /* macc parameter control*/ #define ATOMISP_IOC_G_ISP_MACC \ - _IOR('v', BASE_VIDIOC_PRIVATE + 24, struct atomisp_macc_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 25, struct atomisp_macc_config) #define ATOMISP_IOC_S_ISP_MACC \ - _IOW('v', BASE_VIDIOC_PRIVATE + 25, struct atomisp_macc_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 26, struct atomisp_macc_config) /* Defect pixel detection & Correction */ #define ATOMISP_IOC_G_ISP_BAD_PIXEL_DETECTION \ - _IOR('v', BASE_VIDIOC_PRIVATE + 26, struct atomisp_dp_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_dp_config) #define ATOMISP_IOC_S_ISP_BAD_PIXEL_DETECTION \ - _IOW('v', BASE_VIDIOC_PRIVATE + 27, struct atomisp_dp_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 28, struct atomisp_dp_config) /* False Color Correction */ #define ATOMISP_IOC_G_ISP_FALSE_COLOR_CORRECTION \ - _IOR('v', BASE_VIDIOC_PRIVATE + 28, struct atomisp_de_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 29, struct atomisp_de_config) #define ATOMISP_IOC_S_ISP_FALSE_COLOR_CORRECTION \ - _IOW('v', BASE_VIDIOC_PRIVATE + 29, struct atomisp_de_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_de_config) /* ctc parameter control */ #define ATOMISP_IOC_G_ISP_CTC \ - _IOR('v', BASE_VIDIOC_PRIVATE + 30, struct atomisp_ctc_table) + _IOR('v', BASE_VIDIOC_PRIVATE + 31, struct atomisp_ctc_table) #define ATOMISP_IOC_S_ISP_CTC \ - _IOW('v', BASE_VIDIOC_PRIVATE + 31, struct atomisp_ctc_table) + _IOW('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_ctc_table) /* white balance Correction */ #define ATOMISP_IOC_G_ISP_WHITE_BALANCE \ - _IOR('v', BASE_VIDIOC_PRIVATE + 32, struct atomisp_wb_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 33, struct atomisp_wb_config) #define ATOMISP_IOC_S_ISP_WHITE_BALANCE \ - _IOW('v', BASE_VIDIOC_PRIVATE + 33, struct atomisp_wb_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 34, struct atomisp_wb_config) /* fpn table loading */ #define ATOMISP_IOC_S_ISP_FPN_TABLE \ @@ -553,55 +571,52 @@ struct v4l2_private_int_data { #define ATOMISP_IOC_G_SENSOR_MODE_DATA \ _IOR('v', BASE_VIDIOC_PRIVATE + 39, struct atomisp_sensor_mode_data) -#define ATOMISP_IOC_S_DIS_VECTOR \ - _IOW('v', BASE_VIDIOC_PRIVATE + 40, struct atomisp_dis_config) - #define ATOMISP_IOC_S_EXPOSURE \ - _IOW('v', BASE_VIDIOC_PRIVATE + 41, struct atomisp_exposure) + _IOW('v', BASE_VIDIOC_PRIVATE + 40, struct atomisp_exposure) /* sensor calibration registers group */ #define ATOMISP_IOC_G_SENSOR_CALIBRATION_GROUP \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 42, struct atomisp_calibration_group) + _IOWR('v', BASE_VIDIOC_PRIVATE + 41, struct atomisp_calibration_group) /* white balance Correction */ #define ATOMISP_IOC_G_3A_CONFIG \ - _IOR('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_3a_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 42, struct atomisp_3a_config) #define ATOMISP_IOC_S_3A_CONFIG \ - _IOW('v', BASE_VIDIOC_PRIVATE + 44, struct atomisp_3a_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 43, struct atomisp_3a_config) /* Accelerate ioctls */ #define ATOMISP_IOC_ACC_LOAD \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 45, struct atomisp_acc_fw_load) + _IOWR('v', BASE_VIDIOC_PRIVATE + 44, struct atomisp_acc_fw_load) #define ATOMISP_IOC_ACC_UNLOAD \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 46, unsigned int) + _IOWR('v', BASE_VIDIOC_PRIVATE + 45, unsigned int) #define ATOMISP_IOC_ACC_S_ARG \ - _IOW('v', BASE_VIDIOC_PRIVATE + 47, struct atomisp_acc_fw_arg) + _IOW('v', BASE_VIDIOC_PRIVATE + 46, struct atomisp_acc_fw_arg) #define ATOMISP_IOC_ACC_START \ - _IOW('v', BASE_VIDIOC_PRIVATE + 48, unsigned int) + _IOW('v', BASE_VIDIOC_PRIVATE + 47, unsigned int) #define ATOMISP_IOC_ACC_WAIT \ - _IOW('v', BASE_VIDIOC_PRIVATE + 49, unsigned int) + _IOW('v', BASE_VIDIOC_PRIVATE + 48, unsigned int) #define ATOMISP_IOC_ACC_ABORT \ - _IOW('v', BASE_VIDIOC_PRIVATE + 50, struct atomisp_acc_fw_abort) + _IOW('v', BASE_VIDIOC_PRIVATE + 49, struct atomisp_acc_fw_abort) /* sensor OTP memory read */ #define ATOMISP_IOC_G_SENSOR_PRIV_INT_DATA \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 51, struct v4l2_private_int_data) + _IOWR('v', BASE_VIDIOC_PRIVATE + 50, struct v4l2_private_int_data) /* LCS (shading) table write */ #define ATOMISP_IOC_S_ISP_SHD_TAB \ - _IOWR('v', BASE_VIDIOC_PRIVATE + 52, struct atomisp_shading_table) + _IOWR('v', BASE_VIDIOC_PRIVATE + 51, struct atomisp_shading_table) /* Gamma Correction */ #define ATOMISP_IOC_G_ISP_GAMMA_CORRECTION \ - _IOR('v', BASE_VIDIOC_PRIVATE + 53, struct atomisp_gc_config) + _IOR('v', BASE_VIDIOC_PRIVATE + 52, struct atomisp_gc_config) #define ATOMISP_IOC_S_ISP_GAMMA_CORRECTION \ - _IOW('v', BASE_VIDIOC_PRIVATE + 54, struct atomisp_gc_config) + _IOW('v', BASE_VIDIOC_PRIVATE + 53, struct atomisp_gc_config) /* ISP Private control IDs */ #define V4L2_CID_ATOMISP_BAD_PIXEL_DETECTION \ -- 2.7.4