On Fri, Aug 30, 2013 at 10:09 PM, Darryl <ddegraff@xxxxxxxxx> wrote: > I am working on an application involving the davinci using the vpif. My > board file has the inputs configured to use VPIF_IF_RAW_BAYER if_type. > When my application starts up, I have it enumerate the formats > (VIDIOC_ENUM_FMT) and it indicates that the only available format is > "YCbCr4:2:2 YC Planar" (from vpif_enum_fmt_vid_cap). It looks to me that > the culprit is vpif_open(). > > struct channel_obj.vpifparams.iface is initialized at vpif_probe() time in > the function vpif_set_input. Open the device file (/dev/video0) overwrites > this. I suspect that it is __not__ supposed to do this, since I don't see > any method for restoring the iface. > NAK, Ideally the application should go in the following manner, you open the device say example /dev/video0 , then you issue a VIDIOC_ENUMINPUT IOCTL, this will enumerate the inputs then you do VIDIOC_S_INPUT this will select the input device so when this IOCTL is called vpif_s_input() is called in vpif_capture driver this function will internally call the vpif_set_input() which will set the iface for you on line 1327. In the probe it calls vpif_set_input() to select input 0 as a default device. Hope this clears your doubt. Regards, --Prabhakar Lad > I'm using linux-3.10.4, but the problem appears in 3.10.9, 3.11.rc7 and a > version I checked out at > https://git.kernel.org/cgit/linux/kernel/git/nsekhar/linux-davinci.git. I > have supplied a patch for 3.10.9. > > > diff -pubwr > linux-3.10.9-pristine/drivers/media/platform/davinci/vpif_capture.c > linux-3.10.9/drivers/media/platform/davinci/vpif_capture.c > --- linux-3.10.9-pristine/drivers/media/platform/davinci/vpif_capture.c > 2013-08-20 17:40:47.000000000 -0500 > +++ linux-3.10.9/drivers/media/platform/davinci/vpif_capture.c 2013-08-30 > 11:18:29.000000000 -0500 > @@ -914,9 +914,11 @@ static int vpif_open(struct file *filep) > fh->initialized = 0; > /* If decoder is not initialized. initialize it */ > if (!ch->initialized) { > + struct vpif_interface iface = ch->vpifparams.iface; > fh->initialized = 1; > ch->initialized = 1; > memset(&(ch->vpifparams), 0, sizeof(struct vpif_params)); > + ch->vpifparams.iface = iface; > } > /* Increment channel usrs counter */ > ch->usrs++; > > > > > _______________________________________________ > Davinci-linux-open-source mailing list > Davinci-linux-open-source@xxxxxxxxxxxxxxxxxxxx > http://linux.davincidsp.com/mailman/listinfo/davinci-linux-open-source -- To unsubscribe from this list: send the line "unsubscribe linux-media" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html