Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 1 | Driver for Trust Computer Products Framegrabber, version 0.6.1 |
| 2 | ------ --- ----- -------- -------- ------------ ------- - - - |
| 3 | |
| 4 | - ZORAN ------------------------------------------------------ |
| 5 | Author: Pauline Middelink <middelin@polyware.nl> |
| 6 | Date: 18 September 1999 |
| 7 | Version: 0.6.1 |
| 8 | |
| 9 | - Description ------------------------------------------------ |
| 10 | |
| 11 | Video4Linux compatible driver for an unknown brand framegrabber |
| 12 | (Sold in the Netherlands by TRUST Computer Products) and various |
| 13 | other zoran zr36120 based framegrabbers. |
| 14 | |
| 15 | The card contains a ZR36120 Multimedia PCI Interface and a Philips |
| 16 | SAA7110 Onechip Frontend videodecoder. There is also an DSP of |
| 17 | which I have forgotten the number, since i will never get that thing |
| 18 | to work without specs from the vendor itself. |
| 19 | |
| 20 | The SAA711x are capable of processing 6 different video inputs, |
| 21 | CVBS1..6 and Y1+C1, Y2+C2, Y3+C3. All in 50/60Hz, NTSC, PAL or |
| 22 | SECAM and delivering a YUV datastream. On my card the input |
| 23 | 'CVBS-0' corresponds to channel CVBS2 and 'S-Video' to Y2+C2. |
| 24 | |
| 25 | I have some reports of other cards working with the mentioned |
| 26 | chip sets. For a list of other working cards please have a look |
| 27 | at the cards named in the tvcards struct in the beginning of |
| 28 | zr36120.c |
| 29 | |
| 30 | After some testing, I discovered that the carddesigner messed up |
| 31 | on the I2C interface. The Zoran chip includes 2 lines SDA and SCL |
| 32 | which (s)he connected reversely. So we have to clock on the SDA |
| 33 | and r/w data on the SCL pin. Life is fun... Each cardtype now has |
| 34 | a bit which signifies if you have a card with the same deficiency. |
| 35 | |
| 36 | Oh, for the completeness of this story I must mention that my |
| 37 | card delivers the VSYNC pulse of the SAA chip to GIRQ1, not |
| 38 | GIRQ0 as some other cards have. This is also incorporated in |
| 39 | the driver be clearing/setting the 'useirq1' bit in the tvcard |
| 40 | description. |
| 41 | |
| 42 | Another problems of continuous capturing data with a Zoran chip |
| 43 | is something nasty inside the chip. It effectively halves the |
| 44 | fps we ought to get... Here is the scenario: capturing frames |
| 45 | to memory is done in the so-called snapshot mode. In this mode |
| 46 | the Zoran stops after capturing a frame worth of data and wait |
| 47 | till the application set GRAB bit to indicate readiness for the |
| 48 | next frame. After detecting a set bit, the chip neatly waits |
| 49 | till the start of a frame, captures it and it goes back to off. |
| 50 | Smart ppl will notice the problem here. Its the waiting on the |
| 51 | _next_ frame each time we set the GRAB bit... Oh well, 12,5 fps |
| 52 | is still plenty fast for me. |
| 53 | -- update 28/7/1999 -- |
| 54 | Don't believe a word I just said... Proof is the output |
| 55 | of `streamer -t 300 -r 25 -f avi15 -o /dev/null` |
| 56 | ++--+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 57 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 58 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 59 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 60 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 61 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 62 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 63 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 64 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 65 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 66 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- 25/25 |
| 67 | +-s+-+-+-+-+-+-+-+-+-+-+-+-+-s+-+-+-+-+-+-+-+-+-+-+- |
| 68 | syncer: done |
| 69 | writer: done |
| 70 | (note the /dev/null is prudent here, my system is not able to |
| 71 | grab /and/ write 25 fps to a file... gifts welcome :) ) |
| 72 | The technical reasoning follows: The zoran completed the last |
| 73 | frame, the VSYNC goes low, and GRAB is cleared. The interrupt |
| 74 | routine starts to work since its VSYNC driven, and again |
| 75 | activates the GRAB bit. A few ms later the VSYNC (re-)rises and |
| 76 | the zoran starts to work on a new and freshly broadcasted frame.... |
| 77 | |
| 78 | For pointers I used the specs of both chips. Below are the URLs: |
Randy Dunlap | 98766fb | 2005-11-21 21:32:31 -0800 | [diff] [blame^] | 79 | http://www.zoran.com/ftp/download/devices/pci/ZR36120/36120data.pdf |
| 80 | http://www-us.semiconductor.philips.com/acrobat/datasheets/SAA_7110_A_1.pdf |
| 81 | Some alternatives for the Philips SAA 7110 datasheet are: |
| 82 | http://www.datasheetcatalog.com/datasheets_pdf/S/A/A/7/SAA7110.shtml |
| 83 | http://www.datasheetarchive.com/search.php?search=SAA7110&sType=part |
Linus Torvalds | 1da177e | 2005-04-16 15:20:36 -0700 | [diff] [blame] | 84 | |
| 85 | The documentation has very little on absolute numbers or timings |
| 86 | needed for the various modes/resolutions, but there are other |
| 87 | programs you can borrow those from. |
| 88 | |
| 89 | ------ Install -------------------------------------------- |
| 90 | Read the file called TODO. Note its long list of limitations. |
| 91 | |
| 92 | Build a kernel with VIDEO4LINUX enabled. Activate the |
| 93 | BT848 driver; we need this because we have need for the |
| 94 | other modules (i2c and videodev) it enables. |
| 95 | |
| 96 | To install this software, extract it into a suitable directory. |
| 97 | Examine the makefile and change anything you don't like. Type "make". |
| 98 | |
| 99 | After making the modules check if you have the much needed |
| 100 | /dev/video devices. If not, execute the following 4 lines: |
| 101 | mknod /dev/video c 81 0 |
| 102 | mknod /dev/video1 c 81 1 |
| 103 | mknod /dev/video2 c 81 2 |
| 104 | mknod /dev/video3 c 81 3 |
| 105 | mknod /dev/video4 c 81 4 |
| 106 | |
| 107 | After making/checking the devices do: |
| 108 | modprobe i2c |
| 109 | modprobe videodev |
| 110 | modprobe saa7110 (optional) |
| 111 | modprobe saa7111 (optional) |
| 112 | modprobe tuner (optional) |
| 113 | insmod zoran cardtype=<n> |
| 114 | |
| 115 | <n> is the cardtype of the card you have. The cardnumber can |
| 116 | be found in the source of zr36120. Look for tvcards. If your |
| 117 | card is not there, please try if any other card gives some |
| 118 | response, and mail me if you got a working tvcard addition. |
| 119 | |
| 120 | PS. <TVCard editors behold!) |
| 121 | Dont forget to set video_input to the number of inputs |
| 122 | you defined in the video_mux part of the tvcard definition. |
| 123 | Its a common error to add a channel but not incrementing |
| 124 | video_input and getting angry with me/v4l/linux/linus :( |
| 125 | |
| 126 | You are now ready to test the framegrabber with your favorite |
| 127 | video4linux compatible tool |
| 128 | |
| 129 | ------ Application ---------------------------------------- |
| 130 | |
| 131 | This device works with all Video4Linux compatible applications, |
| 132 | given the limitations in the TODO file. |
| 133 | |
| 134 | ------ API ------------------------------------------------ |
| 135 | |
| 136 | This uses the V4L interface as of kernel release 2.1.116, and in |
| 137 | fact has not been tested on any lower version. There are a couple |
| 138 | of minor differences due to the fact that the amount of data returned |
| 139 | with each frame varies, and no doubt there are discrepancies due to my |
| 140 | misunderstanding of the API. I intend to convert this driver to the |
| 141 | new V4L2 API when it has stabilized more. |
| 142 | |
| 143 | ------ Current state -------------------------------------- |
| 144 | |
| 145 | The driver is capable of overlaying a video image in screen, and |
| 146 | even capable of grabbing frames. It uses the BIGPHYSAREA patch |
| 147 | to allocate lots of large memory blocks when tis patch is |
| 148 | found in the kernel, but it doesn't need it. |
| 149 | The consequence is that, when loading the driver as a module, |
| 150 | the module may tell you it's out of memory, but 'free' says |
| 151 | otherwise. The reason is simple; the modules wants its memory |
| 152 | contiguous, not fragmented, and after a long uptime there |
| 153 | probably isn't a fragment of memory large enough... |
| 154 | |
| 155 | The driver uses a double buffering scheme, which should really |
| 156 | be an n-way buffer, depending on the size of allocated framebuffer |
| 157 | and the requested grab-size/format. |
| 158 | This current version also fixes a dead-lock situation during irq |
| 159 | time, which really, really froze my system... :) |
| 160 | |
| 161 | Good luck. |
| 162 | Pauline |