Index: src/kernel/linux/v4.4_mt8183/drivers/media/platform/mtk-camera/mtk_camera_drv.c =================================================================== --- src/kernel/linux/v4.4_mt8183/drivers/media/platform/mtk-camera/mtk_camera_drv.c (revision 146) +++ src/kernel/linux/v4.4_mt8183/drivers/media/platform/mtk-camera/mtk_camera_drv.c (working copy) @@ -321,6 +321,8 @@ .stop_streaming = vb2ops_camera_stop_streaming, }; +static int camera_set_ctrls(struct mtk_camera_ctx *ctx); + static struct mtk_camera_fmt *mtk_camera_find_format(struct v4l2_format *f) { struct mtk_camera_fmt *fmt; @@ -697,6 +699,8 @@ mtk_camera_err("camera_set_format_mplane , SET_PARAM_FRAME_SIZE,format:%d",size[2]); camera_if_set_param(ctx, SET_PARAM_FRAME_SIZE, (void *)size); + if (ctx->cam_if_rdy) + camera_set_ctrls(ctx); ctx->state = MTK_STATE_INIT; } else mtk_camera_err("%s:[%d] state=(%x) invalid call", @@ -1010,7 +1014,6 @@ #define V4L2_CID_CAMERA_HDR (V4L2_CID_USER_MTK_CAMERA_BASE + 11) #define V4L2_CID_CAMERA_MULTI_OUTPUT_NUM (V4L2_CID_USER_MTK_CAMERA_BASE + 12) - static int camera_set_ctrl(struct mtk_camera_ctx *ctx, enum camera_set_param_type type, uint32_t value) { int ret = 0; @@ -1024,7 +1027,39 @@ return ret; } +static int camera_set_ctrls(struct mtk_camera_ctx *ctx) +{ + int ret = 0; + camera_set_ctrl(ctx, SET_PARAM_BRIGHTNESS, ctx->ctrls.brightness->val); + camera_set_ctrl(ctx, SET_PARAM_CONTRAST, ctx->ctrls.contrast->val); + camera_set_ctrl(ctx, SET_PARAM_SATURATION, ctx->ctrls.saturation->val); + camera_set_ctrl(ctx, SET_PARAM_SHARPNESS, ctx->ctrls.sharpness->val); + camera_set_ctrl(ctx, SET_PARAM_HUE, ctx->ctrls.hue->val); + camera_set_ctrl(ctx, SET_PARAM_GAMMA, ctx->ctrls.gamma->val); + camera_set_ctrl(ctx, SET_PARAM_AUTO_WHITE_BALANCE, ctx->ctrls.auto_white_balance->val); + camera_set_ctrl(ctx, SET_PARAM_WHITE_BALANCE_TEMP, ctx->ctrls.white_balance_temperature->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE, ctx->ctrls.exposure->val); + camera_set_ctrl(ctx, SET_PARAM_POWER_LINE_FREQ, ctx->ctrls.power_line_frequency->val); + camera_set_ctrl(ctx, SET_PARAM_MIN_FPS, ctx->ctrls.min_fps->val); + camera_set_ctrl(ctx, SET_PARAM_MAX_FPS, ctx->ctrls.max_fps->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_AUTO, ctx->ctrls.exposure_auto->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_ABSOLUTE, ctx->ctrls.exposure_absolute->val); + camera_set_ctrl(ctx, SET_PARAM_FOCUS_AUTO, ctx->ctrls.focus_auto->val); + camera_set_ctrl(ctx, SET_PARAM_FOCUS_ABSOLUTE, ctx->ctrls.focus_absolute->val); + camera_set_ctrl(ctx, SET_PARAM_SENSOR_ORIENTATION, ctx->ctrls.sensor_orientation->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_REGION_LEFT, ctx->ctrls.exposure_region_left->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_REGION_TOP, ctx->ctrls.exposure_region_top->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_REGION_RIGHT, ctx->ctrls.exposure_region_right->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_REGION_BOTTOM, ctx->ctrls.exposure_region_bottom->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_WEIGHT, ctx->ctrls.exposure_weight->val); + camera_set_ctrl(ctx, SET_PARAM_EXPOSURE_REGION_TRIGGER, ctx->ctrls.exposure_region_trigger->val); + camera_set_ctrl(ctx, SET_PARAM_ISO, ctx->ctrls.iso->val); + camera_set_ctrl(ctx, SET_PARAM_FRAME_DURATION, ctx->ctrls.frame_duration->val); + + return ret; +} + static int mtk_camera_s_ctrl(struct v4l2_ctrl *ctrl) { struct mtk_camera_ctx *ctx = ctrl_to_ctx(ctrl);