I have also tried these settings #define VIDIOC_AVANCA_ZOOM (0x009a0000|0x900)+14 #define VIDIOC_RECUA_ZOOM (0x009a0000|0x900)+14 #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