diff options
author | Nickolay V. Shmyrev <devnull@localhost> | 2005-06-17 19:41:34 +0000 |
---|---|---|
committer | Nickolay V. Shmyrev <devnull@localhost> | 2005-06-17 19:41:34 +0000 |
commit | 2c1d1e28157672b8828bbd7a18feb8e728c30bdd (patch) | |
tree | eec59a21078aab72773e7b51c19d347b5ce07f3c /linux/drivers | |
parent | b98cb49b5f870489e202fa1ec72a97f6b9fa0f46 (diff) | |
download | mediapointer-dvb-s2-2c1d1e28157672b8828bbd7a18feb8e728c30bdd.tar.gz mediapointer-dvb-s2-2c1d1e28157672b8828bbd7a18feb8e728c30bdd.tar.bz2 |
Fix nicam detection on saa7134 cards
Diffstat (limited to 'linux/drivers')
-rw-r--r-- | linux/drivers/media/video/saa7134/saa7134-tvaudio.c | 38 |
1 files changed, 22 insertions, 16 deletions
diff --git a/linux/drivers/media/video/saa7134/saa7134-tvaudio.c b/linux/drivers/media/video/saa7134/saa7134-tvaudio.c index 1d6fb02d7..88a132edd 100644 --- a/linux/drivers/media/video/saa7134/saa7134-tvaudio.c +++ b/linux/drivers/media/video/saa7134/saa7134-tvaudio.c @@ -1,5 +1,5 @@ /* - * $Id: saa7134-tvaudio.c,v 1.27 2005/06/14 19:13:21 hhackmann Exp $ + * $Id: saa7134-tvaudio.c,v 1.28 2005/06/17 19:41:34 nsh Exp $ * * device driver for philips saa7134 based TV cards * tv audio decoder (fm stereo, nicam, ...) @@ -420,7 +420,7 @@ static void sifdebug_dump_regs(struct saa7134_dev *dev) static int tvaudio_getstereo(struct saa7134_dev *dev, struct saa7134_tvaudio *audio) { - __u32 idp,nicam; + __u32 idp, nicam, nicam_status; int retval = -1; switch (audio->mode) { @@ -442,18 +442,24 @@ static int tvaudio_getstereo(struct saa7134_dev *dev, struct saa7134_tvaudio *au break; case TVAUDIO_NICAM_FM: case TVAUDIO_NICAM_AM: - nicam = saa_readb(SAA7134_NICAM_STATUS); + nicam = saa_readb(SAA7134_AUDIO_STATUS); dprintk("getstereo: nicam=0x%x\n",nicam); - switch (nicam & 0x0b) { - case 0x08: - retval = V4L2_TUNER_SUB_MONO; - break; - case 0x09: - retval = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2; - break; - case 0x0a: - retval = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; - break; + if (nicam & 0x1) { + nicam_status = saa_readb(SAA7134_NICAM_STATUS); + dprintk("getstereo: nicam_status=0x%x\n", nicam_status); + + switch (nicam_status & 0x03) { + case 0x01: + retval = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2; + break; + case 0x02: + retval = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; + break; + default: + retval = V4L2_TUNER_SUB_MONO; + } + } else { + /* No nicam detected */ } break; } @@ -489,15 +495,15 @@ static int tvaudio_setstereo(struct saa7134_dev *dev, struct saa7134_tvaudio *au break; case TVAUDIO_FM_K_STEREO: case TVAUDIO_FM_BG_STEREO: + case TVAUDIO_NICAM_AM: + case TVAUDIO_NICAM_FM: dprintk("setstereo [fm] => %s\n", name[ mode % ARRAY_SIZE(name) ]); reg = fm[ mode % ARRAY_SIZE(fm) ]; saa_writeb(SAA7134_FM_DEMATRIX, reg); break; case TVAUDIO_FM_SAT_STEREO: - case TVAUDIO_NICAM_AM: - case TVAUDIO_NICAM_FM: - /* FIXME */ + /* Not implemented */ break; } return 0; |