diff options
Diffstat (limited to 'drivers/staging/vc04_services/bcm2835-camera/controls.c')
-rw-r--r-- | drivers/staging/vc04_services/bcm2835-camera/controls.c | 176 |
1 files changed, 81 insertions, 95 deletions
diff --git a/drivers/staging/vc04_services/bcm2835-camera/controls.c b/drivers/staging/vc04_services/bcm2835-camera/controls.c index b096a12387f7..5644d1d457b9 100644 --- a/drivers/staging/vc04_services/bcm2835-camera/controls.c +++ b/drivers/staging/vc04_services/bcm2835-camera/controls.c @@ -1,6 +1,6 @@ // SPDX-License-Identifier: GPL-2.0 /* - * Broadcom BM2835 V4L2 driver + * Broadcom BCM2835 V4L2 driver * * Copyright © 2013 Raspberry Pi (Trading) Ltd. * @@ -58,23 +58,16 @@ static const u32 iso_values[] = { 0, 100, 200, 400, 800, }; -enum bm2835_mmal_ctrl_type { +enum bcm2835_mmal_ctrl_type { MMAL_CONTROL_TYPE_STD, MMAL_CONTROL_TYPE_STD_MENU, MMAL_CONTROL_TYPE_INT_MENU, MMAL_CONTROL_TYPE_CLUSTER, /* special cluster entry */ }; -struct bm2835_mmal_v4l2_ctrl; - -typedef int(bm2835_mmal_v4l2_ctrl_cb)( - struct bm2835_mmal_dev *dev, - struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl); - -struct bm2835_mmal_v4l2_ctrl { +struct bcm2835_mmal_v4l2_ctrl { u32 id; /* v4l2 control identifier */ - enum bm2835_mmal_ctrl_type type; + enum bcm2835_mmal_ctrl_type type; /* control minimum value or * mask for MMAL_CONTROL_TYPE_STD_MENU */ @@ -84,7 +77,8 @@ struct bm2835_mmal_v4l2_ctrl { u64 step; /* step size of the control */ const s64 *imenu; /* integer menu array */ u32 mmal_id; /* mmal parameter id */ - bm2835_mmal_v4l2_ctrl_cb *setter; + int (*setter)(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl); }; struct v4l2_to_mmal_effects_setting { @@ -156,17 +150,17 @@ static const struct v4l2_mmal_scene_config scene_configs[] = { /* control handlers*/ -static int ctrl_set_rational(struct bm2835_mmal_dev *dev, +static int ctrl_set_rational(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { - struct mmal_parameter_rational rational_value; + struct s32_fract rational_value; struct vchiq_mmal_port *control; control = &dev->component[COMP_CAMERA]->control; - rational_value.num = ctrl->val; - rational_value.den = 100; + rational_value.numerator = ctrl->val; + rational_value.denominator = 100; return vchiq_mmal_port_parameter_set(dev->instance, control, mmal_ctrl->mmal_id, @@ -174,9 +168,9 @@ static int ctrl_set_rational(struct bm2835_mmal_dev *dev, sizeof(rational_value)); } -static int ctrl_set_value(struct bm2835_mmal_dev *dev, +static int ctrl_set_value(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *control; @@ -190,9 +184,9 @@ static int ctrl_set_value(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_iso(struct bm2835_mmal_dev *dev, +static int ctrl_set_iso(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *control; @@ -218,9 +212,9 @@ static int ctrl_set_iso(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_value_ev(struct bm2835_mmal_dev *dev, +static int ctrl_set_value_ev(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { s32 s32_value; struct vchiq_mmal_port *control; @@ -234,9 +228,9 @@ static int ctrl_set_value_ev(struct bm2835_mmal_dev *dev, &s32_value, sizeof(s32_value)); } -static int ctrl_set_rotate(struct bm2835_mmal_dev *dev, +static int ctrl_set_rotate(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret; u32 u32_value; @@ -263,9 +257,9 @@ static int ctrl_set_rotate(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_flip(struct bm2835_mmal_dev *dev, +static int ctrl_set_flip(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret; u32 u32_value; @@ -304,9 +298,9 @@ static int ctrl_set_flip(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_exposure(struct bm2835_mmal_dev *dev, +static int ctrl_set_exposure(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { enum mmal_parameter_exposuremode exp_mode = dev->exposure_mode_user; u32 shutter_speed = 0; @@ -360,9 +354,9 @@ static int ctrl_set_exposure(struct bm2835_mmal_dev *dev, return ret; } -static int ctrl_set_metering_mode(struct bm2835_mmal_dev *dev, +static int ctrl_set_metering_mode(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { switch (ctrl->val) { case V4L2_EXPOSURE_METERING_AVERAGE: @@ -396,9 +390,9 @@ static int ctrl_set_metering_mode(struct bm2835_mmal_dev *dev, } } -static int ctrl_set_flicker_avoidance(struct bm2835_mmal_dev *dev, +static int ctrl_set_flicker_avoidance(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *control; @@ -425,9 +419,9 @@ static int ctrl_set_flicker_avoidance(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_awb_mode(struct bm2835_mmal_dev *dev, +static int ctrl_set_awb_mode(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *control; @@ -481,9 +475,9 @@ static int ctrl_set_awb_mode(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_awb_gains(struct bm2835_mmal_dev *dev, +static int ctrl_set_awb_gains(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { struct vchiq_mmal_port *control; struct mmal_parameter_awbgains gains; @@ -495,18 +489,19 @@ static int ctrl_set_awb_gains(struct bm2835_mmal_dev *dev, else if (ctrl->id == V4L2_CID_BLUE_BALANCE) dev->blue_gain = ctrl->val; - gains.r_gain.num = dev->red_gain; - gains.b_gain.num = dev->blue_gain; - gains.r_gain.den = gains.b_gain.den = 1000; + gains.r_gain.numerator = dev->red_gain; + gains.r_gain.denominator = 1000; + gains.b_gain.numerator = dev->blue_gain; + gains.b_gain.denominator = 1000; return vchiq_mmal_port_parameter_set(dev->instance, control, mmal_ctrl->mmal_id, &gains, sizeof(gains)); } -static int ctrl_set_image_effect(struct bm2835_mmal_dev *dev, +static int ctrl_set_image_effect(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret = -EINVAL; int i, j; @@ -561,9 +556,9 @@ exit: return (ret == 0 ? 0 : -EINVAL); } -static int ctrl_set_colfx(struct bm2835_mmal_dev *dev, +static int ctrl_set_colfx(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret; struct vchiq_mmal_port *control; @@ -585,9 +580,9 @@ static int ctrl_set_colfx(struct bm2835_mmal_dev *dev, return (ret == 0 ? 0 : -EINVAL); } -static int ctrl_set_bitrate(struct bm2835_mmal_dev *dev, +static int ctrl_set_bitrate(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret; struct vchiq_mmal_port *encoder_out; @@ -613,9 +608,9 @@ static int ctrl_set_bitrate(struct bm2835_mmal_dev *dev, return 0; } -static int ctrl_set_bitrate_mode(struct bm2835_mmal_dev *dev, +static int ctrl_set_bitrate_mode(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 bitrate_mode; struct vchiq_mmal_port *encoder_out; @@ -640,9 +635,9 @@ static int ctrl_set_bitrate_mode(struct bm2835_mmal_dev *dev, return 0; } -static int ctrl_set_image_encode_output(struct bm2835_mmal_dev *dev, +static int ctrl_set_image_encode_output(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *jpeg_out; @@ -656,9 +651,9 @@ static int ctrl_set_image_encode_output(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_video_encode_param_output(struct bm2835_mmal_dev *dev, +static int ctrl_set_video_encode_param_output(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { u32 u32_value; struct vchiq_mmal_port *vid_enc_ctl; @@ -672,9 +667,9 @@ static int ctrl_set_video_encode_param_output(struct bm2835_mmal_dev *dev, &u32_value, sizeof(u32_value)); } -static int ctrl_set_video_encode_profile_level(struct bm2835_mmal_dev *dev, +static int ctrl_set_video_encode_profile_level(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { struct mmal_parameter_video_profile param; int ret = 0; @@ -783,9 +778,9 @@ static int ctrl_set_video_encode_profile_level(struct bm2835_mmal_dev *dev, return ret; } -static int ctrl_set_scene_mode(struct bm2835_mmal_dev *dev, +static int ctrl_set_scene_mode(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl *ctrl, - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl) + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl) { int ret = 0; int shutter_speed; @@ -890,12 +885,11 @@ static int ctrl_set_scene_mode(struct bm2835_mmal_dev *dev, return 0; } -static int bm2835_mmal_s_ctrl(struct v4l2_ctrl *ctrl) +static int bcm2835_mmal_s_ctrl(struct v4l2_ctrl *ctrl) { - struct bm2835_mmal_dev *dev = - container_of(ctrl->handler, struct bm2835_mmal_dev, - ctrl_handler); - const struct bm2835_mmal_v4l2_ctrl *mmal_ctrl = ctrl->priv; + struct bcm2835_mmal_dev *dev = container_of(ctrl->handler, struct bcm2835_mmal_dev, + ctrl_handler); + const struct bcm2835_mmal_v4l2_ctrl *mmal_ctrl = ctrl->priv; int ret; if (!mmal_ctrl || mmal_ctrl->id != ctrl->id || !mmal_ctrl->setter) { @@ -910,11 +904,11 @@ static int bm2835_mmal_s_ctrl(struct v4l2_ctrl *ctrl) return ret; } -static const struct v4l2_ctrl_ops bm2835_mmal_ctrl_ops = { - .s_ctrl = bm2835_mmal_s_ctrl, +static const struct v4l2_ctrl_ops bcm2835_mmal_ctrl_ops = { + .s_ctrl = bcm2835_mmal_s_ctrl, }; -static const struct bm2835_mmal_v4l2_ctrl v4l2_ctrls[V4L2_CTRL_COUNT] = { +static const struct bcm2835_mmal_v4l2_ctrl v4l2_ctrls[V4L2_CTRL_COUNT] = { { .id = V4L2_CID_SATURATION, .type = MMAL_CONTROL_TYPE_STD, @@ -1253,7 +1247,7 @@ static const struct bm2835_mmal_v4l2_ctrl v4l2_ctrls[V4L2_CTRL_COUNT] = { }, }; -int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev) +int bcm2835_mmal_set_all_camera_controls(struct bcm2835_mmal_dev *dev) { int c; int ret = 0; @@ -1273,31 +1267,31 @@ int bm2835_mmal_set_all_camera_controls(struct bm2835_mmal_dev *dev) return ret; } -int set_framerate_params(struct bm2835_mmal_dev *dev) +int set_framerate_params(struct bcm2835_mmal_dev *dev) { struct mmal_parameter_fps_range fps_range; int ret; - fps_range.fps_high.num = dev->capture.timeperframe.denominator; - fps_range.fps_high.den = dev->capture.timeperframe.numerator; + fps_range.fps_high.numerator = dev->capture.timeperframe.denominator; + fps_range.fps_high.denominator = dev->capture.timeperframe.numerator; if ((dev->exposure_mode_active != MMAL_PARAM_EXPOSUREMODE_OFF) && (dev->exp_auto_priority)) { /* Variable FPS. Define min FPS as 1fps. */ - fps_range.fps_low.num = 1; - fps_range.fps_low.den = 1; + fps_range.fps_low.numerator = 1; + fps_range.fps_low.denominator = 1; } else { /* Fixed FPS - set min and max to be the same */ - fps_range.fps_low.num = fps_range.fps_high.num; - fps_range.fps_low.den = fps_range.fps_high.den; + fps_range.fps_low.numerator = fps_range.fps_high.numerator; + fps_range.fps_low.denominator = fps_range.fps_high.denominator; } v4l2_dbg(1, bcm2835_v4l2_debug, &dev->v4l2_dev, "Set fps range to %d/%d to %d/%d\n", - fps_range.fps_low.num, - fps_range.fps_low.den, - fps_range.fps_high.num, - fps_range.fps_high.den); + fps_range.fps_low.numerator, + fps_range.fps_low.denominator, + fps_range.fps_high.numerator, + fps_range.fps_high.denominator); ret = vchiq_mmal_port_parameter_set(dev->instance, &dev->component[COMP_CAMERA]->output[CAM_PORT_PREVIEW], @@ -1318,11 +1312,10 @@ int set_framerate_params(struct bm2835_mmal_dev *dev) return ret; } -int bm2835_mmal_init_controls(struct bm2835_mmal_dev *dev, - struct v4l2_ctrl_handler *hdl) +int bcm2835_mmal_init_controls(struct bcm2835_mmal_dev *dev, struct v4l2_ctrl_handler *hdl) { int c; - const struct bm2835_mmal_v4l2_ctrl *ctrl; + const struct bcm2835_mmal_v4l2_ctrl *ctrl; v4l2_ctrl_handler_init(hdl, V4L2_CTRL_COUNT); @@ -1331,12 +1324,9 @@ int bm2835_mmal_init_controls(struct bm2835_mmal_dev *dev, switch (ctrl->type) { case MMAL_CONTROL_TYPE_STD: - dev->ctrls[c] = - v4l2_ctrl_new_std(hdl, - &bm2835_mmal_ctrl_ops, - ctrl->id, ctrl->min, - ctrl->max, ctrl->step, - ctrl->def); + dev->ctrls[c] = v4l2_ctrl_new_std(hdl, &bcm2835_mmal_ctrl_ops, + ctrl->id, ctrl->min, ctrl->max, + ctrl->step, ctrl->def); break; case MMAL_CONTROL_TYPE_STD_MENU: @@ -1360,20 +1350,16 @@ int bm2835_mmal_init_controls(struct bm2835_mmal_dev *dev, mask = ~mask; } - dev->ctrls[c] = - v4l2_ctrl_new_std_menu(hdl, - &bm2835_mmal_ctrl_ops, - ctrl->id, ctrl->max, - mask, ctrl->def); + dev->ctrls[c] = v4l2_ctrl_new_std_menu(hdl, &bcm2835_mmal_ctrl_ops, + ctrl->id, ctrl->max, mask, + ctrl->def); break; } case MMAL_CONTROL_TYPE_INT_MENU: - dev->ctrls[c] = - v4l2_ctrl_new_int_menu(hdl, - &bm2835_mmal_ctrl_ops, - ctrl->id, ctrl->max, - ctrl->def, ctrl->imenu); + dev->ctrls[c] = v4l2_ctrl_new_int_menu(hdl, &bcm2835_mmal_ctrl_ops, + ctrl->id, ctrl->max, + ctrl->def, ctrl->imenu); break; case MMAL_CONTROL_TYPE_CLUSTER: |