/*
- * $Id: saa7134-tvaudio.c,v 1.17 2004/11/07 13:17:15 kraxel Exp $
- *
* device driver for philips saa7134 based TV cards
* tv audio decoder (fm stereo, nicam, ...)
*
/* ------------------------------------------------------------------ */
static unsigned int audio_debug = 0;
-module_param(audio_debug, int, 0644);
+MODULE_PARM(audio_debug,"i");
MODULE_PARM_DESC(audio_debug,"enable debug messages [tv audio]");
static unsigned int audio_ddep = 0;
-module_param(audio_ddep, int, 0644);
+MODULE_PARM(audio_ddep,"i");
MODULE_PARM_DESC(audio_ddep,"audio ddep overwrite");
static int audio_clock_override = UNSET;
-module_param(audio_clock_override, int, 0644);
+MODULE_PARM(audio_clock_override, "i");
static int audio_clock_tweak = 0;
-module_param(audio_clock_tweak, int, 0644);
+MODULE_PARM(audio_clock_tweak, "i");
MODULE_PARM_DESC(audio_clock_tweak, "Audio clock tick fine tuning for cards with audio crystal that's slightly off (range [-1024 .. 1024])");
#define dprintk(fmt, arg...) if (audio_debug) \
#define print_regb(reg) printk("%s: reg 0x%03x [%-16s]: 0x%02x\n", \
dev->name,(SAA7134_##reg),(#reg),saa_readb((SAA7134_##reg)))
-/* msecs */
-#define SCAN_INITIAL_DELAY 1000
-#define SCAN_SAMPLE_DELAY 200
-#define SCAN_SUBCARRIER_DELAY 2000
+#define SCAN_INITIAL_DELAY (HZ)
+#define SCAN_SAMPLE_DELAY (HZ/5)
+#define SCAN_SUBCARRIER_DELAY (HZ*2)
/* ------------------------------------------------------------------ */
/* saa7134 code */
saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD1, (acpf & 0x00ff00) >> 8);
saa_writeb(SAA7134_AUDIO_CLOCKS_PER_FIELD2, (acpf & 0x030000) >> 16);
tvaudio_setcarrier(dev,audio->carr1,audio->carr2);
-
+
switch (audio->mode) {
case TVAUDIO_FM_MONO:
case TVAUDIO_FM_BG_STEREO:
static int tvaudio_sleep(struct saa7134_dev *dev, int timeout)
{
DECLARE_WAITQUEUE(wait, current);
-
+
add_wait_queue(&dev->thread.wq, &wait);
if (dev->thread.scan1 == dev->thread.scan2 && !dev->thread.shutdown) {
- if (timeout < 0) {
- set_current_state(TASK_INTERRUPTIBLE);
+ set_current_state(TASK_INTERRUPTIBLE);
+ if (timeout < 0)
schedule();
- } else {
-#if 0
- /* hmm, that one doesn't return on wakeup ... */
- msleep_interruptible(timeout);
-#else
- set_current_state(TASK_INTERRUPTIBLE);
- schedule_timeout(msecs_to_jiffies(timeout));
-#endif
- }
+ else
+ schedule_timeout(timeout);
}
remove_wait_queue(&dev->thread.wq, &wait);
return dev->thread.scan1 != dev->thread.scan2;
{
__u32 idp,nicam;
int retval = -1;
-
+
switch (audio->mode) {
case TVAUDIO_FM_MONO:
return V4L2_TUNER_SUB_MONO;
lastmode = 42;
for (;;) {
- if (tvaudio_sleep(dev,5000))
+ if (tvaudio_sleep(dev,5*HZ))
goto restart;
if (dev->thread.shutdown || signal_pending(current))
break;
[0x09] = "D/K NICAM",
[0x0a] = "L NICAM",
[0x0b] = "I NICAM",
-
+
[0x0c] = "M Korea",
[0x0d] = "M BTSC ",
[0x0e] = "M EIAJ",
static int mute_input_7133(struct saa7134_dev *dev)
{
u32 reg = 0;
- int mask;
-
+
switch (dev->input->amux) {
case TV: reg = 0x02; break;
case LINE1: reg = 0x00; break;
if (dev->ctl_mute)
reg = 0x07;
saa_writel(0x594 >> 2, reg);
-
- /* switch gpio-connected external audio mux */
- if (0 != card(dev).gpiomask) {
- mask = card(dev).gpiomask;
- saa_andorl(SAA7134_GPIO_GPMODE0 >> 2, mask, mask);
- saa_andorl(SAA7134_GPIO_GPSTATUS0 >> 2, mask, dev->input->gpio);
- saa7134_track_gpio(dev,dev->input->name);
- }
return 0;
}
/* insmod option override */
norms = (audio_ddep << 2) | 0x01;
dprintk("ddep override: %s\n",stdres[audio_ddep]);
- } else if (&card(dev).radio == dev->input) {
- dprintk("FM Radio\n");
- norms = (0x0f << 2) | 0x01;
- } else {
+ } else{
/* (let chip) scan for sound carrier */
norms = 0;
if (dev->tvnorm->id & V4L2_STD_PAL) {
saa_dsp_writel(dev, 0x464 >> 2, 0x000000);
saa_dsp_writel(dev, 0x470 >> 2, 0x101010);
- if (tvaudio_sleep(dev,3000))
+ if (tvaudio_sleep(dev,3*HZ))
goto restart;
value = saa_readl(0x528 >> 2) & 0xffffff;
(value & 0x002000) ? " BTSC stereo noise mute " : "",
(value & 0x004000) ? " SAP noise mute " : "",
(value & 0x008000) ? " VDSP " : "",
-
+
(value & 0x010000) ? " NICST " : "",
(value & 0x020000) ? " NICDU " : "",
(value & 0x040000) ? " NICAM muted " : "",
(value & 0x080000) ? " NICAM reserve sound " : "",
-
+
(value & 0x100000) ? " init done " : "");
}
int saa7134_tvaudio_rx2mode(u32 rx)
{
u32 mode;
-
+
mode = V4L2_TUNER_MODE_MONO;
if (rx & V4L2_TUNER_SUB_STEREO)
mode = V4L2_TUNER_MODE_STEREO;
mode = V4L2_TUNER_MODE_LANG2;
return mode;
}
-
+
void saa7134_tvaudio_setmute(struct saa7134_dev *dev)
{
switch (dev->pci->device) {
int (*my_thread)(void *data) = NULL;
/* enable I2S audio output */
- if (card_is_empress(dev)) {
+ if (saa7134_boards[dev->board].has_ts) {
int i2sform = (48000 == dev->oss.rate)
? 0x01 : 0x00;
-
+
/* enable I2S output */
- saa_writeb(SAA7134_I2S_OUTPUT_SELECT, 0x80);
- saa_writeb(SAA7134_I2S_OUTPUT_FORMAT, i2sform);
- saa_writeb(SAA7134_I2S_OUTPUT_LEVEL, 0x0F);
+ saa_writeb(SAA7134_I2S_OUTPUT_SELECT, 0x80);
+ saa_writeb(SAA7134_I2S_OUTPUT_FORMAT, i2sform);
+ saa_writeb(SAA7134_I2S_OUTPUT_LEVEL, 0x0F);
saa_writeb(SAA7134_I2S_AUDIO_OUTPUT, 0x01);
}