Sophie

Sophie

distrib > Mandriva > 2010.1 > i586 > by-pkgid > 5c710d7790f885bcc8dd115ae6a7763f > files > 57

syntek-2.1.0-1mdv2010.1.i586.rpm

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<title>SyntekUSBVideoCamera: stk11xx-v4l.c Source File</title>
<link href="tabs.css" rel="stylesheet" type="text/css">
<link href="doxygen.css" rel="stylesheet" type="text/css">
</head><body>
<!-- Generated by Doxygen 1.5.9 -->
<div class="navigation" id="top">
  <div class="tabs">
    <ul>
      <li><a href="index.html"><span>Main&nbsp;Page</span></a></li>
      <li class="current"><a href="files.html"><span>Files</span></a></li>
    </ul>
  </div>
  <div class="tabs">
    <ul>
      <li><a href="files.html"><span>File&nbsp;List</span></a></li>
      <li><a href="globals.html"><span>Globals</span></a></li>
    </ul>
  </div>
<h1>stk11xx-v4l.c</h1><a href="stk11xx-v4l_8c.html">Go to the documentation of this file.</a><div class="fragment"><pre class="fragment"><a name="l00001"></a>00001 
<a name="l00034"></a>00034 <span class="preprocessor">#include &lt;linux/module.h&gt;</span>
<a name="l00035"></a>00035 <span class="preprocessor">#include &lt;linux/init.h&gt;</span>
<a name="l00036"></a>00036 <span class="preprocessor">#include &lt;linux/kernel.h&gt;</span>
<a name="l00037"></a>00037 <span class="preprocessor">#include &lt;linux/version.h&gt;</span>
<a name="l00038"></a>00038 <span class="preprocessor">#include &lt;linux/errno.h&gt;</span>
<a name="l00039"></a>00039 <span class="preprocessor">#include &lt;linux/slab.h&gt;</span>
<a name="l00040"></a>00040 <span class="preprocessor">#include &lt;linux/kref.h&gt;</span>
<a name="l00041"></a>00041 <span class="preprocessor">#include &lt;linux/vmalloc.h&gt;</span>
<a name="l00042"></a>00042 <span class="preprocessor">#include &lt;linux/mm.h&gt;</span>
<a name="l00043"></a>00043 <span class="preprocessor">#include &lt;linux/videodev.h&gt;</span>
<a name="l00044"></a>00044 
<a name="l00045"></a>00045 
<a name="l00046"></a>00046 <span class="preprocessor">#include &lt;linux/usb.h&gt;</span>
<a name="l00047"></a>00047 <span class="preprocessor">#include &lt;media/v4l2-common.h&gt;</span>
<a name="l00048"></a>00048 <span class="preprocessor">#include &lt;media/v4l2-ioctl.h&gt;</span>
<a name="l00049"></a>00049 
<a name="l00050"></a>00050 <span class="preprocessor">#include "<a class="code" href="stk11xx_8h.html" title="Driver for Syntek USB video camera.">stk11xx.h</a>"</span>
<a name="l00051"></a>00051 
<a name="l00052"></a>00052 
<a name="l00053"></a><a class="code" href="stk11xx-v4l_8c.html#00a41f99999840e48ab4ae826e53b569">00053</a> <span class="keyword">static</span> <span class="keyword">struct </span>v4l2_file_operations <a class="code" href="stk11xx-v4l_8c.html#00a41f99999840e48ab4ae826e53b569">v4l_stk11xx_fops</a>;
<a name="l00054"></a>00054 
<a name="l00055"></a>00055 
<a name="l00060"></a><a class="code" href="stk11xx_8h.html#4977da08718c28052dab2096023754e2">00060</a> <span class="keyword">const</span> <span class="keyword">struct </span>stk11xx_coord <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES] = {
<a name="l00061"></a>00061     {   80,   60 },
<a name="l00062"></a>00062     {  128,   96 },
<a name="l00063"></a>00063     {  160,  120 },
<a name="l00064"></a>00064     {  213,  160 },
<a name="l00065"></a>00065     {  320,  240 },
<a name="l00066"></a>00066     {  640,  480 },
<a name="l00067"></a>00067     {  800,  600 },
<a name="l00068"></a>00068     { 1024,  768 },
<a name="l00069"></a>00069     { 1280, 1024 }
<a name="l00070"></a>00070 };
<a name="l00071"></a>00071 
<a name="l00072"></a>00072 
<a name="l00077"></a><a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">00077</a> <span class="keyword">static</span> <span class="keyword">struct </span>v4l2_queryctrl <a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[] = {
<a name="l00078"></a>00078     {
<a name="l00079"></a>00079         .id      = V4L2_CID_BRIGHTNESS,
<a name="l00080"></a>00080         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00081"></a>00081         .name    = <span class="stringliteral">"Brightness"</span>,
<a name="l00082"></a>00082         .minimum = 0,
<a name="l00083"></a>00083         .maximum = 0xff00,
<a name="l00084"></a>00084         .step    = 1,
<a name="l00085"></a>00085         .default_value = 0x7f00,
<a name="l00086"></a>00086     },
<a name="l00087"></a>00087     {
<a name="l00088"></a>00088         .id      = V4L2_CID_WHITENESS,
<a name="l00089"></a>00089         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00090"></a>00090         .name    = <span class="stringliteral">"Whiteness"</span>,
<a name="l00091"></a>00091         .minimum = 0,
<a name="l00092"></a>00092         .maximum = 0xff00,
<a name="l00093"></a>00093         .step    = 1,
<a name="l00094"></a>00094         .default_value = 0x7f00,
<a name="l00095"></a>00095     },
<a name="l00096"></a>00096     {
<a name="l00097"></a>00097         .id      = V4L2_CID_SATURATION,
<a name="l00098"></a>00098         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00099"></a>00099         .name    = <span class="stringliteral">"Saturation"</span>,
<a name="l00100"></a>00100         .minimum = 0,
<a name="l00101"></a>00101         .maximum = 0xff00,
<a name="l00102"></a>00102         .step    = 1,
<a name="l00103"></a>00103         .default_value = 0x7f00,
<a name="l00104"></a>00104     },
<a name="l00105"></a>00105     {
<a name="l00106"></a>00106         .id      = V4L2_CID_CONTRAST,
<a name="l00107"></a>00107         .type    = V4L2_CTRL_TYPE_INTEGER,
<a name="l00108"></a>00108         .name    = <span class="stringliteral">"Contrast"</span>,
<a name="l00109"></a>00109         .minimum = 0,
<a name="l00110"></a>00110         .maximum = 0xff00,
<a name="l00111"></a>00111         .step    = 1,
<a name="l00112"></a>00112         .default_value = 0x7f00,
<a name="l00113"></a>00113     },
<a name="l00114"></a>00114 };
<a name="l00115"></a>00115 
<a name="l00116"></a>00116 
<a name="l00128"></a><a class="code" href="stk11xx_8h.html#ee51a96a13692d189e6d91bd781afa7f">00128</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(<span class="keyword">struct</span> usb_stk11xx *dev, <span class="keywordtype">int</span> width, <span class="keywordtype">int</span> height)
<a name="l00129"></a>00129 {
<a name="l00130"></a>00130     <span class="keywordtype">int</span> i;
<a name="l00131"></a>00131     <span class="keywordtype">int</span> find;
<a name="l00132"></a>00132 
<a name="l00133"></a>00133 
<a name="l00134"></a>00134     <span class="comment">// Check width and height</span>
<a name="l00135"></a>00135     <span class="comment">// Notice : this test is usefull for the Kopete application !</span>
<a name="l00136"></a>00136 
<a name="l00137"></a>00137     <span class="comment">// Driver can't build an image smaller than the minimal resolution !</span>
<a name="l00138"></a>00138     <span class="keywordflow">if</span> ((width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l00139"></a>00139             || (height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)) {
<a name="l00140"></a>00140         width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l00141"></a>00141         height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l00142"></a>00142     }
<a name="l00143"></a>00143 
<a name="l00144"></a>00144     <span class="comment">// Driver can't build an image bigger than the maximal resolution !</span>
<a name="l00145"></a>00145     <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00146"></a>00146         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00147"></a>00147             <span class="keywordflow">if</span> ((width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x)
<a name="l00148"></a>00148                 || (height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y)) {
<a name="l00149"></a>00149                 width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x;
<a name="l00150"></a>00150                 height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y;
<a name="l00151"></a>00151             }
<a name="l00152"></a>00152             <span class="keywordflow">break</span>;
<a name="l00153"></a>00153 
<a name="l00154"></a>00154         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00155"></a>00155             <span class="keywordflow">if</span> ((width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].x)
<a name="l00156"></a>00156                 || (height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].y)) {
<a name="l00157"></a>00157                 width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].x;
<a name="l00158"></a>00158                 height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-3-1].y;
<a name="l00159"></a>00159             }
<a name="l00160"></a>00160             <span class="keywordflow">break</span>;
<a name="l00161"></a>00161 
<a name="l00162"></a>00162         <span class="keywordflow">default</span>:
<a name="l00163"></a>00163             <span class="keywordflow">return</span> -1;
<a name="l00164"></a>00164     }
<a name="l00165"></a>00165 
<a name="l00166"></a>00166 
<a name="l00167"></a>00167     <span class="comment">// Seek the best resolution</span>
<a name="l00168"></a>00168     <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00169"></a>00169         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00170"></a>00170             <span class="keywordflow">for</span> (i=0, find=0; i&lt;STK11XX_NBR_SIZES; i++) {
<a name="l00171"></a>00171                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].x &lt;= width &amp;&amp; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].y &lt;= height)
<a name="l00172"></a>00172                     find = i;
<a name="l00173"></a>00173             }
<a name="l00174"></a>00174             <span class="keywordflow">break</span>;
<a name="l00175"></a>00175 
<a name="l00176"></a>00176         <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00177"></a>00177             <span class="keywordflow">for</span> (i=0, find=0; i&lt;STK11XX_NBR_SIZES-3; i++) {
<a name="l00178"></a>00178                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].x &lt;= width &amp;&amp; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[i].y &lt;= height)
<a name="l00179"></a>00179                     find = i;
<a name="l00180"></a>00180             }
<a name="l00181"></a>00181             <span class="keywordflow">break</span>;
<a name="l00182"></a>00182 
<a name="l00183"></a>00183         <span class="keywordflow">default</span>:
<a name="l00184"></a>00184             <span class="keywordflow">return</span> -1;
<a name="l00185"></a>00185     }
<a name="l00186"></a>00186 
<a name="l00187"></a>00187     <span class="comment">// Save the new resolution</span>
<a name="l00188"></a>00188     dev-&gt;resolution = find;
<a name="l00189"></a>00189 
<a name="l00190"></a>00190     <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set mode %d [%dx%d]\n"</span>, dev-&gt;resolution,
<a name="l00191"></a>00191             <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[dev-&gt;resolution].x, <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[dev-&gt;resolution].y);
<a name="l00192"></a>00192 
<a name="l00193"></a>00193     <span class="comment">// Save the new size</span>
<a name="l00194"></a>00194     dev-&gt;view.x = width;
<a name="l00195"></a>00195     dev-&gt;view.y = height;
<a name="l00196"></a>00196 
<a name="l00197"></a>00197 
<a name="l00198"></a>00198     <span class="comment">// Calculate the frame size</span>
<a name="l00199"></a>00199     <span class="keywordflow">switch</span> (dev-&gt;resolution) {
<a name="l00200"></a>00200         <span class="keywordflow">case</span> STK11XX_80x60:
<a name="l00201"></a>00201         <span class="keywordflow">case</span> STK11XX_128x96:
<a name="l00202"></a>00202         <span class="keywordflow">case</span> STK11XX_160x120:
<a name="l00203"></a>00203         <span class="keywordflow">case</span> STK11XX_213x160:
<a name="l00204"></a>00204         <span class="keywordflow">case</span> STK11XX_320x240:
<a name="l00205"></a>00205         <span class="keywordflow">case</span> STK11XX_640x480:
<a name="l00206"></a>00206             dev-&gt;image.x = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].x;
<a name="l00207"></a>00207             dev-&gt;image.y = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].y;
<a name="l00208"></a>00208             dev-&gt;frame_size = dev-&gt;image.x * dev-&gt;image.y;
<a name="l00209"></a>00209             <span class="keywordflow">break</span>;
<a name="l00210"></a>00210 
<a name="l00211"></a>00211         <span class="keywordflow">case</span> STK11XX_800x600:
<a name="l00212"></a>00212         <span class="keywordflow">case</span> STK11XX_1024x768:
<a name="l00213"></a>00213         <span class="keywordflow">case</span> STK11XX_1280x1024:
<a name="l00214"></a>00214             dev-&gt;image.x = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].x;
<a name="l00215"></a>00215             dev-&gt;image.y = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].y;
<a name="l00216"></a>00216             dev-&gt;frame_size = dev-&gt;image.x * dev-&gt;image.y;
<a name="l00217"></a>00217             <span class="keywordflow">break</span>;
<a name="l00218"></a>00218     }
<a name="l00219"></a>00219 
<a name="l00220"></a>00220 
<a name="l00221"></a>00221     <span class="comment">// Calculate the image size</span>
<a name="l00222"></a>00222     <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l00223"></a>00223         <span class="keywordflow">case</span> STK11XX_PALETTE_RGB24:
<a name="l00224"></a>00224         <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l00225"></a>00225             dev-&gt;view_size = 3 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00226"></a>00226             dev-&gt;image_size = 3 * dev-&gt;frame_size;
<a name="l00227"></a>00227             <span class="keywordflow">break</span>;
<a name="l00228"></a>00228 
<a name="l00229"></a>00229         <span class="keywordflow">case</span> STK11XX_PALETTE_RGB32:
<a name="l00230"></a>00230         <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l00231"></a>00231             dev-&gt;view_size = 3 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00232"></a>00232             dev-&gt;image_size = 4 * dev-&gt;frame_size;
<a name="l00233"></a>00233             <span class="keywordflow">break</span>;
<a name="l00234"></a>00234 
<a name="l00235"></a>00235         <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l00236"></a>00236         <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l00237"></a>00237             dev-&gt;view_size = 2 * dev-&gt;view.x * dev-&gt;view.y;
<a name="l00238"></a>00238             dev-&gt;image_size = 2 * dev-&gt;frame_size;
<a name="l00239"></a>00239             <span class="keywordflow">break</span>;
<a name="l00240"></a>00240     }
<a name="l00241"></a>00241 
<a name="l00242"></a>00242     <span class="keywordflow">return</span> 0;
<a name="l00243"></a>00243 }
<a name="l00244"></a>00244 
<a name="l00245"></a>00245 
<a name="l00255"></a><a class="code" href="stk11xx-v4l_8c.html#a2127105dfc03d43fd4ce48f8e0417ac">00255</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#a2127105dfc03d43fd4ce48f8e0417ac" title="Open the video device.">v4l_stk11xx_open</a>(<span class="keyword">struct</span> file *fp)
<a name="l00256"></a>00256 {
<a name="l00257"></a>00257     <span class="keywordtype">int</span> err;
<a name="l00258"></a>00258 
<a name="l00259"></a>00259     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00260"></a>00260     <span class="keyword">struct </span>video_device *vdev;
<a name="l00261"></a>00261     
<a name="l00262"></a>00262     vdev = video_devdata(fp);
<a name="l00263"></a>00263     dev = video_get_drvdata(video_devdata(fp));
<a name="l00264"></a>00264 
<a name="l00265"></a>00265     <span class="keywordflow">if</span> (dev == NULL) {
<a name="l00266"></a>00266         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Device not initialized !!!\n"</span>);
<a name="l00267"></a>00267         BUG();
<a name="l00268"></a>00268     }
<a name="l00269"></a>00269 
<a name="l00270"></a>00270     <span class="keywordflow">if</span> (dev-&gt;vopen) {
<a name="l00271"></a>00271         <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Device is busy, someone is using the device\n"</span>);
<a name="l00272"></a>00272         <span class="keywordflow">return</span> -EBUSY;
<a name="l00273"></a>00273     }
<a name="l00274"></a>00274 
<a name="l00275"></a>00275     mutex_lock(&amp;dev-&gt;modlock);
<a name="l00276"></a>00276 
<a name="l00277"></a>00277     <span class="comment">// Allocate memory</span>
<a name="l00278"></a>00278     err = <a class="code" href="stk11xx-buf_8c.html#a04b5e0d601d6e4bd6a5dd53579b9628" title="Allocate all ISOC buffers.">stk11xx_allocate_buffers</a>(dev);
<a name="l00279"></a>00279 
<a name="l00280"></a>00280     <span class="keywordflow">if</span> (err &lt; 0) {
<a name="l00281"></a>00281         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Failed to allocate buffer memory !\n"</span>);
<a name="l00282"></a>00282         mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00283"></a>00283         <span class="keywordflow">return</span> err;
<a name="l00284"></a>00284     }
<a name="l00285"></a>00285     
<a name="l00286"></a>00286     <span class="comment">// Reset buffers and parameters</span>
<a name="l00287"></a>00287     <a class="code" href="stk11xx-buf_8c.html#0440ed10dc62dfbe7cec72e328dec04f" title="Reset all ISOC buffers.">stk11xx_reset_buffers</a>(dev);
<a name="l00288"></a>00288 
<a name="l00289"></a>00289     <span class="comment">// Settings</span>
<a name="l00290"></a>00290     dev-&gt;error_status = 0;
<a name="l00291"></a>00291     dev-&gt;visoc_errors = 0;
<a name="l00292"></a>00292     dev-&gt;vframes_error = 0;
<a name="l00293"></a>00293     dev-&gt;vframes_dumped = 0;
<a name="l00294"></a>00294     dev-&gt;vsettings.hue = 0xffff;
<a name="l00295"></a>00295     dev-&gt;vsettings.depth = 24;
<a name="l00296"></a>00296     dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l00297"></a>00297 
<a name="l00298"></a>00298     <span class="comment">// Select the resolution by default</span>
<a name="l00299"></a>00299     <a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, 640, 480);
<a name="l00300"></a>00300 
<a name="l00301"></a>00301     <span class="comment">// Initialize the device</span>
<a name="l00302"></a>00302     <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l00303"></a>00303     <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l00304"></a>00304     <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l00305"></a>00305 
<a name="l00306"></a>00306     <span class="comment">// Init Isoc and URB</span>
<a name="l00307"></a>00307     err = <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l00308"></a>00308 
<a name="l00309"></a>00309     <span class="keywordflow">if</span> (err) {
<a name="l00310"></a>00310         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Failed to init ISOC stuff !\n"</span>);
<a name="l00311"></a>00311         <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00312"></a>00312         <a class="code" href="stk11xx-buf_8c.html#3bc8bb033fc9697ba1e8b42be11a6efe" title="Release all buffers.">stk11xx_free_buffers</a>(dev);
<a name="l00313"></a>00313         mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00314"></a>00314         <span class="keywordflow">return</span> err;
<a name="l00315"></a>00315     }
<a name="l00316"></a>00316 
<a name="l00317"></a>00317     <span class="comment">// Start the video stream</span>
<a name="l00318"></a>00318     <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l00319"></a>00319 
<a name="l00320"></a>00320     <span class="comment">// Video settings</span>
<a name="l00321"></a>00321     <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00322"></a>00322 
<a name="l00323"></a>00323     <span class="comment">// Register interface on power management</span>
<a name="l00324"></a>00324 <span class="comment">//  usb_autopm_get_interface(dev-&gt;interface);</span>
<a name="l00325"></a>00325 
<a name="l00326"></a>00326     dev-&gt;vopen++;
<a name="l00327"></a>00327     fp-&gt;private_data = vdev;
<a name="l00328"></a>00328 
<a name="l00329"></a>00329     mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00330"></a>00330 
<a name="l00331"></a>00331     <span class="keywordflow">return</span> 0;
<a name="l00332"></a>00332 }
<a name="l00333"></a>00333 
<a name="l00334"></a>00334 
<a name="l00344"></a><a class="code" href="stk11xx-v4l_8c.html#d19987ae823d30d119e857b2719a74f2">00344</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#d19987ae823d30d119e857b2719a74f2" title="Release an opened file.">v4l_stk11xx_release</a>(<span class="keyword">struct</span> file *fp)
<a name="l00345"></a>00345 {
<a name="l00346"></a>00346     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00347"></a>00347     <span class="keyword">struct </span>video_device *vdev;
<a name="l00348"></a>00348     
<a name="l00349"></a>00349     vdev = video_devdata(fp);
<a name="l00350"></a>00350     dev = video_get_drvdata(video_devdata(fp));
<a name="l00351"></a>00351 
<a name="l00352"></a>00352     <span class="keywordflow">if</span> (dev-&gt;vopen == 0)
<a name="l00353"></a>00353         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"v4l_release called on closed device\n"</span>);
<a name="l00354"></a>00354 
<a name="l00355"></a>00355     <span class="comment">// Stop the video stream</span>
<a name="l00356"></a>00356     <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l00357"></a>00357 
<a name="l00358"></a>00358     <span class="comment">// ISOC and URB cleanup</span>
<a name="l00359"></a>00359     <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00360"></a>00360 
<a name="l00361"></a>00361     <span class="comment">// Free memory</span>
<a name="l00362"></a>00362     <a class="code" href="stk11xx-buf_8c.html#3bc8bb033fc9697ba1e8b42be11a6efe" title="Release all buffers.">stk11xx_free_buffers</a>(dev);
<a name="l00363"></a>00363 
<a name="l00364"></a>00364     <span class="comment">// Switch off the camera</span>
<a name="l00365"></a>00365     <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l00366"></a>00366 
<a name="l00367"></a>00367     <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l00368"></a>00368 
<a name="l00369"></a>00369     <span class="comment">// Unregister interface on power management</span>
<a name="l00370"></a>00370 <span class="comment">//  usb_autopm_put_interface(dev-&gt;interface);</span>
<a name="l00371"></a>00371 
<a name="l00372"></a>00372     dev-&gt;vopen--;
<a name="l00373"></a>00373 
<a name="l00374"></a>00374     <span class="keywordflow">return</span> 0;
<a name="l00375"></a>00375 }
<a name="l00376"></a>00376 
<a name="l00377"></a>00377 
<a name="l00391"></a><a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4">00391</a> <span class="keyword">static</span> ssize_t <a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4" title="Read the video device.">v4l_stk11xx_read</a>(<span class="keyword">struct</span> file *fp, <span class="keywordtype">char</span> __user *buf,
<a name="l00392"></a>00392         <span class="keywordtype">size_t</span> count, loff_t *f_pos)
<a name="l00393"></a>00393 {
<a name="l00394"></a>00394     <span class="keywordtype">int</span> noblock = fp-&gt;f_flags &amp; O_NONBLOCK;
<a name="l00395"></a>00395 
<a name="l00396"></a>00396     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00397"></a>00397     <span class="keyword">struct </span>video_device *vdev;
<a name="l00398"></a>00398 
<a name="l00399"></a>00399     <span class="keywordtype">int</span> bytes_to_read;
<a name="l00400"></a>00400     <span class="keywordtype">void</span> *image_buffer_addr;
<a name="l00401"></a>00401     
<a name="l00402"></a>00402     DECLARE_WAITQUEUE(wait, current);
<a name="l00403"></a>00403 
<a name="l00404"></a>00404     vdev = video_devdata(fp);
<a name="l00405"></a>00405     dev = video_get_drvdata(video_devdata(fp));
<a name="l00406"></a>00406 
<a name="l00407"></a>00407     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"Read vdev=0x%p, buf=0x%p, count=%zd\n"</span>, vdev, buf, count);
<a name="l00408"></a>00408 
<a name="l00409"></a>00409     <span class="keywordflow">if</span> (dev == NULL)
<a name="l00410"></a>00410         <span class="keywordflow">return</span> -EFAULT;
<a name="l00411"></a>00411 
<a name="l00412"></a>00412     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l00413"></a>00413         <span class="keywordflow">return</span> -EFAULT;
<a name="l00414"></a>00414 
<a name="l00415"></a>00415     mutex_lock(&amp;dev-&gt;modlock);
<a name="l00416"></a>00416 
<a name="l00417"></a>00417     <span class="keywordflow">if</span> (dev-&gt;image_read_pos == 0) {
<a name="l00418"></a>00418         add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00419"></a>00419 
<a name="l00420"></a>00420         <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l00421"></a>00421             <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l00422"></a>00422                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00423"></a>00423                 set_current_state(TASK_RUNNING);
<a name="l00424"></a>00424                 mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00425"></a>00425                 <span class="keywordflow">return</span> -dev-&gt;error_status ;
<a name="l00426"></a>00426             }
<a name="l00427"></a>00427 
<a name="l00428"></a>00428             <span class="keywordflow">if</span> (noblock) {
<a name="l00429"></a>00429                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00430"></a>00430                 set_current_state(TASK_RUNNING);
<a name="l00431"></a>00431                 mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00432"></a>00432                 <span class="keywordflow">return</span> -EWOULDBLOCK;
<a name="l00433"></a>00433             }
<a name="l00434"></a>00434 
<a name="l00435"></a>00435             <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l00436"></a>00436                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00437"></a>00437                 set_current_state(TASK_RUNNING);
<a name="l00438"></a>00438                 mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00439"></a>00439                 <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l00440"></a>00440             }
<a name="l00441"></a>00441 
<a name="l00442"></a>00442             schedule();
<a name="l00443"></a>00443             set_current_state(TASK_INTERRUPTIBLE);
<a name="l00444"></a>00444         }
<a name="l00445"></a>00445 
<a name="l00446"></a>00446         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00447"></a>00447         set_current_state(TASK_RUNNING);
<a name="l00448"></a>00448 
<a name="l00449"></a>00449         <span class="keywordflow">if</span> (<a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev)) {
<a name="l00450"></a>00450             mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00451"></a>00451             <span class="keywordflow">return</span> -EFAULT;
<a name="l00452"></a>00452         }
<a name="l00453"></a>00453     }
<a name="l00454"></a>00454 
<a name="l00455"></a>00455     bytes_to_read = dev-&gt;view_size;
<a name="l00456"></a>00456 
<a name="l00457"></a>00457     <span class="keywordflow">if</span> (count + dev-&gt;image_read_pos &gt; bytes_to_read)
<a name="l00458"></a>00458         count = bytes_to_read - dev-&gt;image_read_pos;
<a name="l00459"></a>00459 
<a name="l00460"></a>00460     image_buffer_addr = dev-&gt;image_data;
<a name="l00461"></a>00461     image_buffer_addr += dev-&gt;images[dev-&gt;fill_image].offset;
<a name="l00462"></a>00462     image_buffer_addr += dev-&gt;image_read_pos;
<a name="l00463"></a>00463 
<a name="l00464"></a>00464     <span class="keywordflow">if</span> (copy_to_user(buf, image_buffer_addr, count)) {
<a name="l00465"></a>00465         mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00466"></a>00466         <span class="keywordflow">return</span> -EFAULT;
<a name="l00467"></a>00467     }
<a name="l00468"></a>00468     
<a name="l00469"></a>00469     dev-&gt;image_read_pos += count;
<a name="l00470"></a>00470     
<a name="l00471"></a>00471     <span class="keywordflow">if</span> (dev-&gt;image_read_pos &gt;= bytes_to_read) {
<a name="l00472"></a>00472         dev-&gt;image_read_pos = 0;
<a name="l00473"></a>00473         <a class="code" href="stk11xx-buf_8c.html#5805bf7c1173f7f6063c1c5934c73e1b" title="Prepare the next image.">stk11xx_next_image</a>(dev);
<a name="l00474"></a>00474     }
<a name="l00475"></a>00475 
<a name="l00476"></a>00476     mutex_unlock(&amp;dev-&gt;modlock);
<a name="l00477"></a>00477 
<a name="l00478"></a>00478     <span class="keywordflow">return</span> count;
<a name="l00479"></a>00479 }
<a name="l00480"></a>00480 
<a name="l00481"></a>00481 
<a name="l00490"></a><a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b">00490</a> <span class="keyword">static</span> <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b" title="Polling function.">v4l_stk11xx_poll</a>(<span class="keyword">struct</span> file *fp, poll_table *wait)
<a name="l00491"></a>00491 {
<a name="l00492"></a>00492     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00493"></a>00493     <span class="keyword">struct </span>video_device *vdev;
<a name="l00494"></a>00494     
<a name="l00495"></a>00495     vdev = video_devdata(fp);
<a name="l00496"></a>00496     dev = video_get_drvdata(video_devdata(fp));
<a name="l00497"></a>00497 
<a name="l00498"></a>00498     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"Poll\n"</span>);
<a name="l00499"></a>00499 
<a name="l00500"></a>00500     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l00501"></a>00501         <span class="keywordflow">return</span> -EFAULT;
<a name="l00502"></a>00502 
<a name="l00503"></a>00503     <span class="keywordflow">if</span> (dev == NULL)
<a name="l00504"></a>00504         <span class="keywordflow">return</span> -EFAULT;
<a name="l00505"></a>00505 
<a name="l00506"></a>00506     poll_wait(fp, &amp;dev-&gt;wait_frame, wait);
<a name="l00507"></a>00507 
<a name="l00508"></a>00508     <span class="keywordflow">if</span> (dev-&gt;error_status)
<a name="l00509"></a>00509         <span class="keywordflow">return</span> POLLERR;
<a name="l00510"></a>00510 
<a name="l00511"></a>00511     <span class="keywordflow">if</span> (dev-&gt;full_frames != NULL)
<a name="l00512"></a>00512         <span class="keywordflow">return</span> (POLLIN | POLLRDNORM);
<a name="l00513"></a>00513 
<a name="l00514"></a>00514     <span class="keywordflow">return</span> 0;
<a name="l00515"></a>00515 }
<a name="l00516"></a>00516 
<a name="l00517"></a>00517 
<a name="l00528"></a><a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c">00528</a> <span class="keyword">static</span> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c" title="Memory map.">v4l_stk11xx_mmap</a>(<span class="keyword">struct</span> file *fp, <span class="keyword">struct</span> vm_area_struct *vma)
<a name="l00529"></a>00529 {
<a name="l00530"></a>00530     <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> i;
<a name="l00531"></a>00531 
<a name="l00532"></a>00532     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> size;
<a name="l00533"></a>00533     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> start;
<a name="l00534"></a>00534     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> pos;
<a name="l00535"></a>00535     <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> page;
<a name="l00536"></a>00536 
<a name="l00537"></a>00537     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00538"></a>00538 
<a name="l00539"></a>00539     <span class="keyword">struct </span>video_device *vdev;
<a name="l00540"></a>00540     
<a name="l00541"></a>00541     vdev = video_devdata(fp);
<a name="l00542"></a>00542     dev = video_get_drvdata(video_devdata(fp));
<a name="l00543"></a>00543 
<a name="l00544"></a>00544     <a class="code" href="stk11xx_8h.html#649dee4d247234a95351c9d56205623b">STK_STREAM</a>(<span class="stringliteral">"mmap\n"</span>);
<a name="l00545"></a>00545 
<a name="l00546"></a>00546     start = vma-&gt;vm_start;
<a name="l00547"></a>00547     size = vma-&gt;vm_end - vma-&gt;vm_start;
<a name="l00548"></a>00548 
<a name="l00549"></a>00549     <span class="comment">// Find the buffer for this mapping...</span>
<a name="l00550"></a>00550     <span class="keywordflow">for</span> (i=0; i&lt;dev-&gt;nbuffers; i++) {
<a name="l00551"></a>00551         pos = dev-&gt;images[i].offset;
<a name="l00552"></a>00552 
<a name="l00553"></a>00553         <span class="keywordflow">if</span> ((pos &gt;&gt; PAGE_SHIFT) == vma-&gt;vm_pgoff)
<a name="l00554"></a>00554             <span class="keywordflow">break</span>;
<a name="l00555"></a>00555     }
<a name="l00556"></a>00556 
<a name="l00557"></a>00557     <span class="comment">// If no buffer found !</span>
<a name="l00558"></a>00558     <span class="keywordflow">if</span> (i == <a class="code" href="stk11xx_8h.html#aece77d67ce4d8f6c8e27269d33c9d89">STK11XX_MAX_IMAGES</a>) {
<a name="l00559"></a>00559         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"mmap no buffer found !\n"</span>);
<a name="l00560"></a>00560         <span class="keywordflow">return</span> -EINVAL;
<a name="l00561"></a>00561     }
<a name="l00562"></a>00562 
<a name="l00563"></a>00563     <span class="keywordflow">if</span> (i == 0) {
<a name="l00564"></a>00564         <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> total_size;
<a name="l00565"></a>00565 
<a name="l00566"></a>00566         total_size = dev-&gt;nbuffers * dev-&gt;len_per_image;
<a name="l00567"></a>00567 
<a name="l00568"></a>00568         <span class="keywordflow">if</span> (size != dev-&gt;len_per_image &amp;&amp; size != total_size) {
<a name="l00569"></a>00569             <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Wrong size (%lu) needed to be len_per_image=%d or total_size=%lu\n"</span>,
<a name="l00570"></a>00570                 size, dev-&gt;len_per_image, total_size);
<a name="l00571"></a>00571                 
<a name="l00572"></a>00572             <span class="keywordflow">return</span> -EINVAL;
<a name="l00573"></a>00573         }
<a name="l00574"></a>00574     }
<a name="l00575"></a>00575     <span class="keywordflow">else</span> <span class="keywordflow">if</span> (size &gt; dev-&gt;len_per_image)
<a name="l00576"></a>00576         <span class="keywordflow">return</span> -EINVAL;
<a name="l00577"></a>00577 
<a name="l00578"></a>00578     vma-&gt;vm_flags |= VM_IO;
<a name="l00579"></a>00579 
<a name="l00580"></a>00580     pos = (<span class="keywordtype">unsigned</span> long) dev-&gt;image_data;
<a name="l00581"></a>00581 
<a name="l00582"></a>00582     while (size &gt; 0) {
<a name="l00583"></a>00583         page = vmalloc_to_pfn((<span class="keywordtype">void</span> *) pos);
<a name="l00584"></a>00584 
<a name="l00585"></a>00585         <span class="keywordflow">if</span> (remap_pfn_range(vma, start, page, PAGE_SIZE, PAGE_SHARED))
<a name="l00586"></a>00586             <span class="keywordflow">return</span> -EAGAIN;
<a name="l00587"></a>00587 
<a name="l00588"></a>00588         start += PAGE_SIZE;
<a name="l00589"></a>00589         pos += PAGE_SIZE;
<a name="l00590"></a>00590 
<a name="l00591"></a>00591         <span class="keywordflow">if</span> (size &gt; PAGE_SIZE)
<a name="l00592"></a>00592             size -= PAGE_SIZE;
<a name="l00593"></a>00593         <span class="keywordflow">else</span>
<a name="l00594"></a>00594             size = 0;
<a name="l00595"></a>00595     }
<a name="l00596"></a>00596 
<a name="l00597"></a>00597     <span class="keywordflow">return</span> 0;
<a name="l00598"></a>00598 }
<a name="l00599"></a>00599 
<a name="l00600"></a>00600 
<a name="l00612"></a><a class="code" href="stk11xx-v4l_8c.html#d0d6bb014a12b34811e18f02002b3c81">00612</a> <span class="keyword">static</span> <span class="keywordtype">long</span> <a class="code" href="stk11xx-v4l_8c.html#d0d6bb014a12b34811e18f02002b3c81" title="Manage IOCTL.">v4l_stk11xx_do_ioctl</a>(<span class="keyword">struct</span> file *fp,
<a name="l00613"></a>00613         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cmd, <span class="keywordtype">void</span> __user *arg)
<a name="l00614"></a>00614 {
<a name="l00615"></a>00615     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l00616"></a>00616     <span class="keyword">struct </span>video_device *vdev;
<a name="l00617"></a>00617 
<a name="l00618"></a>00618     DECLARE_WAITQUEUE(wait, current);
<a name="l00619"></a>00619     
<a name="l00620"></a>00620     vdev = video_devdata(fp);
<a name="l00621"></a>00621     dev = video_get_drvdata(video_devdata(fp));
<a name="l00622"></a>00622 
<a name="l00623"></a>00623 <span class="preprocessor">#if (CONFIG_STK11XX_DEBUG == 1)</span>
<a name="l00624"></a>00624 <span class="preprocessor"></span>    v4l_printk_ioctl(cmd);
<a name="l00625"></a>00625 <span class="preprocessor">#endif</span>
<a name="l00626"></a>00626 <span class="preprocessor"></span>
<a name="l00627"></a>00627     <span class="keywordflow">switch</span> (cmd) {
<a name="l00628"></a>00628         <span class="comment">// Video 4 Linux v1</span>
<a name="l00629"></a>00629 
<a name="l00630"></a>00630         <span class="keywordflow">case</span> VIDIOCGCAP:
<a name="l00631"></a>00631             {
<a name="l00632"></a>00632                 <span class="keyword">struct </span>video_capability *cap = arg;
<a name="l00633"></a>00633 
<a name="l00634"></a>00634                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGCAP\n"</span>);
<a name="l00635"></a>00635 
<a name="l00636"></a>00636                 memset(cap, 0, <span class="keyword">sizeof</span>(*cap));
<a name="l00637"></a>00637                 strlcpy(cap-&gt;name, <span class="stringliteral">"stk11xx"</span>, <span class="keyword">sizeof</span>(cap-&gt;name));
<a name="l00638"></a>00638                 cap-&gt;type = VID_TYPE_CAPTURE;
<a name="l00639"></a>00639                 cap-&gt;channels = 1;
<a name="l00640"></a>00640                 cap-&gt;audios = 0;
<a name="l00641"></a>00641 
<a name="l00642"></a>00642                 <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l00643"></a>00643                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l00644"></a>00644                         cap-&gt;minwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].x;
<a name="l00645"></a>00645                         cap-&gt;minheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].y;
<a name="l00646"></a>00646                         cap-&gt;maxwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].x;
<a name="l00647"></a>00647                         cap-&gt;maxheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_1280x1024].y;
<a name="l00648"></a>00648                         <span class="keywordflow">break</span>;
<a name="l00649"></a>00649 
<a name="l00650"></a>00650                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l00651"></a>00651                         cap-&gt;minwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].x;
<a name="l00652"></a>00652                         cap-&gt;minheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_80x60].y;
<a name="l00653"></a>00653                         cap-&gt;maxwidth = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].x;
<a name="l00654"></a>00654                         cap-&gt;maxheight = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_640x480].y;
<a name="l00655"></a>00655                         <span class="keywordflow">break</span>;
<a name="l00656"></a>00656                 }
<a name="l00657"></a>00657             }
<a name="l00658"></a>00658             <span class="keywordflow">break</span>;
<a name="l00659"></a>00659     
<a name="l00660"></a>00660         <span class="keywordflow">case</span> VIDIOCGCHAN:
<a name="l00661"></a>00661             {
<a name="l00662"></a>00662                 <span class="keyword">struct </span>video_channel *v = arg;
<a name="l00663"></a>00663 
<a name="l00664"></a>00664                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGCHAN\n"</span>);
<a name="l00665"></a>00665 
<a name="l00666"></a>00666                 <span class="keywordflow">if</span> (v-&gt;channel != 0)
<a name="l00667"></a>00667                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00668"></a>00668             
<a name="l00669"></a>00669                 v-&gt;flags = 0;
<a name="l00670"></a>00670                 v-&gt;tuners = 0;
<a name="l00671"></a>00671                 v-&gt;type = VIDEO_TYPE_CAMERA;
<a name="l00672"></a>00672                 strcpy(v-&gt;name, <span class="stringliteral">"Webcam"</span>);
<a name="l00673"></a>00673             }
<a name="l00674"></a>00674             <span class="keywordflow">break</span>;
<a name="l00675"></a>00675 
<a name="l00676"></a>00676         <span class="keywordflow">case</span> VIDIOCSCHAN:
<a name="l00677"></a>00677             {
<a name="l00678"></a>00678                 <span class="keyword">struct </span>video_channel *v = arg;
<a name="l00679"></a>00679 
<a name="l00680"></a>00680                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSCHAN\n"</span>);
<a name="l00681"></a>00681 
<a name="l00682"></a>00682                 <span class="keywordflow">if</span> (v-&gt;channel != 0)
<a name="l00683"></a>00683                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00684"></a>00684             }
<a name="l00685"></a>00685             <span class="keywordflow">break</span>;
<a name="l00686"></a>00686 
<a name="l00687"></a>00687         <span class="keywordflow">case</span> VIDIOCGPICT:
<a name="l00688"></a>00688             {
<a name="l00689"></a>00689                 <span class="keyword">struct </span>video_picture *p = arg;
<a name="l00690"></a>00690 
<a name="l00691"></a>00691                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGPICT\n"</span>);
<a name="l00692"></a>00692 
<a name="l00693"></a>00693                 p-&gt;brightness = dev-&gt;vsettings.brightness;
<a name="l00694"></a>00694                 p-&gt;contrast = dev-&gt;vsettings.contrast;
<a name="l00695"></a>00695                 p-&gt;whiteness = dev-&gt;vsettings.whiteness;
<a name="l00696"></a>00696                 p-&gt;colour = dev-&gt;vsettings.colour;
<a name="l00697"></a>00697                 p-&gt;depth = dev-&gt;vsettings.depth;
<a name="l00698"></a>00698                 p-&gt;palette = dev-&gt;vsettings.palette;
<a name="l00699"></a>00699                 p-&gt;hue = dev-&gt;vsettings.hue;
<a name="l00700"></a>00700 
<a name="l00701"></a>00701                 <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l00702"></a>00702                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l00703"></a>00703                         p-&gt;palette = VIDEO_PALETTE_RGB24;
<a name="l00704"></a>00704                         <span class="keywordflow">break</span>;
<a name="l00705"></a>00705 
<a name="l00706"></a>00706                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l00707"></a>00707                         p-&gt;palette = VIDEO_PALETTE_RGB32;
<a name="l00708"></a>00708                         <span class="keywordflow">break</span>;
<a name="l00709"></a>00709 
<a name="l00710"></a>00710                     <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l00711"></a>00711                         p-&gt;palette = VIDEO_PALETTE_UYVY;
<a name="l00712"></a>00712                         <span class="keywordflow">break</span>;
<a name="l00713"></a>00713 
<a name="l00714"></a>00714                     <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l00715"></a>00715                         p-&gt;palette = VIDEO_PALETTE_YUYV;
<a name="l00716"></a>00716                         <span class="keywordflow">break</span>;
<a name="l00717"></a>00717                 }
<a name="l00718"></a>00718             }
<a name="l00719"></a>00719             <span class="keywordflow">break</span>;
<a name="l00720"></a>00720 
<a name="l00721"></a>00721         <span class="keywordflow">case</span> VIDIOCSPICT:
<a name="l00722"></a>00722             {
<a name="l00723"></a>00723                 <span class="keyword">struct </span>video_picture *p = arg;
<a name="l00724"></a>00724 
<a name="l00725"></a>00725                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSPICT\n"</span>);
<a name="l00726"></a>00726 
<a name="l00727"></a>00727                 dev-&gt;vsettings.brightness = p-&gt;brightness;
<a name="l00728"></a>00728                 dev-&gt;vsettings.contrast = p-&gt;contrast;
<a name="l00729"></a>00729                 dev-&gt;vsettings.whiteness = p-&gt;whiteness;
<a name="l00730"></a>00730                 dev-&gt;vsettings.colour = p-&gt;colour;
<a name="l00731"></a>00731                 dev-&gt;vsettings.hue = p-&gt;hue;
<a name="l00732"></a>00732                 
<a name="l00733"></a>00733                 <span class="keywordflow">if</span> (p-&gt;palette &amp;&amp; p-&gt;palette != dev-&gt;vsettings.palette) {
<a name="l00734"></a>00734                     <span class="keywordflow">switch</span> (p-&gt;palette) {
<a name="l00735"></a>00735                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB24:
<a name="l00736"></a>00736                             dev-&gt;vsettings.depth = 24;
<a name="l00737"></a>00737                             dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l00738"></a>00738                             <span class="keywordflow">break</span>;
<a name="l00739"></a>00739 
<a name="l00740"></a>00740                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB32:
<a name="l00741"></a>00741                             dev-&gt;vsettings.depth = 32;
<a name="l00742"></a>00742                             dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR32;
<a name="l00743"></a>00743                             <span class="keywordflow">break</span>;
<a name="l00744"></a>00744 
<a name="l00745"></a>00745                         <span class="keywordflow">case</span> VIDEO_PALETTE_UYVY:
<a name="l00746"></a>00746                             dev-&gt;vsettings.depth = 16;
<a name="l00747"></a>00747                             dev-&gt;vsettings.palette = STK11XX_PALETTE_UYVY;
<a name="l00748"></a>00748                             <span class="keywordflow">break</span>;
<a name="l00749"></a>00749 
<a name="l00750"></a>00750                         <span class="keywordflow">case</span> VIDEO_PALETTE_YUYV:
<a name="l00751"></a>00751                             dev-&gt;vsettings.depth = 16;
<a name="l00752"></a>00752                             dev-&gt;vsettings.palette = STK11XX_PALETTE_YUYV;
<a name="l00753"></a>00753                             <span class="keywordflow">break</span>;
<a name="l00754"></a>00754 
<a name="l00755"></a>00755                         <span class="keywordflow">default</span>:
<a name="l00756"></a>00756                             <span class="keywordflow">return</span> -EINVAL;
<a name="l00757"></a>00757                     }
<a name="l00758"></a>00758                 }
<a name="l00759"></a>00759 
<a name="l00760"></a>00760                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00761"></a>00761 
<a name="l00762"></a>00762                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSPICT done\n"</span>);
<a name="l00763"></a>00763             }
<a name="l00764"></a>00764             <span class="keywordflow">break</span>;
<a name="l00765"></a>00765 
<a name="l00766"></a>00766         <span class="keywordflow">case</span> VIDIOCGWIN:
<a name="l00767"></a>00767             {
<a name="l00768"></a>00768                 <span class="keyword">struct </span>video_window *vw = arg;
<a name="l00769"></a>00769 
<a name="l00770"></a>00770                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGWIN\n"</span>);
<a name="l00771"></a>00771 
<a name="l00772"></a>00772                 vw-&gt;x = 0;
<a name="l00773"></a>00773                 vw-&gt;y = 0;
<a name="l00774"></a>00774                 vw-&gt;width = dev-&gt;view.x;
<a name="l00775"></a>00775                 vw-&gt;height = dev-&gt;view.y;
<a name="l00776"></a>00776                 vw-&gt;chromakey = 0;
<a name="l00777"></a>00777             }
<a name="l00778"></a>00778             <span class="keywordflow">break</span>;
<a name="l00779"></a>00779 
<a name="l00780"></a>00780         <span class="keywordflow">case</span> VIDIOCSWIN:
<a name="l00781"></a>00781             {
<a name="l00782"></a>00782                 <span class="keyword">struct </span>video_window *vw = arg;
<a name="l00783"></a>00783 
<a name="l00784"></a>00784                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSWIN\n"</span>);
<a name="l00785"></a>00785 
<a name="l00786"></a>00786                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set x=%d, y=%d\n"</span>, vw-&gt;x, vw-&gt;y);
<a name="l00787"></a>00787                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set width=%d, height=%d\n"</span>, vw-&gt;width, vw-&gt;height);
<a name="l00788"></a>00788                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Flags = %X\n"</span>, vw-&gt;flags);
<a name="l00789"></a>00789 
<a name="l00790"></a>00790                 <span class="comment">// Stop the video stream</span>
<a name="l00791"></a>00791                 <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l00792"></a>00792             
<a name="l00793"></a>00793                 <span class="comment">// ISOC and URB cleanup</span>
<a name="l00794"></a>00794                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l00795"></a>00795 
<a name="l00796"></a>00796                 <span class="comment">// Switch off the camera</span>
<a name="l00797"></a>00797                 <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l00798"></a>00798 
<a name="l00799"></a>00799                 <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l00800"></a>00800 
<a name="l00801"></a>00801                 <span class="comment">// Select the new video mode</span>
<a name="l00802"></a>00802                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, vw-&gt;width, vw-&gt;height)) {
<a name="l00803"></a>00803                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Select video mode failed !\n"</span>);
<a name="l00804"></a>00804                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l00805"></a>00805                 }
<a name="l00806"></a>00806 
<a name="l00807"></a>00807                 <span class="comment">// Clear the buffers</span>
<a name="l00808"></a>00808                 <a class="code" href="stk11xx-buf_8c.html#cd7e46aba32bcbb5d429b21878d44845" title="Clear current buffers.">stk11xx_clear_buffers</a>(dev);
<a name="l00809"></a>00809 
<a name="l00810"></a>00810                 <span class="comment">// Initialize the device</span>
<a name="l00811"></a>00811                 <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l00812"></a>00812                 <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l00813"></a>00813                 <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l00814"></a>00814 
<a name="l00815"></a>00815                 <span class="comment">// ISOC and URB init</span>
<a name="l00816"></a>00816                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l00817"></a>00817 
<a name="l00818"></a>00818                 <span class="comment">// Re-start the stream</span>
<a name="l00819"></a>00819                 <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l00820"></a>00820 
<a name="l00821"></a>00821                 <span class="comment">// Video settings</span>
<a name="l00822"></a>00822                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l00823"></a>00823             }
<a name="l00824"></a>00824             <span class="keywordflow">break</span>;
<a name="l00825"></a>00825 
<a name="l00826"></a>00826         <span class="keywordflow">case</span> VIDIOCGFBUF:
<a name="l00827"></a>00827             {
<a name="l00828"></a>00828                 <span class="keyword">struct </span>video_buffer *vb = arg;
<a name="l00829"></a>00829 
<a name="l00830"></a>00830                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGFBUF\n"</span>);
<a name="l00831"></a>00831 
<a name="l00832"></a>00832                 memset(vb, 0, <span class="keyword">sizeof</span>(*vb));
<a name="l00833"></a>00833             }
<a name="l00834"></a>00834             <span class="keywordflow">break</span>;
<a name="l00835"></a>00835 
<a name="l00836"></a>00836         <span class="keywordflow">case</span> VIDIOCGMBUF:
<a name="l00837"></a>00837             {
<a name="l00838"></a>00838                 <span class="keywordtype">int</span> i;
<a name="l00839"></a>00839                 <span class="keyword">struct </span>video_mbuf *vm = arg;
<a name="l00840"></a>00840 
<a name="l00841"></a>00841                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGMBUF\n"</span>);
<a name="l00842"></a>00842 
<a name="l00843"></a>00843                 memset(vm, 0, <span class="keyword">sizeof</span>(*vm));
<a name="l00844"></a>00844 
<a name="l00845"></a>00845                 vm-&gt;size = dev-&gt;nbuffers * dev-&gt;len_per_image;
<a name="l00846"></a>00846                 vm-&gt;frames = dev-&gt;nbuffers;
<a name="l00847"></a>00847 
<a name="l00848"></a>00848                 <span class="keywordflow">for</span> (i=0; i&lt;dev-&gt;nbuffers; i++)
<a name="l00849"></a>00849                     vm-&gt;offsets[i] = i * dev-&gt;len_per_image;
<a name="l00850"></a>00850             }
<a name="l00851"></a>00851             <span class="keywordflow">break</span>;
<a name="l00852"></a>00852 
<a name="l00853"></a>00853         <span class="keywordflow">case</span> VIDIOCMCAPTURE:
<a name="l00854"></a>00854             {
<a name="l00855"></a>00855                 <span class="keyword">struct </span>video_mmap *vm = arg;
<a name="l00856"></a>00856 
<a name="l00857"></a>00857                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCMCAPTURE format=%d\n"</span>, vm-&gt;format);
<a name="l00858"></a>00858 
<a name="l00859"></a>00859                 <span class="keywordflow">if</span> (vm-&gt;frame &lt; 0 || vm-&gt;frame &gt;= dev-&gt;nbuffers)
<a name="l00860"></a>00860                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00861"></a>00861 
<a name="l00862"></a>00862                 <span class="keywordflow">if</span> (vm-&gt;format) {
<a name="l00863"></a>00863                     <span class="keywordflow">switch</span> (vm-&gt;format) {
<a name="l00864"></a>00864                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB32:
<a name="l00865"></a>00865                             <span class="keywordflow">break</span>;
<a name="l00866"></a>00866 
<a name="l00867"></a>00867                         <span class="keywordflow">case</span> VIDEO_PALETTE_RGB24:
<a name="l00868"></a>00868                             <span class="keywordflow">break</span>;
<a name="l00869"></a>00869 
<a name="l00870"></a>00870                         <span class="keywordflow">case</span> VIDEO_PALETTE_UYVY:
<a name="l00871"></a>00871                             <span class="keywordflow">break</span>;
<a name="l00872"></a>00872 
<a name="l00873"></a>00873                         <span class="keywordflow">case</span> VIDEO_PALETTE_YUYV:
<a name="l00874"></a>00874                             <span class="keywordflow">break</span>;
<a name="l00875"></a>00875 
<a name="l00876"></a>00876                         <span class="keywordflow">default</span>:
<a name="l00877"></a>00877                             <span class="keywordflow">return</span> -EINVAL;
<a name="l00878"></a>00878                     }
<a name="l00879"></a>00879                 }
<a name="l00880"></a>00880 
<a name="l00881"></a>00881                 <span class="keywordflow">if</span> ((vm-&gt;width != dev-&gt;view.x) || (vm-&gt;height != dev-&gt;view.y)) 
<a name="l00882"></a>00882                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l00883"></a>00883 
<a name="l00884"></a>00884                 <span class="keywordflow">if</span> (dev-&gt;image_used[vm-&gt;frame])
<a name="l00885"></a>00885                     <span class="keywordflow">return</span> -EBUSY;
<a name="l00886"></a>00886 
<a name="l00887"></a>00887                 dev-&gt;image_used[vm-&gt;frame] = 1;
<a name="l00888"></a>00888 
<a name="l00889"></a>00889                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCMCAPTURE done\n"</span>);
<a name="l00890"></a>00890             }
<a name="l00891"></a>00891             <span class="keywordflow">break</span>;
<a name="l00892"></a>00892 
<a name="l00893"></a>00893         <span class="keywordflow">case</span> VIDIOCSYNC:
<a name="l00894"></a>00894             {
<a name="l00895"></a>00895                 <span class="keywordtype">int</span> ret;
<a name="l00896"></a>00896                 <span class="keywordtype">int</span> *mbuf = arg;
<a name="l00897"></a>00897 
<a name="l00898"></a>00898                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSYNC\n"</span>);
<a name="l00899"></a>00899 
<a name="l00900"></a>00900                 <span class="keywordflow">if</span> (*mbuf &lt; 0 || *mbuf &gt;= dev-&gt;nbuffers)
<a name="l00901"></a>00901                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00902"></a>00902 
<a name="l00903"></a>00903                 <span class="keywordflow">if</span> (dev-&gt;image_used[*mbuf] == 0)
<a name="l00904"></a>00904                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00905"></a>00905 
<a name="l00906"></a>00906                 add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00907"></a>00907 
<a name="l00908"></a>00908                 <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l00909"></a>00909                     <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l00910"></a>00910                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00911"></a>00911                         set_current_state(TASK_RUNNING);
<a name="l00912"></a>00912                         <span class="keywordflow">return</span> -dev-&gt;error_status;
<a name="l00913"></a>00913                     }
<a name="l00914"></a>00914 
<a name="l00915"></a>00915                     <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l00916"></a>00916                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00917"></a>00917                         set_current_state(TASK_RUNNING);
<a name="l00918"></a>00918                         <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l00919"></a>00919                     }
<a name="l00920"></a>00920 
<a name="l00921"></a>00921                     schedule();
<a name="l00922"></a>00922                     set_current_state(TASK_INTERRUPTIBLE);
<a name="l00923"></a>00923                 }
<a name="l00924"></a>00924 
<a name="l00925"></a>00925                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l00926"></a>00926                 set_current_state(TASK_RUNNING);
<a name="l00927"></a>00927 
<a name="l00928"></a>00928                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSYNC: frame ready\n"</span>);
<a name="l00929"></a>00929 
<a name="l00930"></a>00930                 dev-&gt;fill_image = *mbuf;
<a name="l00931"></a>00931 
<a name="l00932"></a>00932                 ret = <a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev);
<a name="l00933"></a>00933 
<a name="l00934"></a>00934                 <span class="keywordflow">if</span> (ret != 0)
<a name="l00935"></a>00935                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"VIDIOCSYNC error !\n"</span>);
<a name="l00936"></a>00936 
<a name="l00937"></a>00937                 dev-&gt;image_used[*mbuf] = 0;
<a name="l00938"></a>00938             }
<a name="l00939"></a>00939             <span class="keywordflow">break</span>;
<a name="l00940"></a>00940 
<a name="l00941"></a>00941         <span class="keywordflow">case</span> VIDIOCGAUDIO:
<a name="l00942"></a>00942             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCGAUDIO\n"</span>);
<a name="l00943"></a>00943             <span class="keywordflow">return</span> -EINVAL;
<a name="l00944"></a>00944             <span class="keywordflow">break</span>;
<a name="l00945"></a>00945 
<a name="l00946"></a>00946         <span class="keywordflow">case</span> VIDIOCSAUDIO:
<a name="l00947"></a>00947             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOCSAUDIO\n"</span>);
<a name="l00948"></a>00948             <span class="keywordflow">return</span> -EINVAL;
<a name="l00949"></a>00949             <span class="keywordflow">break</span>;
<a name="l00950"></a>00950 
<a name="l00951"></a>00951         <span class="keywordflow">case</span> VIDIOCGUNIT:
<a name="l00952"></a>00952             {
<a name="l00953"></a>00953                 <span class="keyword">struct </span>video_unit *vu = arg;
<a name="l00954"></a>00954 
<a name="l00955"></a>00955                 vu-&gt;video = dev-&gt;vdev-&gt;minor &amp; 0x3f;
<a name="l00956"></a>00956                 vu-&gt;audio = -1;
<a name="l00957"></a>00957                 vu-&gt;vbi = -1;
<a name="l00958"></a>00958                 vu-&gt;radio = -1;
<a name="l00959"></a>00959                 vu-&gt;teletext = -1;
<a name="l00960"></a>00960             }
<a name="l00961"></a>00961             <span class="keywordflow">break</span>;
<a name="l00962"></a>00962 
<a name="l00963"></a>00963 
<a name="l00964"></a>00964         <span class="comment">// Video 4 Linux v2</span>
<a name="l00965"></a>00965 
<a name="l00966"></a>00966         <span class="keywordflow">case</span> VIDIOC_QUERYCAP:
<a name="l00967"></a>00967             {
<a name="l00968"></a>00968                 <span class="keyword">struct </span>v4l2_capability *cap = arg;
<a name="l00969"></a>00969 
<a name="l00970"></a>00970                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCAP\n"</span>);
<a name="l00971"></a>00971 
<a name="l00972"></a>00972                 memset(cap, 0, <span class="keyword">sizeof</span>(*cap));
<a name="l00973"></a>00973                 strlcpy(cap-&gt;driver, <span class="stringliteral">"stk11xx"</span>, <span class="keyword">sizeof</span>(cap-&gt;driver));
<a name="l00974"></a>00974 
<a name="l00975"></a>00975                 cap-&gt;capabilities = V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_READWRITE | V4L2_CAP_STREAMING;
<a name="l00976"></a>00976                 cap-&gt;version = (__u32) <a class="code" href="stk11xx_8h.html#deb97232a92a9bf74cc96d45637116ae">DRIVER_VERSION_NUM</a>, strlcpy(cap-&gt;card, dev-&gt;vdev-&gt;name, <span class="keyword">sizeof</span>(cap-&gt;card));
<a name="l00977"></a>00977             
<a name="l00978"></a>00978                 <span class="keywordflow">if</span> (usb_make_path(dev-&gt;udev, cap-&gt;bus_info, <span class="keyword">sizeof</span>(cap-&gt;bus_info)) &lt; 0)
<a name="l00979"></a>00979                     strlcpy(cap-&gt;bus_info, dev-&gt;vdev-&gt;name, <span class="keyword">sizeof</span>(cap-&gt;bus_info));
<a name="l00980"></a>00980             }
<a name="l00981"></a>00981             <span class="keywordflow">break</span>;
<a name="l00982"></a>00982 
<a name="l00983"></a>00983         <span class="keywordflow">case</span> VIDIOC_ENUMINPUT:
<a name="l00984"></a>00984             {
<a name="l00985"></a>00985                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l00986"></a>00986 
<a name="l00987"></a>00987                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUMINPUT %d\n"</span>, i-&gt;index);
<a name="l00988"></a>00988 
<a name="l00989"></a>00989                 <span class="keywordflow">if</span> (i-&gt;index)
<a name="l00990"></a>00990                     <span class="keywordflow">return</span> -EINVAL;
<a name="l00991"></a>00991 
<a name="l00992"></a>00992                 strlcpy(i-&gt;name, <span class="stringliteral">"USB"</span>, <span class="keyword">sizeof</span>(i-&gt;name));
<a name="l00993"></a>00993                 i-&gt;type = V4L2_INPUT_TYPE_CAMERA;
<a name="l00994"></a>00994             }
<a name="l00995"></a>00995             <span class="keywordflow">break</span>;
<a name="l00996"></a>00996 
<a name="l00997"></a>00997         <span class="keywordflow">case</span> VIDIOC_G_INPUT:
<a name="l00998"></a>00998             {
<a name="l00999"></a>00999                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l01000"></a>01000 
<a name="l01001"></a>01001                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET INPUT %d\n"</span>, i-&gt;index);
<a name="l01002"></a>01002 
<a name="l01003"></a>01003                 <span class="keywordflow">if</span> (i-&gt;index)
<a name="l01004"></a>01004                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01005"></a>01005             }
<a name="l01006"></a>01006             <span class="keywordflow">break</span>;
<a name="l01007"></a>01007 
<a name="l01008"></a>01008         <span class="keywordflow">case</span> VIDIOC_S_INPUT:
<a name="l01009"></a>01009             {
<a name="l01010"></a>01010                 <span class="keyword">struct </span>v4l2_input *i = arg;
<a name="l01011"></a>01011 
<a name="l01012"></a>01012                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET INPUT %d\n"</span>, i-&gt;index);
<a name="l01013"></a>01013 
<a name="l01014"></a>01014                 <span class="keywordflow">if</span> (i-&gt;index != 0)
<a name="l01015"></a>01015                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01016"></a>01016             }
<a name="l01017"></a>01017             <span class="keywordflow">break</span>;
<a name="l01018"></a>01018 
<a name="l01019"></a>01019         <span class="keywordflow">case</span> VIDIOC_QUERYCTRL:
<a name="l01020"></a>01020             {
<a name="l01021"></a>01021                 <span class="keywordtype">int</span> i;
<a name="l01022"></a>01022                 <span class="keywordtype">int</span> nbr;
<a name="l01023"></a>01023                 <span class="keyword">struct </span>v4l2_queryctrl *c = arg;
<a name="l01024"></a>01024 
<a name="l01025"></a>01025                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCTRL id = %d\n"</span>, c-&gt;id);
<a name="l01026"></a>01026 
<a name="l01027"></a>01027                 nbr = <span class="keyword">sizeof</span>(<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>)/<span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_queryctrl);
<a name="l01028"></a>01028 
<a name="l01029"></a>01029                 <span class="keywordflow">for</span> (i=0; i&lt;nbr; i++) {
<a name="l01030"></a>01030                     <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[i].<span class="keywordtype">id</span> == c-&gt;id) {
<a name="l01031"></a>01031                         <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QUERYCTRL found\n"</span>);
<a name="l01032"></a>01032                         memcpy(c, &amp;<a class="code" href="stk11xx-v4l_8c.html#3aef683028a48feea4df78904b903e81">stk11xx_controls</a>[i], <span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_queryctrl));
<a name="l01033"></a>01033                         <span class="keywordflow">break</span>;
<a name="l01034"></a>01034                     }
<a name="l01035"></a>01035                 }
<a name="l01036"></a>01036 
<a name="l01037"></a>01037                 <span class="keywordflow">if</span> (i &gt;= nbr)
<a name="l01038"></a>01038                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01039"></a>01039             }
<a name="l01040"></a>01040             <span class="keywordflow">break</span>;
<a name="l01041"></a>01041 
<a name="l01042"></a>01042         <span class="keywordflow">case</span> VIDIOC_G_CTRL:
<a name="l01043"></a>01043             {
<a name="l01044"></a>01044                 <span class="keyword">struct </span>v4l2_control *c = arg;
<a name="l01045"></a>01045 
<a name="l01046"></a>01046                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET CTRL id=%d\n"</span>, c-&gt;id);
<a name="l01047"></a>01047 
<a name="l01048"></a>01048                 <span class="keywordflow">switch</span> (c-&gt;id) {
<a name="l01049"></a>01049                     <span class="keywordflow">case</span> V4L2_CID_BRIGHTNESS:
<a name="l01050"></a>01050                         c-&gt;value = dev-&gt;vsettings.brightness;
<a name="l01051"></a>01051                         <span class="keywordflow">break</span>;
<a name="l01052"></a>01052 
<a name="l01053"></a>01053                     <span class="keywordflow">case</span> V4L2_CID_WHITENESS:
<a name="l01054"></a>01054                         c-&gt;value = dev-&gt;vsettings.whiteness;
<a name="l01055"></a>01055                         <span class="keywordflow">break</span>;
<a name="l01056"></a>01056 
<a name="l01057"></a>01057                     <span class="keywordflow">case</span> V4L2_CID_SATURATION:
<a name="l01058"></a>01058                         c-&gt;value = dev-&gt;vsettings.colour;
<a name="l01059"></a>01059                         <span class="keywordflow">break</span>;
<a name="l01060"></a>01060 
<a name="l01061"></a>01061                     <span class="keywordflow">case</span> V4L2_CID_CONTRAST:
<a name="l01062"></a>01062                         c-&gt;value = dev-&gt;vsettings.contrast;
<a name="l01063"></a>01063                         <span class="keywordflow">break</span>;
<a name="l01064"></a>01064 
<a name="l01065"></a>01065                     <span class="keywordflow">default</span>:
<a name="l01066"></a>01066                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01067"></a>01067                 }
<a name="l01068"></a>01068             }
<a name="l01069"></a>01069             <span class="keywordflow">break</span>;
<a name="l01070"></a>01070 
<a name="l01071"></a>01071         <span class="keywordflow">case</span> VIDIOC_S_CTRL:
<a name="l01072"></a>01072             {
<a name="l01073"></a>01073                 <span class="keyword">struct </span>v4l2_control *c = arg;
<a name="l01074"></a>01074 
<a name="l01075"></a>01075                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET CTRL id=%d value=%d\n"</span>, c-&gt;id, c-&gt;value);
<a name="l01076"></a>01076 
<a name="l01077"></a>01077                 <span class="keywordflow">switch</span> (c-&gt;id) {
<a name="l01078"></a>01078                     <span class="keywordflow">case</span> V4L2_CID_BRIGHTNESS:
<a name="l01079"></a>01079                         dev-&gt;vsettings.brightness = (0xff00 &amp; c-&gt;value);
<a name="l01080"></a>01080                         <span class="keywordflow">break</span>;
<a name="l01081"></a>01081 
<a name="l01082"></a>01082                     <span class="keywordflow">case</span> V4L2_CID_WHITENESS:
<a name="l01083"></a>01083                         dev-&gt;vsettings.whiteness = (0xff00 &amp; c-&gt;value);
<a name="l01084"></a>01084                         <span class="keywordflow">break</span>;
<a name="l01085"></a>01085 
<a name="l01086"></a>01086                     <span class="keywordflow">case</span> V4L2_CID_SATURATION:
<a name="l01087"></a>01087                         dev-&gt;vsettings.colour = (0xff00 &amp; c-&gt;value);
<a name="l01088"></a>01088                         <span class="keywordflow">break</span>;
<a name="l01089"></a>01089 
<a name="l01090"></a>01090                     <span class="keywordflow">case</span> V4L2_CID_CONTRAST:
<a name="l01091"></a>01091                         dev-&gt;vsettings.contrast = (0xff00 &amp; c-&gt;value);
<a name="l01092"></a>01092                         <span class="keywordflow">break</span>;
<a name="l01093"></a>01093 
<a name="l01094"></a>01094                     <span class="keywordflow">default</span>:
<a name="l01095"></a>01095                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01096"></a>01096                 }
<a name="l01097"></a>01097 
<a name="l01098"></a>01098                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l01099"></a>01099             }
<a name="l01100"></a>01100             <span class="keywordflow">break</span>;
<a name="l01101"></a>01101 
<a name="l01102"></a>01102         <span class="keywordflow">case</span> VIDIOC_ENUM_FMT:
<a name="l01103"></a>01103             {
<a name="l01104"></a>01104                 <span class="keywordtype">int</span> index;
<a name="l01105"></a>01105                 <span class="keyword">struct </span>v4l2_fmtdesc *fmtd = arg;
<a name="l01106"></a>01106 
<a name="l01107"></a>01107                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUM_FMT %d\n"</span>, fmtd-&gt;index);
<a name="l01108"></a>01108 
<a name="l01109"></a>01109                 <span class="keywordflow">if</span> (fmtd-&gt;index != 0)
<a name="l01110"></a>01110                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01111"></a>01111 
<a name="l01112"></a>01112                 index = fmtd-&gt;index;
<a name="l01113"></a>01113 
<a name="l01114"></a>01114                 memset(fmtd, 0, <span class="keyword">sizeof</span>(*fmtd));
<a name="l01115"></a>01115 
<a name="l01116"></a>01116                 fmtd-&gt;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
<a name="l01117"></a>01117                 fmtd-&gt;index = index;
<a name="l01118"></a>01118 
<a name="l01119"></a>01119                 <span class="keywordflow">switch</span> (index) {
<a name="l01120"></a>01120                     <span class="keywordflow">case</span> 0:
<a name="l01121"></a>01121                         fmtd-&gt;flags = 0;
<a name="l01122"></a>01122                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_RGB24;
<a name="l01123"></a>01123 
<a name="l01124"></a>01124                         strcpy(fmtd-&gt;description, <span class="stringliteral">"rgb24"</span>);
<a name="l01125"></a>01125                         <span class="keywordflow">break</span>;
<a name="l01126"></a>01126 
<a name="l01127"></a>01127                     <span class="keywordflow">case</span> 1:
<a name="l01128"></a>01128                         fmtd-&gt;flags = 0;
<a name="l01129"></a>01129                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_RGB32;
<a name="l01130"></a>01130 
<a name="l01131"></a>01131                         strcpy(fmtd-&gt;description, <span class="stringliteral">"rgb32"</span>);
<a name="l01132"></a>01132                         <span class="keywordflow">break</span>;
<a name="l01133"></a>01133 
<a name="l01134"></a>01134                     <span class="keywordflow">case</span> 2:
<a name="l01135"></a>01135                         fmtd-&gt;flags = 0;
<a name="l01136"></a>01136                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_BGR24;
<a name="l01137"></a>01137 
<a name="l01138"></a>01138                         strcpy(fmtd-&gt;description, <span class="stringliteral">"bgr24"</span>);
<a name="l01139"></a>01139                         <span class="keywordflow">break</span>;
<a name="l01140"></a>01140 
<a name="l01141"></a>01141                     <span class="keywordflow">case</span> 3:
<a name="l01142"></a>01142                         fmtd-&gt;flags = 0;
<a name="l01143"></a>01143                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_BGR32;
<a name="l01144"></a>01144 
<a name="l01145"></a>01145                         strcpy(fmtd-&gt;description, <span class="stringliteral">"bgr32"</span>);
<a name="l01146"></a>01146                         <span class="keywordflow">break</span>;
<a name="l01147"></a>01147 
<a name="l01148"></a>01148                     <span class="keywordflow">case</span> 4:
<a name="l01149"></a>01149                         fmtd-&gt;flags = 0;
<a name="l01150"></a>01150                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_UYVY;
<a name="l01151"></a>01151 
<a name="l01152"></a>01152                         strcpy(fmtd-&gt;description, <span class="stringliteral">"uyvy"</span>);
<a name="l01153"></a>01153                         <span class="keywordflow">break</span>;
<a name="l01154"></a>01154 
<a name="l01155"></a>01155                     <span class="keywordflow">case</span> 5:
<a name="l01156"></a>01156                         fmtd-&gt;flags = 0;
<a name="l01157"></a>01157                         fmtd-&gt;pixelformat = V4L2_PIX_FMT_YUYV;
<a name="l01158"></a>01158 
<a name="l01159"></a>01159                         strcpy(fmtd-&gt;description, <span class="stringliteral">"yuyv"</span>);
<a name="l01160"></a>01160                         <span class="keywordflow">break</span>;
<a name="l01161"></a>01161 
<a name="l01162"></a>01162                     <span class="keywordflow">default</span>:
<a name="l01163"></a>01163                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01164"></a>01164                 }
<a name="l01165"></a>01165             }
<a name="l01166"></a>01166             <span class="keywordflow">break</span>;
<a name="l01167"></a>01167 
<a name="l01168"></a>01168         <span class="keywordflow">case</span> VIDIOC_G_FMT:
<a name="l01169"></a>01169             {
<a name="l01170"></a>01170                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01171"></a>01171                 <span class="keyword">struct </span>v4l2_pix_format pix_format;
<a name="l01172"></a>01172 
<a name="l01173"></a>01173                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET FMT %d\n"</span>, fmtd-&gt;type);
<a name="l01174"></a>01174 
<a name="l01175"></a>01175                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01176"></a>01176                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01177"></a>01177 
<a name="l01178"></a>01178                 pix_format.width = dev-&gt;view.x;
<a name="l01179"></a>01179                 pix_format.height = dev-&gt;view.y;
<a name="l01180"></a>01180                 pix_format.field = V4L2_FIELD_NONE;
<a name="l01181"></a>01181                 pix_format.colorspace = V4L2_COLORSPACE_SRGB;
<a name="l01182"></a>01182                 pix_format.priv = 0;
<a name="l01183"></a>01183 
<a name="l01184"></a>01184                 <span class="keywordflow">switch</span> (dev-&gt;vsettings.palette) {
<a name="l01185"></a>01185                     <span class="keywordflow">case</span> STK11XX_PALETTE_RGB24:
<a name="l01186"></a>01186                         pix_format.pixelformat = V4L2_PIX_FMT_RGB24;
<a name="l01187"></a>01187                         pix_format.sizeimage = pix_format.width * pix_format.height * 3;
<a name="l01188"></a>01188                         pix_format.bytesperline = 3 * pix_format.width;
<a name="l01189"></a>01189                         <span class="keywordflow">break</span>;
<a name="l01190"></a>01190 
<a name="l01191"></a>01191                     <span class="keywordflow">case</span> STK11XX_PALETTE_RGB32:
<a name="l01192"></a>01192                         pix_format.pixelformat = V4L2_PIX_FMT_RGB32;
<a name="l01193"></a>01193                         pix_format.sizeimage = pix_format.width * pix_format.height * 4;
<a name="l01194"></a>01194                         pix_format.bytesperline = 4 * pix_format.width;
<a name="l01195"></a>01195                         <span class="keywordflow">break</span>;
<a name="l01196"></a>01196 
<a name="l01197"></a>01197                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR24:
<a name="l01198"></a>01198                         pix_format.pixelformat = V4L2_PIX_FMT_BGR24;
<a name="l01199"></a>01199                         pix_format.sizeimage = pix_format.width * pix_format.height * 3;
<a name="l01200"></a>01200                         pix_format.bytesperline = 3 * pix_format.width;
<a name="l01201"></a>01201                         <span class="keywordflow">break</span>;
<a name="l01202"></a>01202 
<a name="l01203"></a>01203                     <span class="keywordflow">case</span> STK11XX_PALETTE_BGR32:
<a name="l01204"></a>01204                         pix_format.pixelformat = V4L2_PIX_FMT_BGR32;
<a name="l01205"></a>01205                         pix_format.sizeimage = pix_format.width * pix_format.height * 4;
<a name="l01206"></a>01206                         pix_format.bytesperline = 4 * pix_format.width;
<a name="l01207"></a>01207                         <span class="keywordflow">break</span>;
<a name="l01208"></a>01208 
<a name="l01209"></a>01209                     <span class="keywordflow">case</span> STK11XX_PALETTE_UYVY:
<a name="l01210"></a>01210                         pix_format.pixelformat = V4L2_PIX_FMT_UYVY;
<a name="l01211"></a>01211                         pix_format.sizeimage = pix_format.width * pix_format.height * 2;
<a name="l01212"></a>01212                         pix_format.bytesperline = 2 * pix_format.width;
<a name="l01213"></a>01213                         <span class="keywordflow">break</span>;
<a name="l01214"></a>01214 
<a name="l01215"></a>01215                     <span class="keywordflow">case</span> STK11XX_PALETTE_YUYV:
<a name="l01216"></a>01216                         pix_format.pixelformat = V4L2_PIX_FMT_YUYV;
<a name="l01217"></a>01217                         pix_format.sizeimage = pix_format.width * pix_format.height * 2;
<a name="l01218"></a>01218                         pix_format.bytesperline = 2 * pix_format.width;
<a name="l01219"></a>01219                         <span class="keywordflow">break</span>;
<a name="l01220"></a>01220                 }
<a name="l01221"></a>01221 
<a name="l01222"></a>01222                 memcpy(&amp;(fmtd-&gt;fmt.pix), &amp;pix_format, <span class="keyword">sizeof</span>(pix_format));
<a name="l01223"></a>01223             }
<a name="l01224"></a>01224             <span class="keywordflow">break</span>;
<a name="l01225"></a>01225 
<a name="l01226"></a>01226         <span class="keywordflow">case</span> VIDIOC_TRY_FMT:
<a name="l01227"></a>01227             {
<a name="l01228"></a>01228                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01229"></a>01229 
<a name="l01230"></a>01230                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"TRY FMT %d\n"</span>, fmtd-&gt;type);
<a name="l01231"></a>01231 
<a name="l01232"></a>01232                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01233"></a>01233                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01234"></a>01234 
<a name="l01235"></a>01235                 <span class="keywordflow">switch</span> (fmtd-&gt;fmt.pix.pixelformat) {
<a name="l01236"></a>01236                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB24:
<a name="l01237"></a>01237                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR24:
<a name="l01238"></a>01238                         dev-&gt;vsettings.depth = 24;
<a name="l01239"></a>01239                         <span class="keywordflow">break</span>;
<a name="l01240"></a>01240 
<a name="l01241"></a>01241                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB32:
<a name="l01242"></a>01242                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR32:
<a name="l01243"></a>01243                         dev-&gt;vsettings.depth = 32;
<a name="l01244"></a>01244                         <span class="keywordflow">break</span>;
<a name="l01245"></a>01245 
<a name="l01246"></a>01246                     <span class="keywordflow">case</span> V4L2_PIX_FMT_UYVY:
<a name="l01247"></a>01247                     <span class="keywordflow">case</span> V4L2_PIX_FMT_YUYV:
<a name="l01248"></a>01248                         dev-&gt;vsettings.depth = 16;
<a name="l01249"></a>01249                         <span class="keywordflow">break</span>;
<a name="l01250"></a>01250 
<a name="l01251"></a>01251                     <span class="keywordflow">default</span>:
<a name="l01252"></a>01252                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01253"></a>01253                 }
<a name="l01254"></a>01254 
<a name="l01255"></a>01255                 <span class="keywordflow">switch</span> (dev-&gt;webcam_type) {
<a name="l01256"></a>01256                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f13f5de5bc8e126ddba84831bfdf8fdaa8">STK11XX_SXGA</a>:
<a name="l01257"></a>01257                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x)
<a name="l01258"></a>01258                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].x;
<a name="l01259"></a>01259                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l01260"></a>01260                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l01261"></a>01261     
<a name="l01262"></a>01262                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y)
<a name="l01263"></a>01263                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1].y;
<a name="l01264"></a>01264                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)
<a name="l01265"></a>01265                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l01266"></a>01266                         <span class="keywordflow">break</span>;
<a name="l01267"></a>01267 
<a name="l01268"></a>01268                     <span class="keywordflow">case</span> <a class="code" href="stk11xx_8h.html#5400cbd98f5ec8f3d24ec55313e274f1896c4ee082ee0fa3eed44795b4a78e9e">STK11XX_VGA</a>:
<a name="l01269"></a>01269                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].x)
<a name="l01270"></a>01270                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].x;
<a name="l01271"></a>01271                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.width &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x)
<a name="l01272"></a>01272                             fmtd-&gt;fmt.pix.width = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].x;
<a name="l01273"></a>01273     
<a name="l01274"></a>01274                         <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &gt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].y)
<a name="l01275"></a>01275                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[STK11XX_NBR_SIZES-1-3].y;
<a name="l01276"></a>01276                         <span class="keywordflow">else</span> <span class="keywordflow">if</span> (fmtd-&gt;fmt.pix.height &lt; <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y)
<a name="l01277"></a>01277                             fmtd-&gt;fmt.pix.height = <a class="code" href="stk11xx-sysfs_8c.html#b9b23c97c63356e4db4c0f40448ed109">stk11xx_image_sizes</a>[0].y;
<a name="l01278"></a>01278                         <span class="keywordflow">break</span>;
<a name="l01279"></a>01279                 }
<a name="l01280"></a>01280 
<a name="l01281"></a>01281             }
<a name="l01282"></a>01282             <span class="keywordflow">break</span>;
<a name="l01283"></a>01283 
<a name="l01284"></a>01284         <span class="keywordflow">case</span> VIDIOC_S_FMT:
<a name="l01285"></a>01285             {
<a name="l01286"></a>01286                 <span class="keyword">struct </span>v4l2_format *fmtd = arg;
<a name="l01287"></a>01287 
<a name="l01288"></a>01288                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET FMT %d : %d\n"</span>, fmtd-&gt;type, fmtd-&gt;fmt.pix.pixelformat);
<a name="l01289"></a>01289 
<a name="l01290"></a>01290                 <span class="keywordflow">if</span> (fmtd-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01291"></a>01291                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01292"></a>01292 
<a name="l01293"></a>01293                 <span class="keywordflow">switch</span> (fmtd-&gt;fmt.pix.pixelformat) {
<a name="l01294"></a>01294                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB24:
<a name="l01295"></a>01295                         dev-&gt;vsettings.depth = 24;
<a name="l01296"></a>01296                         dev-&gt;vsettings.palette = STK11XX_PALETTE_RGB24;
<a name="l01297"></a>01297                         <span class="keywordflow">break</span>;
<a name="l01298"></a>01298 
<a name="l01299"></a>01299                     <span class="keywordflow">case</span> V4L2_PIX_FMT_RGB32:
<a name="l01300"></a>01300                         dev-&gt;vsettings.depth = 32;
<a name="l01301"></a>01301                         dev-&gt;vsettings.palette = STK11XX_PALETTE_RGB32;
<a name="l01302"></a>01302                         <span class="keywordflow">break</span>;
<a name="l01303"></a>01303 
<a name="l01304"></a>01304                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR24:
<a name="l01305"></a>01305                         dev-&gt;vsettings.depth = 24;
<a name="l01306"></a>01306                         dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR24;
<a name="l01307"></a>01307                         <span class="keywordflow">break</span>;
<a name="l01308"></a>01308 
<a name="l01309"></a>01309                     <span class="keywordflow">case</span> V4L2_PIX_FMT_BGR32:
<a name="l01310"></a>01310                         dev-&gt;vsettings.depth = 32;
<a name="l01311"></a>01311                         dev-&gt;vsettings.palette = STK11XX_PALETTE_BGR32;
<a name="l01312"></a>01312                         <span class="keywordflow">break</span>;
<a name="l01313"></a>01313 
<a name="l01314"></a>01314                     <span class="keywordflow">case</span> V4L2_PIX_FMT_UYVY:
<a name="l01315"></a>01315                         dev-&gt;vsettings.depth = 16;
<a name="l01316"></a>01316                         dev-&gt;vsettings.palette = STK11XX_PALETTE_UYVY;
<a name="l01317"></a>01317                         <span class="keywordflow">break</span>;
<a name="l01318"></a>01318 
<a name="l01319"></a>01319                     <span class="keywordflow">case</span> V4L2_PIX_FMT_YUYV:
<a name="l01320"></a>01320                         dev-&gt;vsettings.depth = 16;
<a name="l01321"></a>01321                         dev-&gt;vsettings.palette = STK11XX_PALETTE_YUYV;
<a name="l01322"></a>01322                         <span class="keywordflow">break</span>;
<a name="l01323"></a>01323 
<a name="l01324"></a>01324                     <span class="keywordflow">default</span>:
<a name="l01325"></a>01325                         <span class="keywordflow">return</span> -EINVAL;
<a name="l01326"></a>01326                 }
<a name="l01327"></a>01327 
<a name="l01328"></a>01328                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"Set width=%d, height=%d\n"</span>, fmtd-&gt;fmt.pix.width, fmtd-&gt;fmt.pix.height);
<a name="l01329"></a>01329 
<a name="l01330"></a>01330                 <span class="comment">// Stop the video stream</span>
<a name="l01331"></a>01331                 <a class="code" href="stk11xx-dev_8c.html#939f02cad30ad386080f8024741237bd" title="This function sets the device to stop the stream.">dev_stk11xx_stop_stream</a>(dev);
<a name="l01332"></a>01332             
<a name="l01333"></a>01333                 <span class="comment">// ISOC and URB cleanup</span>
<a name="l01334"></a>01334                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l01335"></a>01335 
<a name="l01336"></a>01336                 <span class="comment">// Switch off the camera</span>
<a name="l01337"></a>01337                 <a class="code" href="stk11xx-dev_8c.html#865eb05993bb42c88ce5c73fb39b210d" title="This function switchs off the camera.">dev_stk11xx_camera_off</a>(dev);
<a name="l01338"></a>01338 
<a name="l01339"></a>01339                 <a class="code" href="stk11xx-dev_8c.html#33117e9ffbc424c68d29dad93f6675c2" title="Wake-up the camera.">dev_stk11xx_camera_asleep</a>(dev);
<a name="l01340"></a>01340 
<a name="l01341"></a>01341                 <span class="comment">// Select the new video mode</span>
<a name="l01342"></a>01342                 <span class="keywordflow">if</span> (<a class="code" href="stk11xx-v4l_8c.html#627028fbe327bdeb1589d74109e9ae77" title="Select a video mode.">v4l_stk11xx_select_video_mode</a>(dev, fmtd-&gt;fmt.pix.width, fmtd-&gt;fmt.pix.height)) {
<a name="l01343"></a>01343                     <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Select video mode failed !\n"</span>);
<a name="l01344"></a>01344                     <span class="keywordflow">return</span> -EAGAIN;
<a name="l01345"></a>01345                 }
<a name="l01346"></a>01346 
<a name="l01347"></a>01347                 <span class="comment">// Clear the buffers</span>
<a name="l01348"></a>01348                 <a class="code" href="stk11xx-buf_8c.html#cd7e46aba32bcbb5d429b21878d44845" title="Clear current buffers.">stk11xx_clear_buffers</a>(dev);
<a name="l01349"></a>01349 
<a name="l01350"></a>01350                 <span class="comment">// Initialize the device</span>
<a name="l01351"></a>01351                 <a class="code" href="stk11xx-dev_8c.html#e3ca760fb15d38628de5bfd1e43d6f29" title="This function initializes the device for the stream.">dev_stk11xx_init_camera</a>(dev);
<a name="l01352"></a>01352                 <a class="code" href="stk11xx-dev_8c.html#e978d7adfeabe3e7c31076fddee9a744" title="This function switchs on the camera.">dev_stk11xx_camera_on</a>(dev);
<a name="l01353"></a>01353                 <a class="code" href="stk11xx-dev_8c.html#5c487b95ff9a43ca810016c688052bfa" title="Reconfigure the camera before the stream.">dev_stk11xx_reconf_camera</a>(dev);
<a name="l01354"></a>01354 
<a name="l01355"></a>01355                 <span class="comment">// ISOC and URB init</span>
<a name="l01356"></a>01356                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l01357"></a>01357 
<a name="l01358"></a>01358                 <span class="comment">// Re-start the stream</span>
<a name="l01359"></a>01359                 <a class="code" href="stk11xx-dev_8c.html#b21443fb38d3de22db64c6d4435babbc" title="This function sets the device to start the stream.">dev_stk11xx_start_stream</a>(dev);
<a name="l01360"></a>01360 
<a name="l01361"></a>01361                 <span class="comment">// Video settings</span>
<a name="l01362"></a>01362                 <a class="code" href="stk11xx-dev_8c.html#9421e6bf87f9bef9f468acfd60a11562" title="This function permits to modify the settings of the camera.">dev_stk11xx_camera_settings</a>(dev);
<a name="l01363"></a>01363             }
<a name="l01364"></a>01364             <span class="keywordflow">break</span>;
<a name="l01365"></a>01365 
<a name="l01366"></a>01366         <span class="keywordflow">case</span> VIDIOC_QUERYSTD:
<a name="l01367"></a>01367             {
<a name="l01368"></a>01368                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"QUERY STD\n"</span>);
<a name="l01369"></a>01369                 <span class="keywordflow">return</span> -EINVAL;
<a name="l01370"></a>01370             }
<a name="l01371"></a>01371             <span class="keywordflow">break</span>;
<a name="l01372"></a>01372 
<a name="l01373"></a>01373         <span class="keywordflow">case</span> VIDIOC_G_STD:
<a name="l01374"></a>01374             {
<a name="l01375"></a>01375                 v4l2_std_id *std = arg;
<a name="l01376"></a>01376 
<a name="l01377"></a>01377                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET STD\n"</span>);
<a name="l01378"></a>01378         
<a name="l01379"></a>01379                 *std = V4L2_STD_UNKNOWN;
<a name="l01380"></a>01380             }
<a name="l01381"></a>01381             <span class="keywordflow">break</span>;
<a name="l01382"></a>01382 
<a name="l01383"></a>01383         <span class="keywordflow">case</span> VIDIOC_S_STD:
<a name="l01384"></a>01384             {
<a name="l01385"></a>01385                 v4l2_std_id *std = arg;
<a name="l01386"></a>01386 
<a name="l01387"></a>01387                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET STD\n"</span>);
<a name="l01388"></a>01388                 
<a name="l01389"></a>01389                 <span class="keywordflow">if</span> (*std != V4L2_STD_UNKNOWN)
<a name="l01390"></a>01390                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01391"></a>01391             }
<a name="l01392"></a>01392             <span class="keywordflow">break</span>;
<a name="l01393"></a>01393 
<a name="l01394"></a>01394         <span class="keywordflow">case</span> VIDIOC_ENUMSTD:
<a name="l01395"></a>01395             {
<a name="l01396"></a>01396                 <span class="keyword">struct </span>v4l2_standard *std = arg;
<a name="l01397"></a>01397 
<a name="l01398"></a>01398                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_ENUMSTD\n"</span>);
<a name="l01399"></a>01399 
<a name="l01400"></a>01400                 <span class="keywordflow">if</span> (std-&gt;index != 0)
<a name="l01401"></a>01401                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01402"></a>01402 
<a name="l01403"></a>01403                 std-&gt;id = V4L2_STD_UNKNOWN;
<a name="l01404"></a>01404                 strncpy(std-&gt;name, <span class="stringliteral">"webcam"</span>, <span class="keyword">sizeof</span>(std-&gt;name));
<a name="l01405"></a>01405 
<a name="l01406"></a>01406                 <span class="keywordflow">break</span>;
<a name="l01407"></a>01407             }
<a name="l01408"></a>01408 
<a name="l01409"></a>01409         <span class="keywordflow">case</span> VIDIOC_REQBUFS:
<a name="l01410"></a>01410             {
<a name="l01411"></a>01411                 <span class="keywordtype">int</span> nbuffers;
<a name="l01412"></a>01412                 <span class="keyword">struct </span>v4l2_requestbuffers *rb = arg;
<a name="l01413"></a>01413 
<a name="l01414"></a>01414                 <span class="keywordflow">if</span> (rb-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01415"></a>01415                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01416"></a>01416 
<a name="l01417"></a>01417                 <span class="keywordflow">if</span> (rb-&gt;memory != V4L2_MEMORY_MMAP)
<a name="l01418"></a>01418                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01419"></a>01419 
<a name="l01420"></a>01420                 nbuffers = rb-&gt;count;
<a name="l01421"></a>01421 
<a name="l01422"></a>01422                 <span class="keywordflow">if</span> (nbuffers &lt; 2)
<a name="l01423"></a>01423                     nbuffers = 2;
<a name="l01424"></a>01424                 <span class="keywordflow">else</span> <span class="keywordflow">if</span> (nbuffers &gt; dev-&gt;nbuffers)
<a name="l01425"></a>01425                     nbuffers = dev-&gt;nbuffers;
<a name="l01426"></a>01426 
<a name="l01427"></a>01427                 rb-&gt;count = dev-&gt;nbuffers;
<a name="l01428"></a>01428             }
<a name="l01429"></a>01429             <span class="keywordflow">break</span>;
<a name="l01430"></a>01430 
<a name="l01431"></a>01431         <span class="keywordflow">case</span> VIDIOC_QUERYBUF:
<a name="l01432"></a>01432             {
<a name="l01433"></a>01433                 <span class="keywordtype">int</span> index;
<a name="l01434"></a>01434                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01435"></a>01435 
<a name="l01436"></a>01436                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"QUERY BUFFERS %d %d\n"</span>, buf-&gt;index, dev-&gt;nbuffers);
<a name="l01437"></a>01437 
<a name="l01438"></a>01438                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01439"></a>01439                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01440"></a>01440 
<a name="l01441"></a>01441                 <span class="keywordflow">if</span> (buf-&gt;memory != V4L2_MEMORY_MMAP) 
<a name="l01442"></a>01442                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01443"></a>01443 
<a name="l01444"></a>01444                 index = buf-&gt;index;
<a name="l01445"></a>01445 
<a name="l01446"></a>01446                 <span class="keywordflow">if</span> (index &lt; 0 || index &gt;= dev-&gt;nbuffers)
<a name="l01447"></a>01447                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01448"></a>01448 
<a name="l01449"></a>01449                 memset(buf, 0, <span class="keyword">sizeof</span>(<span class="keyword">struct</span> v4l2_buffer));
<a name="l01450"></a>01450 
<a name="l01451"></a>01451                 buf-&gt;type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
<a name="l01452"></a>01452                 buf-&gt;index = index;
<a name="l01453"></a>01453                 buf-&gt;m.offset = index * dev-&gt;len_per_image;
<a name="l01454"></a>01454                 buf-&gt;bytesused = dev-&gt;view_size;
<a name="l01455"></a>01455                 buf-&gt;field = V4L2_FIELD_NONE;
<a name="l01456"></a>01456                 buf-&gt;memory = V4L2_MEMORY_MMAP;
<a name="l01457"></a>01457                 buf-&gt;length = dev-&gt;len_per_image;
<a name="l01458"></a>01458             }
<a name="l01459"></a>01459             <span class="keywordflow">break</span>;
<a name="l01460"></a>01460 
<a name="l01461"></a>01461         <span class="keywordflow">case</span> VIDIOC_QBUF:
<a name="l01462"></a>01462             {
<a name="l01463"></a>01463                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01464"></a>01464 
<a name="l01465"></a>01465                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_QBUF\n"</span>);
<a name="l01466"></a>01466 
<a name="l01467"></a>01467                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01468"></a>01468                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01469"></a>01469 
<a name="l01470"></a>01470                 <span class="keywordflow">if</span> (buf-&gt;memory != V4L2_MEMORY_MMAP)
<a name="l01471"></a>01471                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01472"></a>01472 
<a name="l01473"></a>01473                 <span class="keywordflow">if</span> (buf-&gt;index &lt; 0 || buf-&gt;index &gt;= dev-&gt;nbuffers)
<a name="l01474"></a>01474                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01475"></a>01475 
<a name="l01476"></a>01476                 buf-&gt;flags |= V4L2_BUF_FLAG_QUEUED;
<a name="l01477"></a>01477                 buf-&gt;flags &amp;= ~V4L2_BUF_FLAG_DONE;
<a name="l01478"></a>01478             }
<a name="l01479"></a>01479             <span class="keywordflow">break</span>;
<a name="l01480"></a>01480 
<a name="l01481"></a>01481         <span class="keywordflow">case</span> VIDIOC_DQBUF:
<a name="l01482"></a>01482             {
<a name="l01483"></a>01483                 <span class="keywordtype">int</span> ret;
<a name="l01484"></a>01484                 <span class="keyword">struct </span>v4l2_buffer *buf = arg;
<a name="l01485"></a>01485 
<a name="l01486"></a>01486                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_DQBUF\n"</span>);
<a name="l01487"></a>01487                 
<a name="l01488"></a>01488                 <span class="keywordflow">if</span> (buf-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01489"></a>01489                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01490"></a>01490 
<a name="l01491"></a>01491                 add_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01492"></a>01492 
<a name="l01493"></a>01493                 <span class="keywordflow">while</span> (dev-&gt;full_frames == NULL) {
<a name="l01494"></a>01494                     <span class="keywordflow">if</span> (dev-&gt;error_status) {
<a name="l01495"></a>01495                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01496"></a>01496                         set_current_state(TASK_RUNNING);
<a name="l01497"></a>01497 
<a name="l01498"></a>01498                         <span class="keywordflow">return</span> -dev-&gt;error_status;
<a name="l01499"></a>01499                     }
<a name="l01500"></a>01500 
<a name="l01501"></a>01501                     <span class="keywordflow">if</span> (signal_pending(current)) {
<a name="l01502"></a>01502                         remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01503"></a>01503                         set_current_state(TASK_RUNNING);
<a name="l01504"></a>01504 
<a name="l01505"></a>01505                         <span class="keywordflow">return</span> -ERESTARTSYS;
<a name="l01506"></a>01506                     }
<a name="l01507"></a>01507 
<a name="l01508"></a>01508                     schedule();
<a name="l01509"></a>01509                     set_current_state(TASK_INTERRUPTIBLE);
<a name="l01510"></a>01510                 }
<a name="l01511"></a>01511 
<a name="l01512"></a>01512                 remove_wait_queue(&amp;dev-&gt;wait_frame, &amp;wait);
<a name="l01513"></a>01513                 set_current_state(TASK_RUNNING);
<a name="l01514"></a>01514 
<a name="l01515"></a>01515                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_DQBUF : frame ready.\n"</span>);
<a name="l01516"></a>01516 
<a name="l01517"></a>01517                 ret = <a class="code" href="stk11xx-buf_8c.html#21bfe8791f1f53fcd64a185dc6fdc686" title="Handler frame.">stk11xx_handle_frame</a>(dev);
<a name="l01518"></a>01518 
<a name="l01519"></a>01519                 <span class="keywordflow">if</span> (ret)
<a name="l01520"></a>01520                     <span class="keywordflow">return</span> -EFAULT;
<a name="l01521"></a>01521 
<a name="l01522"></a>01522                 buf-&gt;index = dev-&gt;fill_image;
<a name="l01523"></a>01523                 buf-&gt;bytesused = dev-&gt;view_size;
<a name="l01524"></a>01524                 buf-&gt;flags = V4L2_BUF_FLAG_MAPPED;
<a name="l01525"></a>01525                 buf-&gt;field = V4L2_FIELD_NONE;
<a name="l01526"></a>01526                 do_gettimeofday(&amp;buf-&gt;timestamp);
<a name="l01527"></a>01527                 buf-&gt;sequence = 0;
<a name="l01528"></a>01528                 buf-&gt;memory = V4L2_MEMORY_MMAP;
<a name="l01529"></a>01529                 buf-&gt;m.offset = dev-&gt;fill_image * dev-&gt;len_per_image;
<a name="l01530"></a>01530                 buf-&gt;length = dev-&gt;len_per_image; <span class="comment">//buf-&gt;bytesused;</span>
<a name="l01531"></a>01531 
<a name="l01532"></a>01532                 <a class="code" href="stk11xx-buf_8c.html#5805bf7c1173f7f6063c1c5934c73e1b" title="Prepare the next image.">stk11xx_next_image</a>(dev);
<a name="l01533"></a>01533             }
<a name="l01534"></a>01534             <span class="keywordflow">break</span>;
<a name="l01535"></a>01535 
<a name="l01536"></a>01536         <span class="keywordflow">case</span> VIDIOC_STREAMON:
<a name="l01537"></a>01537             {
<a name="l01538"></a>01538                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_STREAMON\n"</span>);
<a name="l01539"></a>01539 
<a name="l01540"></a>01540                 <a class="code" href="stk11xx-usb_8c.html#e7d7590e86071e46320dc3238eb03ef8" title="Initilize an isochronous pipe.">usb_stk11xx_isoc_init</a>(dev);
<a name="l01541"></a>01541             }
<a name="l01542"></a>01542             <span class="keywordflow">break</span>;
<a name="l01543"></a>01543 
<a name="l01544"></a>01544         <span class="keywordflow">case</span> VIDIOC_STREAMOFF:
<a name="l01545"></a>01545             {
<a name="l01546"></a>01546                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"VIDIOC_STREAMOFF\n"</span>);
<a name="l01547"></a>01547 
<a name="l01548"></a>01548                 <a class="code" href="stk11xx-usb_8c.html#7d77d101c0b0a8bc6100dc6665f3c3f5" title="Clean-up all the ISOC buffers.">usb_stk11xx_isoc_cleanup</a>(dev);
<a name="l01549"></a>01549             }
<a name="l01550"></a>01550             <span class="keywordflow">break</span>;
<a name="l01551"></a>01551 
<a name="l01552"></a>01552         <span class="keywordflow">case</span> VIDIOC_G_PARM:
<a name="l01553"></a>01553             {
<a name="l01554"></a>01554                 <span class="keyword">struct </span>v4l2_streamparm *sp = arg;
<a name="l01555"></a>01555 
<a name="l01556"></a>01556                 <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET PARM %d\n"</span>, sp-&gt;type);
<a name="l01557"></a>01557 
<a name="l01558"></a>01558                 <span class="keywordflow">if</span> (sp-&gt;type != V4L2_BUF_TYPE_VIDEO_CAPTURE)
<a name="l01559"></a>01559                     <span class="keywordflow">return</span> -EINVAL;
<a name="l01560"></a>01560 
<a name="l01561"></a>01561                 sp-&gt;parm.capture.capability = 0;
<a name="l01562"></a>01562                 sp-&gt;parm.capture.capturemode = 0;
<a name="l01563"></a>01563                 sp-&gt;parm.capture.timeperframe.numerator = 1;
<a name="l01564"></a>01564                 sp-&gt;parm.capture.timeperframe.denominator = 30;
<a name="l01565"></a>01565                 sp-&gt;parm.capture.readbuffers = 2;
<a name="l01566"></a>01566                 sp-&gt;parm.capture.extendedmode = 0;
<a name="l01567"></a>01567             }
<a name="l01568"></a>01568             <span class="keywordflow">break</span>;
<a name="l01569"></a>01569 
<a name="l01570"></a>01570 
<a name="l01571"></a>01571         <span class="keywordflow">case</span> VIDIOC_G_AUDIO:
<a name="l01572"></a>01572             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"GET AUDIO\n"</span>);
<a name="l01573"></a>01573             <span class="keywordflow">return</span> -EINVAL;
<a name="l01574"></a>01574             <span class="keywordflow">break</span>;
<a name="l01575"></a>01575 
<a name="l01576"></a>01576         <span class="keywordflow">case</span> VIDIOC_S_AUDIO:
<a name="l01577"></a>01577             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET AUDIO\n"</span>);
<a name="l01578"></a>01578             <span class="keywordflow">return</span> -EINVAL;
<a name="l01579"></a>01579             <span class="keywordflow">break</span>;
<a name="l01580"></a>01580 
<a name="l01581"></a>01581         <span class="keywordflow">case</span> VIDIOC_S_TUNER:
<a name="l01582"></a>01582             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"SET TUNER\n"</span>);
<a name="l01583"></a>01583             <span class="keywordflow">return</span> -EINVAL;
<a name="l01584"></a>01584             <span class="keywordflow">break</span>;
<a name="l01585"></a>01585 
<a name="l01586"></a>01586         <span class="keywordflow">case</span> VIDIOC_G_FBUF:
<a name="l01587"></a>01587         <span class="keywordflow">case</span> VIDIOC_S_FBUF:
<a name="l01588"></a>01588         <span class="keywordflow">case</span> VIDIOC_OVERLAY:
<a name="l01589"></a>01589             <span class="keywordflow">return</span> -EINVAL;
<a name="l01590"></a>01590             <span class="keywordflow">break</span>;
<a name="l01591"></a>01591 
<a name="l01592"></a>01592         <span class="keywordflow">case</span> VIDIOC_G_TUNER:
<a name="l01593"></a>01593         <span class="keywordflow">case</span> VIDIOC_G_FREQUENCY:
<a name="l01594"></a>01594         <span class="keywordflow">case</span> VIDIOC_S_FREQUENCY:
<a name="l01595"></a>01595             <span class="keywordflow">return</span> -EINVAL;
<a name="l01596"></a>01596             <span class="keywordflow">break</span>;
<a name="l01597"></a>01597 
<a name="l01598"></a>01598         <span class="keywordflow">case</span> VIDIOC_QUERYMENU:
<a name="l01599"></a>01599             <span class="keywordflow">return</span> -EINVAL;
<a name="l01600"></a>01600             <span class="keywordflow">break</span>;
<a name="l01601"></a>01601 <span class="comment">/*</span>
<a name="l01602"></a>01602 <span class="comment">        case VIDIOC_CROPCAP:</span>
<a name="l01603"></a>01603 <span class="comment">            {</span>
<a name="l01604"></a>01604 <span class="comment">                struct v4l2_cropcap cc;</span>
<a name="l01605"></a>01605 <span class="comment"></span>
<a name="l01606"></a>01606 <span class="comment">                cc.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;</span>
<a name="l01607"></a>01607 <span class="comment">                cc.pixelaspect.numerator = 1;</span>
<a name="l01608"></a>01608 <span class="comment">                cc.pixelaspect.denominator = 1;</span>
<a name="l01609"></a>01609 <span class="comment">                cc.bounds.top = 0;</span>
<a name="l01610"></a>01610 <span class="comment">                cc.bounds.left = 0;</span>
<a name="l01611"></a>01611 <span class="comment">                cc.bounds.width = 640;</span>
<a name="l01612"></a>01612 <span class="comment">                cc.bounds.height = 480;</span>
<a name="l01613"></a>01613 <span class="comment">                cc.defrect.top = 0;</span>
<a name="l01614"></a>01614 <span class="comment">                cc.defrect.left = 0;</span>
<a name="l01615"></a>01615 <span class="comment">                cc.defrect.width = 640;</span>
<a name="l01616"></a>01616 <span class="comment">                cc.defrect.height = 480;</span>
<a name="l01617"></a>01617 <span class="comment"></span>
<a name="l01618"></a>01618 <span class="comment">                memcpy(arg, &amp;cc, sizeof(cc));</span>
<a name="l01619"></a>01619 <span class="comment">            }</span>
<a name="l01620"></a>01620 <span class="comment">            break;</span>
<a name="l01621"></a>01621 <span class="comment">*/</span>
<a name="l01622"></a>01622         <span class="keywordflow">default</span>:
<a name="l01623"></a>01623             <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"IOCTL unknown !\n"</span>);
<a name="l01624"></a>01624             <span class="keywordflow">return</span> -ENOIOCTLCMD;
<a name="l01625"></a>01625     }
<a name="l01626"></a>01626 
<a name="l01627"></a>01627     <span class="keywordflow">return</span> 0;
<a name="l01628"></a>01628 }
<a name="l01629"></a>01629 
<a name="l01630"></a>01630 
<a name="l01642"></a><a class="code" href="stk11xx-v4l_8c.html#b8d6ae85407574b48fd686fe75c74e97">01642</a> <span class="keyword">static</span> <span class="keywordtype">long</span> <a class="code" href="stk11xx-v4l_8c.html#b8d6ae85407574b48fd686fe75c74e97" title="Manage IOCTL.">v4l_stk11xx_ioctl</a>(<span class="keyword">struct</span> file *fp,
<a name="l01643"></a>01643         <span class="keywordtype">unsigned</span> <span class="keywordtype">int</span> cmd, <span class="keywordtype">unsigned</span> <span class="keywordtype">long</span> arg)
<a name="l01644"></a>01644 {
<a name="l01645"></a>01645     <span class="keywordtype">long</span> err;
<a name="l01646"></a>01646     <span class="keyword">struct </span>usb_stk11xx *dev;
<a name="l01647"></a>01647     <span class="keyword">struct </span>video_device *vdev;
<a name="l01648"></a>01648     
<a name="l01649"></a>01649     vdev = video_devdata(fp);
<a name="l01650"></a>01650     dev = video_get_drvdata(video_devdata(fp));
<a name="l01651"></a>01651 
<a name="l01652"></a>01652     <a class="code" href="stk11xx_8h.html#6a7ffe6803607fae5d467b1b4f5515f2">STK_DEBUG</a>(<span class="stringliteral">"v4l_stk11xx_ioctl %02X\n"</span>, (<span class="keywordtype">unsigned</span> <span class="keywordtype">char</span>) cmd);
<a name="l01653"></a>01653 
<a name="l01654"></a>01654     <span class="keywordflow">if</span> (dev == NULL)
<a name="l01655"></a>01655         <span class="keywordflow">return</span> -EFAULT;
<a name="l01656"></a>01656 
<a name="l01657"></a>01657     <span class="keywordflow">if</span> (vdev == NULL)
<a name="l01658"></a>01658         <span class="keywordflow">return</span> -EFAULT;
<a name="l01659"></a>01659 
<a name="l01660"></a>01660     mutex_lock(&amp;dev-&gt;modlock); 
<a name="l01661"></a>01661 
<a name="l01662"></a>01662     err = video_usercopy(fp, cmd, arg, <a class="code" href="stk11xx-v4l_8c.html#d0d6bb014a12b34811e18f02002b3c81" title="Manage IOCTL.">v4l_stk11xx_do_ioctl</a>);
<a name="l01663"></a>01663 
<a name="l01664"></a>01664     mutex_unlock(&amp;dev-&gt;modlock);
<a name="l01665"></a>01665 
<a name="l01666"></a>01666     <span class="keywordflow">return</span> err;
<a name="l01667"></a>01667 }
<a name="l01668"></a>01668 
<a name="l01669"></a>01669 
<a name="l01679"></a><a class="code" href="stk11xx_8h.html#ea83cb34e801e4b0470c848174128aeb">01679</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#5fb1deffc636cce6dffc8b5e971e6115" title="Register the video device.">v4l_stk11xx_register_video_device</a>(<span class="keyword">struct</span> usb_stk11xx *dev)
<a name="l01680"></a>01680 {
<a name="l01681"></a>01681     <span class="keywordtype">int</span> err;
<a name="l01682"></a>01682 
<a name="l01683"></a>01683     strcpy(dev-&gt;vdev-&gt;name, <a class="code" href="stk11xx_8h.html#ae26107a17c06584f8bbd0d6fb91013d">DRIVER_DESC</a>);
<a name="l01684"></a>01684 
<a name="l01685"></a>01685     dev-&gt;vdev-&gt;dev = dev-&gt;interface-&gt;dev;
<a name="l01686"></a>01686     dev-&gt;vdev-&gt;fops = &amp;<a class="code" href="stk11xx-v4l_8c.html#00a41f99999840e48ab4ae826e53b569">v4l_stk11xx_fops</a>;
<a name="l01687"></a>01687     dev-&gt;vdev-&gt;release = video_device_release;
<a name="l01688"></a>01688     dev-&gt;vdev-&gt;minor = -1;
<a name="l01689"></a>01689 
<a name="l01690"></a>01690     video_set_drvdata(dev-&gt;vdev, dev);
<a name="l01691"></a>01691 
<a name="l01692"></a>01692     err = video_register_device(dev-&gt;vdev, VFL_TYPE_GRABBER, -1);
<a name="l01693"></a>01693 
<a name="l01694"></a>01694     <span class="keywordflow">if</span> (err)
<a name="l01695"></a>01695         <a class="code" href="stk11xx_8h.html#2548285f2eade14f8e93c9b611e622d7">STK_ERROR</a>(<span class="stringliteral">"Video register fail !\n"</span>);
<a name="l01696"></a>01696     <span class="keywordflow">else</span>
<a name="l01697"></a>01697         <a class="code" href="stk11xx_8h.html#55d1b4af8174ee2f44f9ea2e18f6392d">STK_INFO</a>(<span class="stringliteral">"Syntek USB2.0 Camera is now controlling video device /dev/video%d\n"</span>, dev-&gt;vdev-&gt;minor);
<a name="l01698"></a>01698 
<a name="l01699"></a>01699     <span class="keywordflow">return</span> err;
<a name="l01700"></a>01700 }
<a name="l01701"></a>01701 
<a name="l01702"></a>01702 
<a name="l01712"></a><a class="code" href="stk11xx_8h.html#8abb280daa1010eece7e965f3a6471ba">01712</a> <span class="keywordtype">int</span> <a class="code" href="stk11xx-v4l_8c.html#62bc2469df7a6e1d2fe8c455012bd9ad" title="Unregister the video device.">v4l_stk11xx_unregister_video_device</a>(<span class="keyword">struct</span> usb_stk11xx *dev)
<a name="l01713"></a>01713 {
<a name="l01714"></a>01714     <a class="code" href="stk11xx_8h.html#55d1b4af8174ee2f44f9ea2e18f6392d">STK_INFO</a>(<span class="stringliteral">"Syntek USB2.0 Camera release resources video device /dev/video%d\n"</span>, dev-&gt;vdev-&gt;minor);
<a name="l01715"></a>01715 
<a name="l01716"></a>01716     video_set_drvdata(dev-&gt;vdev, NULL);
<a name="l01717"></a>01717     video_unregister_device(dev-&gt;vdev);
<a name="l01718"></a>01718 
<a name="l01719"></a>01719     <span class="keywordflow">return</span> 0;
<a name="l01720"></a>01720 }
<a name="l01721"></a>01721 
<a name="l01722"></a>01722 
<a name="l01728"></a>01728 <span class="keyword">static</span> <span class="keyword">struct </span>v4l2_file_operations <a class="code" href="stk11xx-v4l_8c.html#00a41f99999840e48ab4ae826e53b569">v4l_stk11xx_fops</a> = {
<a name="l01729"></a>01729     .owner = THIS_MODULE,
<a name="l01730"></a>01730     .open = <a class="code" href="stk11xx-v4l_8c.html#a2127105dfc03d43fd4ce48f8e0417ac" title="Open the video device.">v4l_stk11xx_open</a>,
<a name="l01731"></a>01731     .release = <a class="code" href="stk11xx-v4l_8c.html#d19987ae823d30d119e857b2719a74f2" title="Release an opened file.">v4l_stk11xx_release</a>,
<a name="l01732"></a>01732     .read = <a class="code" href="stk11xx-v4l_8c.html#e125a26fc4f36a4b64418acb87b958a4" title="Read the video device.">v4l_stk11xx_read</a>,
<a name="l01733"></a>01733     .poll = <a class="code" href="stk11xx-v4l_8c.html#159e3f9cb0b7adb3d1b9e64298d2b42b" title="Polling function.">v4l_stk11xx_poll</a>,
<a name="l01734"></a>01734     .mmap = <a class="code" href="stk11xx-v4l_8c.html#1baaafe560fe7466c7062aacd02aff8c" title="Memory map.">v4l_stk11xx_mmap</a>,
<a name="l01735"></a>01735     .ioctl = <a class="code" href="stk11xx-v4l_8c.html#b8d6ae85407574b48fd686fe75c74e97" title="Manage IOCTL.">v4l_stk11xx_ioctl</a>,
<a name="l01736"></a>01736 };
<a name="l01737"></a>01737 
</pre></div></div>
<hr size="1"><address style="text-align: right;"><small>Generated on Wed Nov 11 13:36:59 2009 for SyntekUSBVideoCamera by&nbsp;
<a href="http://www.doxygen.org/index.html">
<img src="doxygen.png" alt="doxygen" align="middle" border="0"></a> 1.5.9 </small></address>
</body>
</html>