Hi Hans,
On 28 September 2012 10:23, Hans Verkuil <[email protected]> wrote:
> On Fri September 28 2012 09:48:01 Javier Martin wrote:
>> static const struct v4l2_subdev_core_ops ov7670_core_ops = {
>> .g_chip_ident = ov7670_g_chip_ident,
>> - .g_ctrl = ov7670_g_ctrl,
>> - .s_ctrl = ov7670_s_ctrl,
>> - .queryctrl = ov7670_queryctrl,
>> + .g_ext_ctrls = v4l2_subdev_g_ext_ctrls,
>> + .try_ext_ctrls = v4l2_subdev_try_ext_ctrls,
>> + .s_ext_ctrls = v4l2_subdev_s_ext_ctrls,
>> + .g_ctrl = v4l2_subdev_g_ctrl,
>> + .s_ctrl = v4l2_subdev_s_ctrl,
>> + .queryctrl = v4l2_subdev_queryctrl,
>> + .querymenu = v4l2_subdev_querymenu,
>
> Can you make a fourth patch removing these lines again after mcam-core and
> via-camera are converted to the control framework? These control ops are
> only needed if there are bridge drivers using this sensor driver that are
> not yet converted to the control framework. Since that limitation is now
> lifted, these ops can be removed as well.
Fine, I will do that.
>> .reset = ov7670_reset,
>> .init = ov7670_init,
>> #ifdef CONFIG_VIDEO_ADV_DEBUG
>> @@ -1732,7 +1630,6 @@ static int ov7670_probe(struct i2c_client *client,
>>
>> info->devtype = &ov7670_devdata[id->driver_data];
>> info->fmt = &ov7670_formats[0];
>> - info->sat = 128; /* Review this */
>> info->clkrc = 0;
>>
>> /* Set default frame rate to 30 fps */
>> @@ -1743,6 +1640,42 @@ static int ov7670_probe(struct i2c_client *client,
>> if (info->pclk_hb_disable)
>> ov7670_write(sd, REG_COM10, COM10_PCLK_HB);
>>
>> + v4l2_ctrl_handler_init(&info->hdl, 10);
>> + v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_BRIGHTNESS, 0, 255, 1, 128);
>> + v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_CONTRAST, 0, 127, 1, 64);
>> + v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_VFLIP, 0, 1, 1, 0);
>> + v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_HFLIP, 0, 1, 1, 0);
>> + info->saturation = v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_SATURATION, 0, 256, 1, 128);
>> + info->hue = v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_HUE, -180, 180, 5, 0);
>> + info->gain = v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_GAIN, 0, 255, 1, 128);
>> + info->auto_gain = v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_AUTOGAIN, 0, 1, 1, 1);
>> + info->exposure = v4l2_ctrl_new_std(&info->hdl, &ov7670_ctrl_ops,
>> + V4L2_CID_EXPOSURE, 0, 65535, 1, 500);
>> + info->auto_exposure = v4l2_ctrl_new_std_menu(&info->hdl,
>> &ov7670_ctrl_ops,
>> + V4L2_CID_EXPOSURE_AUTO, 1, 0, 0);
>> + sd->ctrl_handler = &info->hdl;
>> + if (info->hdl.error) {
>> + int err = info->hdl.error;
>> +
>> + v4l2_ctrl_handler_free(&info->hdl);
>> + kfree(info);
>> + return err;
>> + }
>> + info->gain->flags |= V4L2_CTRL_FLAG_VOLATILE;
>> + info->exposure->flags |= V4L2_CTRL_FLAG_VOLATILE;
>> + v4l2_ctrl_cluster(2, &info->auto_gain);
>> + v4l2_ctrl_cluster(2, &info->auto_exposure);
>
> You need to use v4l2_ctrl_auto_cluster for these two. Not having that function
> at the time was the reason my work on this driver stalled. The auto cluster
> functionality takes care of most of the nitty gritty details of handling
> these situations.
OK, let me take a look.
Regards.
--
Javier Martin
Vista Silicon S.L.
CDTUC - FASE C - Oficina S-345
Avda de los Castros s/n
39005- Santander. Cantabria. Spain
+34 942 25 32 60
www.vista-silicon.com
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html