diff options
Diffstat (limited to 'linux/drivers/media/video/cx88/cx88-tvaudio.c')
-rw-r--r-- | linux/drivers/media/video/cx88/cx88-tvaudio.c | 38 |
1 files changed, 28 insertions, 10 deletions
diff --git a/linux/drivers/media/video/cx88/cx88-tvaudio.c b/linux/drivers/media/video/cx88/cx88-tvaudio.c index 4931667f3..a53db7a39 100644 --- a/linux/drivers/media/video/cx88/cx88-tvaudio.c +++ b/linux/drivers/media/video/cx88/cx88-tvaudio.c @@ -1,5 +1,5 @@ /* - $Id: cx88-tvaudio.c,v 1.30 2005/02/10 12:40:39 kraxel Exp $ + $Id: cx88-tvaudio.c,v 1.31 2005/02/14 16:30:26 kraxel Exp $ cx88x-audio.c - Conexant CX23880/23881 audio downstream driver driver @@ -57,7 +57,7 @@ #include "cx88.h" -static unsigned int audio_debug = 1; +static unsigned int audio_debug = 0; module_param(audio_debug,int,0644); MODULE_PARM_DESC(audio_debug,"enable debug messages [audio]"); @@ -785,6 +785,19 @@ void cx88_set_tvaudio(struct cx88_core *core) return; } +void cx88_newstation(struct cx88_core *core) +{ + core->audiomode_manual = UNSET; + + switch (core->tvaudio) { + case WW_SYSTEM_L_AM: + /* try nicam ... */ + core->audiomode_current = V4L2_TUNER_MODE_STEREO; + set_audio_standard_NICAM_L(core, 1); + break; + } +} + void cx88_get_stereo(struct cx88_core *core, struct v4l2_tuner *t) { static char *m[] = {"stereo", "dual mono", "mono", "sap"}; @@ -832,12 +845,16 @@ void cx88_get_stereo(struct cx88_core *core, struct v4l2_tuner *t) } break; case WW_NICAM_BGDKL: - if (0 == mode) + if (0 == mode) { t->audmode = V4L2_TUNER_MODE_STEREO; + t->rxsubchans |= V4L2_TUNER_SUB_STEREO; + } break; case WW_SYSTEM_L_AM: - if (0x0 == mode) + if (0x0 == mode && (cx_read(AUD_INIT) & 0x04)) { t->audmode = V4L2_TUNER_MODE_STEREO; + t->rxsubchans |= V4L2_TUNER_SUB_STEREO; + } break ; default: /* nothing */ @@ -852,11 +869,12 @@ void cx88_set_stereo(struct cx88_core *core, u32 mode, int manual) u32 mask = UNSET; if (manual) { - core->audiomode = mode; + core->audiomode_manual = mode; } else { - if (UNSET != core->audiomode) + if (UNSET != core->audiomode_manual) return; } + core->audiomode_current = mode; switch (core->tvaudio) { case WW_BTSC: @@ -959,7 +977,7 @@ int cx88_audio_thread(void *data) { struct cx88_core *core = data; struct v4l2_tuner t; - u32 mode = 0, lastmode = 0; + u32 mode = 0; dprintk("cx88: tvaudio thread started\n"); for (;;) { @@ -971,7 +989,7 @@ int cx88_audio_thread(void *data) memset(&t,0,sizeof(t)); cx88_get_stereo(core,&t); - if (UNSET == core->audiomode) + if (UNSET != core->audiomode_manual) /* manually set, don't do anything. */ continue; @@ -980,11 +998,10 @@ int cx88_audio_thread(void *data) mode = V4L2_TUNER_MODE_STEREO; else mode = V4L2_TUNER_MODE_MONO; - if (mode == lastmode) + if (mode == core->audiomode_current) continue; /* automatically switch to best available mode */ - lastmode = mode; cx88_set_stereo(core, mode, 0); } @@ -995,6 +1012,7 @@ int cx88_audio_thread(void *data) /* ----------------------------------------------------------- */ EXPORT_SYMBOL(cx88_set_tvaudio); +EXPORT_SYMBOL(cx88_newstation); EXPORT_SYMBOL(cx88_set_stereo); EXPORT_SYMBOL(cx88_get_stereo); EXPORT_SYMBOL(cx88_audio_thread); |