On Friday 27 April 2012 16:23:31 Sylwester Nawrocki wrote:
> This patch is just for testing the new controls, it is NOT
> intended for merging upstream.
> 
> Signed-off-by: Sylwester Nawrocki <s.nawro...@samsung.com>
> Signed-off-by: Kyungmin Park <kyungmin.p...@samsung.com>
> ---
>  drivers/media/video/vivi.c |  111 
> +++++++++++++++++++++++++++++++++++++++++++-
>  1 file changed, 110 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/media/video/vivi.c b/drivers/media/video/vivi.c
> index d64d482..cbe103e 100644
> --- a/drivers/media/video/vivi.c
> +++ b/drivers/media/video/vivi.c
> @@ -179,6 +179,29 @@ struct vivi_dev {
>       struct v4l2_ctrl           *bitmask;
>       struct v4l2_ctrl           *int_menu;
>  
> +     struct v4l2_ctrl           *exposure_bias;
> +     struct v4l2_ctrl           *metering;
> +     struct v4l2_ctrl           *wb_preset;
> +     struct {
> +             /* iso/auto iso cluster */
> +             struct v4l2_ctrl  *auto_iso;
> +             struct v4l2_ctrl  *iso;
> +     };
> +     struct {
> +             /* continuous auto focus/auto focus cluster */
> +             struct v4l2_ctrl  *focus_auto;
> +             struct v4l2_ctrl  *af_start;
> +             struct v4l2_ctrl  *af_stop;
> +             struct v4l2_ctrl  *af_status;
> +             struct v4l2_ctrl  *af_distance;
> +             struct v4l2_ctrl  *af_area;
> +     };
> +     struct v4l2_ctrl          *scene_mode;
> +     struct v4l2_ctrl          *lock_3a;
> +     struct v4l2_ctrl          *colorfx;
> +     struct v4l2_ctrl          *wdr;
> +     struct v4l2_ctrl          *stabilization;
> +

Why add these controls to vivi? It doesn't belong here.

Regards,

        Hans

>       spinlock_t                 slock;
>       struct mutex               mutex;
>  
> @@ -208,6 +231,14 @@ struct vivi_dev {
>       u8                         line[MAX_WIDTH * 4];
>  };
>  
> +static const s64 vivi_iso_qmenu[] = {
> +     50, 100, 200, 400, 800, 1600
> +};
> +
> +static const s64 vivi_ev_bias_qmenu[] = {
> +     -1500, -1000, -500, 0, 500, 1000, 1500
> +};
> +
>  /* ------------------------------------------------------------------
>       DMA and thread functions
>     ------------------------------------------------------------------*/
> @@ -516,6 +547,10 @@ static void vivi_fillbuff(struct vivi_dev *dev, struct 
> vivi_buffer *buf)
>               gen_text(dev, vbuf, line++ * 16, 16, str);
>       }
>  
> +     snprintf(str, sizeof(str), " auto iso: %s, iso: %lld ",
> +              dev->auto_iso->cur.val ? "on" : "off",
> +              vivi_iso_qmenu[dev->iso->cur.val]);
> +
>       dev->mv_count += 2;
>  
>       buf->vb.v4l2_buf.field = dev->field;
> @@ -1023,6 +1058,13 @@ static int vivi_s_ctrl(struct v4l2_ctrl *ctrl)
>  
>       if (ctrl == dev->button)
>               dev->button_pressed = 30;
> +
> +     if (ctrl->type == V4L2_CTRL_TYPE_STRING)
> +             return 0;
> +
> +     dprintk(dev, 1, "%s: control: %s, val: %d, val64: %lld",
> +             __func__, ctrl->name, ctrl->val, ctrl->val64);
> +
>       return 0;
>  }
>  
> @@ -1267,7 +1309,8 @@ static int __init vivi_create_instance(int inst)
>       dev->width = 640;
>       dev->height = 480;
>       hdl = &dev->ctrl_handler;
> -     v4l2_ctrl_handler_init(hdl, 11);
> +     v4l2_ctrl_handler_init(hdl, 26);
> +
>       dev->volume = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
>                       V4L2_CID_AUDIO_VOLUME, 0, 255, 1, 200);
>       dev->brightness = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> @@ -1290,11 +1333,77 @@ static int __init vivi_create_instance(int inst)
>       dev->string = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_string, NULL);
>       dev->bitmask = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_bitmask, NULL);
>       dev->int_menu = v4l2_ctrl_new_custom(hdl, &vivi_ctrl_int_menu, NULL);
> +
> +     dev->wb_preset = v4l2_ctrl_new_std_menu(hdl,
> +                     &vivi_ctrl_ops, V4L2_CID_AUTO_N_PRESET_WHITE_BALANCE,
> +                     9, ~0x3ff, V4L2_WHITE_BALANCE_AUTO);
> +
> +     dev->exposure_bias = v4l2_ctrl_new_std_int_menu(hdl,
> +                     &vivi_ctrl_ops, V4L2_CID_AUTO_EXPOSURE_BIAS,
> +                     ARRAY_SIZE(vivi_ev_bias_qmenu) - 1,
> +                     ARRAY_SIZE(vivi_ev_bias_qmenu)/2 - 1,
> +                     vivi_ev_bias_qmenu);
> +
> +     dev->metering = v4l2_ctrl_new_std_menu(hdl,
> +                     &vivi_ctrl_ops, V4L2_CID_EXPOSURE_METERING,
> +                     2, ~0x7, V4L2_EXPOSURE_METERING_AVERAGE);
> +
> +     /* ISO cluster */
> +     dev->auto_iso = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_ISO_SENSITIVITY_AUTO, 0, 1, 1, 1);
> +
> +     dev->iso = v4l2_ctrl_new_std_int_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_ISO_SENSITIVITY, ARRAY_SIZE(vivi_iso_qmenu) - 
> 1,
> +                     ARRAY_SIZE(vivi_iso_qmenu)/2 - 1, vivi_iso_qmenu);
> +
> +     /* Auto focus cluster */
> +     dev->focus_auto = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_FOCUS_AUTO, 0, 1, 1, 0);
> +
> +     dev->af_start = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_AUTO_FOCUS_START, 0, 1, 1, 0);
> +
> +     dev->af_stop = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_AUTO_FOCUS_STOP, 0, 1, 1, 0);
> +
> +     dev->af_status = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_AUTO_FOCUS_STATUS, 0, 0x07, 0, 0);
> +
> +     dev->af_distance = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_AUTO_FOCUS_DISTANCE,
> +                     2, 0, V4L2_AUTO_FOCUS_DISTANCE_NORMAL);
> +
> +     dev->af_area = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_AUTO_FOCUS_AREA, 1, 0,
> +                     V4L2_AUTO_FOCUS_AREA_ALL);
> +
> +     dev->colorfx = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_COLORFX, 15, 0, V4L2_COLORFX_NONE);
> +
> +     dev->wdr = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_WIDE_DYNAMIC_RANGE, 1, 0, 0);
> +
> +     dev->stabilization = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_IMAGE_STABILIZATION, 1, 0, 0);
> +
> +     dev->lock_3a = v4l2_ctrl_new_std(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_3A_LOCK, 0, 0x7, 0, 0);
> +
> +     dev->scene_mode = v4l2_ctrl_new_std_menu(hdl, &vivi_ctrl_ops,
> +                     V4L2_CID_SCENE_MODE, 13, ~0x1fff,
> +                     V4L2_SCENE_MODE_NONE);
> +
>       if (hdl->error) {
>               ret = hdl->error;
>               goto unreg_dev;
>       }
>       v4l2_ctrl_auto_cluster(2, &dev->autogain, 0, true);
> +
> +     v4l2_ctrl_auto_cluster(2, &dev->auto_iso, 0, false);
> +     dev->af_status->flags |= V4L2_CTRL_FLAG_VOLATILE;
> +     v4l2_ctrl_cluster(6, &dev->focus_auto);
> +     dev->lock_3a->flags |= V4L2_CTRL_FLAG_VOLATILE;
> +
>       dev->v4l2_dev.ctrl_handler = hdl;
>  
>       /* initialize locks */
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to