// SPDX-License-Identifier: GPL-2.0-only /* * AimsLab RadioTrack (aka RadioVeveal) driver * * Copyright 1997 M. Kirkwood * * Converted to the radio-isa framework by Hans Verkuil <hansverk@cisco.com> * Converted to V4L2 API by Mauro Carvalho Chehab <mchehab@kernel.org> * Converted to new API by Alan Cox <alan@lxorguk.ukuu.org.uk> * Various bugfixes and enhancements by Russell Kroll <rkroll@exploits.org> * * Notes on the hardware (reverse engineered from other peoples' * reverse engineering of AIMS' code :-) * * Frequency control is done digitally -- ie out(port,encodefreq(95.8)); * * The signal strength query is unsurprisingly inaccurate. And it seems * to indicate that (on my card, at least) the frequency setting isn't * too great. (I have to tune up .025MHz from what the freq should be * to get a report that the thing is tuned.) * * Volume control is (ugh) analogue: * out(port, start_increasing_volume); * wait(a_wee_while); * out(port, stop_changing_the_volume); * * Fully tested with the Keene USB FM Transmitter and the v4l2-compliance tool.
*/
MODULE_AUTHOR("M. Kirkwood");
MODULE_DESCRIPTION("A driver for the RadioTrack/RadioReveal radio card.");
MODULE_LICENSE("GPL");
MODULE_VERSION("1.0.0");
if (mute) {
outb(0xd0, isa->io); /* volume steady + sigstr + off */ return 0;
} if (vol == 0) { /* volume = 0 means mute the card */
outb(0x48, isa->io); /* volume down but still "on" */
msleep(curvol * 3); /* make sure it's totally down */
} elseif (curvol < vol) {
outb(0x98, isa->io); /* volume up + sigstr + on */ for (; curvol < vol; curvol++)
mdelay(3);
} elseif (curvol > vol) {
outb(0x58, isa->io); /* volume down + sigstr + on */ for (; curvol > vol; curvol--)
mdelay(3);
}
outb(0xd8, isa->io); /* volume steady + sigstr + on */
rt->curvol = vol; return 0;
}
/* Mute card - prevents noisy bootups */ staticint rtrack_initialize(struct radio_isa_card *isa)
{ /* this ensures that the volume is all the way up */
outb(0x90, isa->io); /* volume up but still "on" */
msleep(3000); /* make sure it's totally up */
outb(0xc0, isa->io); /* steady volume, mute card */ return 0;
}
Die Informationen auf dieser Webseite wurden
nach bestem Wissen sorgfältig zusammengestellt. Es wird jedoch weder Vollständigkeit, noch Richtigkeit,
noch Qualität der bereit gestellten Informationen zugesichert.
Bemerkung:
Die farbliche Syntaxdarstellung und die Messung sind noch experimentell.