Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 1 | |
| 2 | ZC0301 Image Processor and Control Chip |
| 3 | Driver for Linux |
| 4 | ======================================= |
| 5 | |
| 6 | - Documentation - |
| 7 | |
| 8 | |
| 9 | Index |
| 10 | ===== |
| 11 | 1. Copyright |
| 12 | 2. Disclaimer |
| 13 | 3. License |
| 14 | 4. Overview and features |
| 15 | 5. Module dependencies |
| 16 | 6. Module loading |
| 17 | 7. Module parameters |
| 18 | 8. Supported devices |
| 19 | 9. Notes for V4L2 application developers |
| 20 | 10. Contact information |
| 21 | 11. Credits |
| 22 | |
| 23 | |
| 24 | 1. Copyright |
| 25 | ============ |
| 26 | Copyright (C) 2006 by Luca Risolia <luca.risolia@studio.unibo.it> |
| 27 | |
| 28 | |
| 29 | 2. Disclaimer |
| 30 | ============= |
| 31 | This software is not developed or sponsored by Z-Star Microelectronics Corp. |
| 32 | Trademarks are property of their respective owner. |
| 33 | |
| 34 | |
| 35 | 3. License |
| 36 | ========== |
| 37 | This program is free software; you can redistribute it and/or modify |
| 38 | it under the terms of the GNU General Public License as published by |
| 39 | the Free Software Foundation; either version 2 of the License, or |
| 40 | (at your option) any later version. |
| 41 | |
| 42 | This program is distributed in the hope that it will be useful, |
| 43 | but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 44 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 45 | GNU General Public License for more details. |
| 46 | |
| 47 | You should have received a copy of the GNU General Public License |
| 48 | along with this program; if not, write to the Free Software |
| 49 | Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. |
| 50 | |
| 51 | |
| 52 | 4. Overview and features |
| 53 | ======================== |
| 54 | This driver supports the video interface of the devices mounting the ZC0301 |
| 55 | Image Processor and Control Chip. |
| 56 | |
| 57 | The driver relies on the Video4Linux2 and USB core modules. It has been |
| 58 | designed to run properly on SMP systems as well. |
| 59 | |
| 60 | The latest version of the ZC0301 driver can be found at the following URL: |
| 61 | http://www.linux-projects.org/ |
| 62 | |
| 63 | Some of the features of the driver are: |
| 64 | |
| 65 | - full compliance with the Video4Linux2 API (see also "Notes for V4L2 |
| 66 | application developers" paragraph); |
| 67 | - available mmap or read/poll methods for video streaming through isochronous |
| 68 | data transfers; |
| 69 | - automatic detection of image sensor; |
Luca Risolia | 9e47a52 | 2006-02-08 00:05:27 +0000 | [diff] [blame] | 70 | - video format is standard JPEG; |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 71 | - dynamic driver control thanks to various module parameters (see "Module |
| 72 | parameters" paragraph); |
| 73 | - up to 64 cameras can be handled at the same time; they can be connected and |
| 74 | disconnected from the host many times without turning off the computer, if |
| 75 | the system supports hotplugging; |
| 76 | |
| 77 | |
| 78 | 5. Module dependencies |
| 79 | ====================== |
| 80 | For it to work properly, the driver needs kernel support for Video4Linux and |
| 81 | USB. |
| 82 | |
| 83 | The following options of the kernel configuration file must be enabled and |
| 84 | corresponding modules must be compiled: |
| 85 | |
| 86 | # Multimedia devices |
| 87 | # |
| 88 | CONFIG_VIDEO_DEV=m |
| 89 | |
| 90 | # USB support |
| 91 | # |
| 92 | CONFIG_USB=m |
| 93 | |
| 94 | In addition, depending on the hardware being used, the modules below are |
| 95 | necessary: |
| 96 | |
| 97 | # USB Host Controller Drivers |
| 98 | # |
| 99 | CONFIG_USB_EHCI_HCD=m |
| 100 | CONFIG_USB_UHCI_HCD=m |
| 101 | CONFIG_USB_OHCI_HCD=m |
| 102 | |
| 103 | The ZC0301 controller also provides a built-in microphone interface. It is |
| 104 | supported by the USB Audio driver thanks to the ALSA API: |
| 105 | |
| 106 | # Sound |
| 107 | # |
| 108 | CONFIG_SOUND=y |
| 109 | |
| 110 | # Advanced Linux Sound Architecture |
| 111 | # |
| 112 | CONFIG_SND=m |
| 113 | |
| 114 | # USB devices |
| 115 | # |
| 116 | CONFIG_SND_USB_AUDIO=m |
| 117 | |
| 118 | And finally: |
| 119 | |
| 120 | # USB Multimedia devices |
| 121 | # |
| 122 | CONFIG_USB_ZC0301=m |
| 123 | |
| 124 | |
| 125 | 6. Module loading |
| 126 | ================= |
| 127 | To use the driver, it is necessary to load the "zc0301" module into memory |
| 128 | after every other module required: "videodev", "usbcore" and, depending on |
| 129 | the USB host controller you have, "ehci-hcd", "uhci-hcd" or "ohci-hcd". |
| 130 | |
| 131 | Loading can be done as shown below: |
| 132 | |
| 133 | [root@localhost home]# modprobe zc0301 |
| 134 | |
| 135 | At this point the devices should be recognized. You can invoke "dmesg" to |
| 136 | analyze kernel messages and verify that the loading process has gone well: |
| 137 | |
| 138 | [user@localhost home]$ dmesg |
| 139 | |
| 140 | |
| 141 | 7. Module parameters |
| 142 | ==================== |
| 143 | Module parameters are listed below: |
| 144 | ------------------------------------------------------------------------------- |
| 145 | Name: video_nr |
| 146 | Type: short array (min = 0, max = 64) |
| 147 | Syntax: <-1|n[,...]> |
| 148 | Description: Specify V4L2 minor mode number: |
| 149 | -1 = use next available |
| 150 | n = use minor number n |
| 151 | You can specify up to 64 cameras this way. |
| 152 | For example: |
| 153 | video_nr=-1,2,-1 would assign minor number 2 to the second |
| 154 | registered camera and use auto for the first one and for every |
| 155 | other camera. |
| 156 | Default: -1 |
| 157 | ------------------------------------------------------------------------------- |
| 158 | Name: force_munmap |
| 159 | Type: bool array (min = 0, max = 64) |
| 160 | Syntax: <0|1[,...]> |
| 161 | Description: Force the application to unmap previously mapped buffer memory |
| 162 | before calling any VIDIOC_S_CROP or VIDIOC_S_FMT ioctl's. Not |
| 163 | all the applications support this feature. This parameter is |
| 164 | specific for each detected camera. |
| 165 | 0 = do not force memory unmapping |
| 166 | 1 = force memory unmapping (save memory) |
| 167 | Default: 0 |
| 168 | ------------------------------------------------------------------------------- |
Luca Risolia | a847423 | 2006-02-25 06:57:49 +0000 | [diff] [blame] | 169 | Name: frame_timeout |
| 170 | Type: uint array (min = 0, max = 64) |
| 171 | Syntax: <n[,...]> |
| 172 | Description: Timeout for a video frame in seconds. This parameter is |
| 173 | specific for each detected camera. This parameter can be |
| 174 | changed at runtime thanks to the /sys filesystem interface. |
| 175 | Default: 2 |
| 176 | ------------------------------------------------------------------------------- |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 177 | Name: debug |
| 178 | Type: ushort |
| 179 | Syntax: <n> |
| 180 | Description: Debugging information level, from 0 to 3: |
| 181 | 0 = none (use carefully) |
| 182 | 1 = critical errors |
| 183 | 2 = significant informations |
| 184 | 3 = more verbose messages |
| 185 | Level 3 is useful for testing only, when only one device |
| 186 | is used at the same time. It also shows some more informations |
| 187 | about the hardware being detected. This module parameter can be |
| 188 | changed at runtime thanks to the /sys filesystem interface. |
| 189 | Default: 2 |
| 190 | ------------------------------------------------------------------------------- |
| 191 | |
| 192 | |
| 193 | 8. Supported devices |
| 194 | ==================== |
| 195 | None of the names of the companies as well as their products will be mentioned |
| 196 | here. They have never collaborated with the author, so no advertising. |
| 197 | |
| 198 | From the point of view of a driver, what unambiguously identify a device are |
| 199 | its vendor and product USB identifiers. Below is a list of known identifiers of |
| 200 | devices mounting the ZC0301 Image Processor and Control Chips: |
| 201 | |
| 202 | Vendor ID Product ID |
| 203 | --------- ---------- |
Luca Risolia | 6e0755a | 2006-03-03 09:58:39 +0000 | [diff] [blame^] | 204 | 0x041e 0x4017 |
| 205 | 0x041e 0x401c |
| 206 | 0x041e 0x401e |
| 207 | 0x041e 0x4034 |
| 208 | 0x041e 0x4035 |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 209 | 0x046d 0x08ae |
Luca Risolia | a847423 | 2006-02-25 06:57:49 +0000 | [diff] [blame] | 210 | 0x0ac8 0x0301 |
Luca Risolia | 6e0755a | 2006-03-03 09:58:39 +0000 | [diff] [blame^] | 211 | 0x10fd 0x8050 |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 212 | |
Luca Risolia | a847423 | 2006-02-25 06:57:49 +0000 | [diff] [blame] | 213 | The list above does not imply that all those devices work with this driver: up |
| 214 | until now only the ones that mount the following image sensors are supported; |
| 215 | kernel messages will always tell you whether this is the case: |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 216 | |
| 217 | Model Manufacturer |
| 218 | ----- ------------ |
| 219 | PAS202BCB PixArt Imaging, Inc. |
| 220 | |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 221 | |
| 222 | 9. Notes for V4L2 application developers |
| 223 | ======================================== |
| 224 | This driver follows the V4L2 API specifications. In particular, it enforces two |
| 225 | rules: |
| 226 | |
| 227 | - exactly one I/O method, either "mmap" or "read", is associated with each |
| 228 | file descriptor. Once it is selected, the application must close and reopen the |
| 229 | device to switch to the other I/O method; |
| 230 | |
| 231 | - although it is not mandatory, previously mapped buffer memory should always |
| 232 | be unmapped before calling any "VIDIOC_S_CROP" or "VIDIOC_S_FMT" ioctl's. |
| 233 | The same number of buffers as before will be allocated again to match the size |
| 234 | of the new video frames, so you have to map the buffers again before any I/O |
| 235 | attempts on them. |
| 236 | |
Luca Risolia | 60f7805 | 2006-02-06 16:29:35 +0000 | [diff] [blame] | 237 | |
| 238 | 10. Contact information |
| 239 | ======================= |
| 240 | The author may be contacted by e-mail at <luca.risolia@studio.unibo.it>. |
| 241 | |
| 242 | GPG/PGP encrypted e-mail's are accepted. The GPG key ID of the author is |
| 243 | 'FCE635A4'; the public 1024-bit key should be available at any keyserver; |
| 244 | the fingerprint is: '88E8 F32F 7244 68BA 3958 5D40 99DA 5D2A FCE6 35A4'. |
| 245 | |
| 246 | |
| 247 | 11. Credits |
| 248 | =========== |
Luca Risolia | 9e47a52 | 2006-02-08 00:05:27 +0000 | [diff] [blame] | 249 | - Informations about the chip internals needed to enable the I2C protocol have |
| 250 | been taken from the documentation of the ZC030x Video4Linux1 driver written |
| 251 | by Andrew Birkett <andy@nobugs.org>; |
Luca Risolia | a847423 | 2006-02-25 06:57:49 +0000 | [diff] [blame] | 252 | - The initialization values of the ZC0301 controller connected to the PAS202BCB |
Luca Risolia | 9e47a52 | 2006-02-08 00:05:27 +0000 | [diff] [blame] | 253 | image sensor have been taken from the SPCA5XX driver maintained by |
| 254 | Michel Xhaard <mxhaard@magic.fr>. |