On 05/08/2014 11:30 PM, Marcio Campos de Lima wrote: > I have also tried these settings > > #define VIDIOC_AVANCA_ZOOM (0x009a0000|0x900)+14 > #define VIDIOC_RECUA_ZOOM (0x009a0000|0x900)+14
All controls must have unique IDs, which is clearly not the case for these two ZOOM controls. You say you have problems with setting AVANCA_ZOOM, but you don't provide the code in s_ctrl that actually handles that control, so that makes it impossible to tell what's going on. In addition I see a 'return 1' in s_ctrl, which makes no sense since return codes from s_ctrl must either be 0 (for success) or negative (for error codes). You really need to give more info (post the entire source?) if you want help. Regards, Hans > #define VIDIOC_ATIVA_FLASH (0x009a0000|0x900)+3 > #define VIDIOC_WHITE_BALANCE (0x009a0000|0x900)+13 > > Em 08/05/2014, à(s) 18:01, Guennadi Liakhovetski <g.liakhovet...@gmx.de> > escreveu: > >> On Thu, 8 May 2014, Marcio Campos de Lima wrote: >> >>> Hi Guennadi >>> Thank you very much for your answer. >>> The driver is a modified OV5642.c for the Omnivision OV5642 sensor. The >>> platform is a custom AT91SAM9M10 board with a camera paralell interface. >>> the driver is working quite well (capturing images) apart the set control >>> interface. >> >> So, you're using the atmel-isi camera _host_ driver. >> >>> Unfortunately I cannot move to the most current kernel now. >> >> I don't find VIDIOC_AVANCA_ZOOM in the mainline kernel, it seems to be a >> part of your modification, so, I don't think I can help you, sorry. >> >> Thanks >> Guennadi >> >>> Thanks again >>> Regards >>> Marcio >>> Em 08/05/2014, à(s) 17:14, Guennadi Liakhovetski <g.liakhovet...@gmx.de> >>> escreveu: >>> >>>> Hi Marcio, >>>> >>>> Firstly, please direct all V4L related questions to the linux-media list >>>> (added to CC), secondly, your problem will have much better chances to >>>> attract attention if you use a current kernel, thirdly, please, specify >>>> which camera host driver / which ARM platform you're dealing with. >>>> >>>> Thanks >>>> Guennadi >>>> >>>> On Thu, 8 May 2014, Marcio Campos de Lima wrote: >>>> >>>>> Hi >>>>> >>>>> Can anybody tell me why the set control function is not working in Linux >>>>> 3.6.9? Thanks. >>>>> >>>>> —— APPLICATION CALL —— >>>>> struct v4l2_control controle; >>>>> controle.id = VIDIOC_AVANCA_ZOOM; >>>>> controle.value = time; >>>>> if (-1 == xioctl(fd_camera, VIDIOC_S_CTRL,&controle)) >>>>> { >>>>> printf ("%s erro\n",__FUNCTION__); >>>>> perror ("erro iotcl"); >>>>> } >>>>> >>>>> The ioctl call returns with invalid argument. It is amazing because the >>>>> first time the ioctl is called it is executed ok. Then no more call is >>>>> allowed and return the invalid >>>>> >>>>> below is the device driver code I think may be relevant. >>>>> >>>>> v4l2_ctrl_handler_init(&priv->ctrls, ARRAY_SIZE(ov5642_ctrls)); >>>>> printk ("handler_init\n"); >>>>> v4l2_ctrl_new_std(&priv->ctrls, >>>>> &ov5642_ctrl_ops,V4L2_CID_ZOOM_RELATIVE, -1000, 1000, 1, 500); >>>>> v4l2_ctrl_new_std(&priv->ctrls, &ov5642_ctrl_ops,V4L2_CID_FLASH_STROBE, >>>>> -100, 100, 1, 5); >>>>> >>>>> >>>>> priv->subdev.ctrl_handler=&priv->ctrls; >>>>> v4l2_i2c_subdev_init(&priv->subdev, client, &ov5642_subdev_ops); >>>>> return ov5642_video_probe(client); >>>>> >>>>> static int ov5642_s_ctrl(struct v4l2_ctrl *ctrl) >>>>> { >>>>> struct ov5642 *ov5642 = >>>>> container_of(ctrl->handler, struct ov5642, ctrls); >>>>> struct i2c_client *client = v4l2_get_subdevdata(&ov5642->subdev); >>>>> u16 data; >>>>> int ret; >>>>> printk ("%s: id=%08x val=%d\n",__FUNCTION__, ctrl->id, ctrl->val); >>>>> switch (ctrl->id) { >>>>> case V4L2_CID_DO_WHITE_BALANCE: >>>>> ov5640_set_wb_oem(client, ctrl->val); >>>>> break; >>>>> case V4L2_CID_EXPOSURE: >>>>> >>>>> break; >>>>> case V4L2_CID_GAIN: >>>>> /* Gain is controlled by 2 analog stages and a digital stage. >>>>> * Valid values for the 3 stages are >>>>> * >>>>> * Stage Min Max Step >>>>> * ------------------------------------------ >>>>> * First analog stage x1 x2 1 >>>>> * Second analog stage x1 x4 0.125 >>>>> * Digital stage x1 x16 0.125 >>>>> * >>>>> * To minimize noise, the gain stages should be used in the >>>>> * second analog stage, first analog stage, digital stage order. >>>>> * Gain from a previous stage should be pushed to its maximum >>>>> * value before the next stage is used. >>>>> */ >>>>> if (ctrl->val <= 32) { >>>>> data = ctrl->val; >>>>> } else if (ctrl->val <= 64) { >>>>> ctrl->val &= ~1; >>>>> data = (1 << 6) | (ctrl->val >> 1); >>>>> } else { >>>>> ctrl->val &= ~7; >>>>> data = ((ctrl->val - 64) << 5) | (1 << 6) | 32; >>>>> } >>>>> break; >>>>> case V4L2_CID_ZOOM_RELATIVE: >>>>> if (ctrl->val>0) >>>>> avanca_zoom(sysPriv.v4l2_int_device, ctrl->val); >>>>> else >>>>> recua_zoom(sysPriv.v4l2_int_device, ctrl->val); >>>>> >>>>> break; >>>>> case V4L2_CID_BRIGHTNESS: >>>>> ov5640_set_brightness(client, ctrl->val); >>>>> break; >>>>> case V4L2_CID_CONTRAST: >>>>> ov5640_set_contrast(client, ctrl->val); >>>>> break; >>>>> case V4L2_CID_FLASH_STROBE: >>>>> ativa_flash (sysPriv.v4l2_int_device, ctrl->val); >>>>> break; >>>>> case V4L2_CID_VFLIP: >>>>> >>>>> case V4L2_CID_TEST_PATTERN: >>>>> >>>>> >>>>> >>>>> case V4L2_CID_BLC_AUTO: >>>>> >>>>> case V4L2_CID_BLC_TARGET_LEVEL: >>>>> >>>>> case V4L2_CID_BLC_ANALOG_OFFSET: >>>>> >>>>> case V4L2_CID_BLC_DIGITAL_OFFSET: >>>>> return 1; >>>>> } >>>>> >>>>> return 0; >>>>> } >>>>> >>>>> static struct v4l2_ctrl_ops ov5642_ctrl_ops = { >>>>> .s_ctrl = ov5642_s_ctrl, >>>>> }; >>>>> >>>>> >>>>> _______________________________________________ >>>>> linux-arm-kernel mailing list >>>>> linux-arm-ker...@lists.infradead.org >>>>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel >>>>> >>>> >>>> --- >>>> Guennadi Liakhovetski, Ph.D. >>>> Freelance Open-Source Software Developer >>>> http://www.open-technology.de/ >>> >> >> --- >> Guennadi Liakhovetski, Ph.D. >> Freelance Open-Source Software Developer >> http://www.open-technology.de/ > > -- > 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 > -- 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