OSDN Git Service

[media] radio-miropcm20: fix signal and stereo indication
authorHans Verkuil <hans.verkuil@cisco.com>
Mon, 28 May 2012 14:10:01 +0000 (11:10 -0300)
committerMauro Carvalho Chehab <mchehab@redhat.com>
Tue, 5 Feb 2013 20:17:03 +0000 (18:17 -0200)
Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
drivers/media/radio/radio-miropcm20.c

index eb6cd86..3d0ff44 100644 (file)
@@ -82,6 +82,7 @@ static int vidioc_g_tuner(struct file *file, void *priv,
                                struct v4l2_tuner *v)
 {
        struct pcm20 *dev = video_drvdata(file);
+       int res;
 
        if (v->index)
                return -EINVAL;
@@ -89,8 +90,13 @@ static int vidioc_g_tuner(struct file *file, void *priv,
        v->type = V4L2_TUNER_RADIO;
        v->rangelow = 87*16000;
        v->rangehigh = 108*16000;
-       v->signal = 0xffff;
-       v->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO;
+       res = snd_aci_cmd(dev->aci, ACI_READ_TUNERSTATION, -1, -1);
+       v->signal = (res & 0x80) ? 0 : 0xffff;
+       /* Note: stereo detection does not work if the audio is muted,
+          it will default to mono in that case. */
+       res = snd_aci_cmd(dev->aci, ACI_READ_TUNERSTEREO, -1, -1);
+       v->rxsubchans = (res & 0x40) ? V4L2_TUNER_SUB_MONO :
+                                       V4L2_TUNER_SUB_STEREO;
        v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
        v->audmode = dev->audmode;
        return 0;