Merge tag 'xfs-4.21-merge-3' of git://git.kernel.org/pub/scm/fs/xfs/xfs-linux
[sfrench/cifs-2.6.git] / Documentation / media / v4l-drivers / radiotrack.rst
1 .. SPDX-License-Identifier: GPL-2.0
2
3 The Radiotrack radio driver
4 ===========================
5
6 Author: Stephen M. Benoit <benoits@servicepro.com>
7
8 Date:  Dec 14, 1996
9
10 ACKNOWLEDGMENTS
11 ----------------
12
13 This document was made based on 'C' code for Linux from Gideon le Grange
14 (legrang@active.co.za or legrang@cs.sun.ac.za) in 1994, and elaborations from
15 Frans Brinkman (brinkman@esd.nl) in 1996.  The results reported here are from
16 experiments that the author performed on his own setup, so your mileage may
17 vary... I make no guarantees, claims or warranties to the suitability or
18 validity of this information.  No other documentation on the AIMS
19 Lab (http://www.aimslab.com/) RadioTrack card was made available to the
20 author.  This document is offered in the hopes that it might help users who
21 want to use the RadioTrack card in an environment other than MS Windows.
22
23 WHY THIS DOCUMENT?
24 ------------------
25
26 I have a RadioTrack card from back when I ran an MS-Windows platform.  After
27 converting to Linux, I found Gideon le Grange's command-line software for
28 running the card, and found that it was good!  Frans Brinkman made a
29 comfortable X-windows interface, and added a scanning feature.  For hack
30 value, I wanted to see if the tuner could be tuned beyond the usual FM radio
31 broadcast band, so I could pick up the audio carriers from North American
32 broadcast TV channels, situated just below and above the 87.0-109.0 MHz range.
33 I did not get much success, but I learned about programming ioports under
34 Linux and gained some insights about the hardware design used for the card.
35
36 So, without further delay, here are the details.
37
38
39 PHYSICAL DESCRIPTION
40 --------------------
41
42 The RadioTrack card is an ISA 8-bit FM radio card.  The radio frequency (RF)
43 input is simply an antenna lead, and the output is a power audio signal
44 available through a miniature phone plug.  Its RF frequencies of operation are
45 more or less limited from 87.0 to 109.0 MHz (the commercial FM broadcast
46 band).  Although the registers can be programmed to request frequencies beyond
47 these limits, experiments did not give promising results.  The variable
48 frequency oscillator (VFO) that demodulates the intermediate frequency (IF)
49 signal probably has a small range of useful frequencies, and wraps around or
50 gets clipped beyond the limits mentioned above.
51
52
53 CONTROLLING THE CARD WITH IOPORT
54 --------------------------------
55
56 The RadioTrack (base) ioport is configurable for 0x30c or 0x20c.  Only one
57 ioport seems to be involved.  The ioport decoding circuitry must be pretty
58 simple, as individual ioport bits are directly matched to specific functions
59 (or blocks) of the radio card.  This way, many functions can be changed in
60 parallel with one write to the ioport.  The only feedback available through
61 the ioports appears to be the "Stereo Detect" bit.
62
63 The bits of the ioport are arranged as follows:
64
65 .. code-block:: none
66
67         MSb                                                         LSb
68         +------+------+------+--------+--------+-------+---------+--------+
69         | VolA | VolB | ???? | Stereo | Radio  | TuneA | TuneB   | Tune   |
70         |  (+) |  (-) |      | Detect | Audio  | (bit) | (latch) | Update |
71         |      |      |      | Enable | Enable |       |         | Enable |
72         +------+------+------+--------+--------+-------+---------+--------+
73
74
75 ====  ====  =================================
76 VolA  VolB  Description
77 ====  ====  =================================
78 0        0  audio mute
79 0        1  volume +    (some delay required)
80 1        0  volume -    (some delay required)
81 1        1  stay at present volume
82 ====  ====  =================================
83
84 ====================    ===========
85 Stereo Detect Enable    Description
86 ====================    ===========
87 0                       No Detect
88 1                       Detect
89 ====================    ===========
90
91 Results available by reading ioport >60 msec after last port write.
92
93   0xff ==> no stereo detected,  0xfd ==> stereo detected.
94
95 =============================   =============================
96 Radio to Audio (path) Enable    Description
97 =============================   =============================
98 0                               Disable path (silence)
99 1                               Enable path  (audio produced)
100 =============================   =============================
101
102 =====  =====  ==================
103 TuneA  TuneB  Description
104 =====  =====  ==================
105 0       0     "zero" bit phase 1
106 0       1     "zero" bit phase 2
107 1       0     "one" bit phase 1
108 1       1     "one" bit phase 2
109 =====  =====  ==================
110
111
112 24-bit code, where bits = (freq*40) + 10486188.
113 The Most Significant 11 bits must be 1010 xxxx 0x0 to be valid.
114 The bits are shifted in LSb first.
115
116 ==================      ===========================
117 Tune Update Enable      Description
118 ==================      ===========================
119 0                       Tuner held constant
120 1                       Tuner updating in progress
121 ==================      ===========================
122
123
124 PROGRAMMING EXAMPLES
125 --------------------
126
127 .. code-block:: none
128
129         Default:        BASE <-- 0xc8  (current volume, no stereo detect,
130                                         radio enable, tuner adjust disable)
131
132         Card Off:       BASE <-- 0x00  (audio mute, no stereo detect,
133                                         radio disable, tuner adjust disable)
134
135         Card On:        BASE <-- 0x00  (see "Card Off", clears any unfinished business)
136                         BASE <-- 0xc8  (see "Default")
137
138         Volume Down:    BASE <-- 0x48  (volume down, no stereo detect,
139                                         radio enable, tuner adjust disable)
140                         wait 10 msec
141                         BASE <-- 0xc8  (see "Default")
142
143         Volume Up:      BASE <-- 0x88  (volume up, no stereo detect,
144                                         radio enable, tuner adjust disable)
145                         wait 10 msec
146                         BASE <-- 0xc8  (see "Default")
147
148         Check Stereo:   BASE <-- 0xd8  (current volume, stereo detect,
149                                         radio enable, tuner adjust disable)
150                         wait 100 msec
151                         x <-- BASE     (read ioport)
152                         BASE <-- 0xc8  (see "Default")
153
154                         x=0xff ==> "not stereo", x=0xfd ==> "stereo detected"
155
156         Set Frequency:  code = (freq*40) + 10486188
157                         foreach of the 24 bits in code,
158                         (from Least to Most Significant):
159                         to write a "zero" bit,
160                         BASE <-- 0x01  (audio mute, no stereo detect, radio
161                                         disable, "zero" bit phase 1, tuner adjust)
162                         BASE <-- 0x03  (audio mute, no stereo detect, radio
163                                         disable, "zero" bit phase 2, tuner adjust)
164                         to write a "one" bit,
165                         BASE <-- 0x05  (audio mute, no stereo detect, radio
166                                         disable, "one" bit phase 1, tuner adjust)
167                         BASE <-- 0x07  (audio mute, no stereo detect, radio
168                                         disable, "one" bit phase 2, tuner adjust)