Orange Pi5 kernel

Deprecated Linux kernel 5.10.110 for OrangePi 5/5B/5+ boards

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