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