Lines Matching +full:card +full:- +full:detect +full:- +full:delay
1 // SPDX-License-Identifier: GPL-2.0-only
10 * It seems that the card is not linear to 0 volume. It cuts off
17 * 1999-05-06 - (C. van Schaik)
18 * - Make signal strength and stereo scans
19 * kinder to cpu while in delay
20 * 1999-01-05 - (C. van Schaik)
21 * - Changed tuning to 1/160Mhz accuracy
22 * - Added stereo support
23 * (card defaults to stereo)
24 * (can explicitly force mono on the card)
25 * (can detect if station is in stereo)
26 * - Added unmute function
27 * - Reworked ioctl functions
28 * 2002-07-15 - Fix Stereo typo
30 * 2006-07-24 - Converted to V4L2 API
33 * Converted to the radio-isa framework by Hans Verkuil <hans.verkuil@cisco.com>
39 * Fully tested with the Keene USB FM Transmitter and the v4l2-compliance tool.
45 #include <linux/delay.h> /* udelay, msleep */
50 #include <media/v4l2-device.h>
51 #include <media/v4l2-ioctl.h>
52 #include "radio-isa.h"
60 #define CONFIG_RADIO_ZOLTRIX_PORT -1
66 [1 ... (ZOLTRIX_MAX - 1)] = -1 };
67 static int radio_nr[ZOLTRIX_MAX] = { [0 ... (ZOLTRIX_MAX - 1)] = -1 };
70 MODULE_PARM_DESC(io, "I/O addresses of the Zoltrix Radio Plus card (0x20c or 0x30c)");
84 return zol ? &zol->isa : NULL; in zoltrix_alloc()
91 zol->curvol = vol; in zoltrix_s_mute_volume()
92 zol->muted = mute; in zoltrix_s_mute_volume()
94 outb(0, isa->io); in zoltrix_s_mute_volume()
95 outb(0, isa->io); in zoltrix_s_mute_volume()
96 inb(isa->io + 3); /* Zoltrix needs to be read to confirm */ in zoltrix_s_mute_volume()
100 outb(vol - 1, isa->io); in zoltrix_s_mute_volume()
102 inb(isa->io + 2); in zoltrix_s_mute_volume()
110 struct v4l2_device *v4l2_dev = &isa->v4l2_dev; in zoltrix_s_frequency()
112 bool stereo = isa->stereo; in zoltrix_s_frequency()
117 return -EINVAL; in zoltrix_s_frequency()
120 m = (freq / 160 - 8800) * 2; in zoltrix_s_frequency()
126 outb(0, isa->io); in zoltrix_s_frequency()
127 outb(0, isa->io); in zoltrix_s_frequency()
128 inb(isa->io + 3); /* Zoltrix needs to be read to confirm */ in zoltrix_s_frequency()
130 outb(0x40, isa->io); in zoltrix_s_frequency()
131 outb(0xc0, isa->io); in zoltrix_s_frequency()
134 while (i--) { in zoltrix_s_frequency()
136 outb(0x80, isa->io); in zoltrix_s_frequency()
138 outb(0x00, isa->io); in zoltrix_s_frequency()
140 outb(0x80, isa->io); in zoltrix_s_frequency()
143 outb(0xc0, isa->io); in zoltrix_s_frequency()
145 outb(0x40, isa->io); in zoltrix_s_frequency()
147 outb(0xc0, isa->io); in zoltrix_s_frequency()
153 outb(0x80, isa->io); in zoltrix_s_frequency()
154 outb(0xc0, isa->io); in zoltrix_s_frequency()
155 outb(0x40, isa->io); in zoltrix_s_frequency()
157 inb(isa->io + 2); in zoltrix_s_frequency()
160 return zoltrix_s_mute_volume(isa, zol->muted, zol->curvol); in zoltrix_s_frequency()
169 outb(0x00, isa->io); /* This stuff I found to do nothing */ in zoltrix_g_rxsubchans()
170 outb(zol->curvol, isa->io); in zoltrix_g_rxsubchans()
173 a = inb(isa->io); in zoltrix_g_rxsubchans()
175 b = inb(isa->io); in zoltrix_g_rxsubchans()
186 outb(0x00, isa->io); /* This stuff I found to do nothing */ in zoltrix_g_signal()
187 outb(zol->curvol, isa->io); in zoltrix_g_signal()
190 a = inb(isa->io); in zoltrix_g_signal()
192 b = inb(isa->io); in zoltrix_g_signal()
197 /* I found this out by playing with a binary scanner on the card io */ in zoltrix_g_signal()
203 return zoltrix_s_frequency(isa, isa->freq); in zoltrix_s_stereo()
223 .name = "radio-zoltrix",
231 .card = "Zoltrix Radio Plus",