diff options
author | Tobias Lorenz <tobias.lorenz@gmx.net> | 2008-09-25 00:30:26 +0200 |
---|---|---|
committer | Tobias Lorenz <tobias.lorenz@gmx.net> | 2008-09-25 00:30:26 +0200 |
commit | 77fc68c15b2f59a0efb33face338913becc45c83 (patch) | |
tree | 15ca2638f329b94430b3a91431b6763e96b8f839 | |
parent | 36da8acefeb3759404af13ff28c4bbddfcebb717 (diff) | |
download | mediapointer-dvb-s2-77fc68c15b2f59a0efb33face338913becc45c83.tar.gz mediapointer-dvb-s2-77fc68c15b2f59a0efb33face338913becc45c83.tar.bz2 |
si470x: tuner->type handling
From: Tobias Lorenz <tobias.lorenz@gmx.net>
Hi Mauro,
the V4L2 specification says, when to check and when to return tuner->type as constant value.
This patch corrects exactly this behavior, so that it is now conform to the V4L2 specification.
Bye,
Toby
Signed-off-by: Tobias Lorenz <tobias.lorenz@gmx.net>
-rw-r--r-- | linux/drivers/media/radio/radio-si470x.c | 21 |
1 files changed, 12 insertions, 9 deletions
diff --git a/linux/drivers/media/radio/radio-si470x.c b/linux/drivers/media/radio/radio-si470x.c index 3e0261dad..ab9543f6b 100644 --- a/linux/drivers/media/radio/radio-si470x.c +++ b/linux/drivers/media/radio/radio-si470x.c @@ -104,6 +104,7 @@ * - hardware frequency seek support * - afc indication * - more safety checks, let si470x_get_freq return errno + * - vidioc behavior corrected according to v4l2 spec * * ToDo: * - add firmware download/update support @@ -1423,7 +1424,7 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, retval = -EIO; goto done; } - if ((tuner->index != 0) && (tuner->type != V4L2_TUNER_RADIO)) { + if (tuner->index != 0) { retval = -EINVAL; goto done; } @@ -1432,7 +1433,11 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, if (retval < 0) goto done; + /* driver constants */ strcpy(tuner->name, "FM"); + tuner->type = V4L2_TUNER_RADIO; + tuner->capability = V4L2_TUNER_CAP_LOW; + /* range limits */ switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) { /* 0: 87.5 - 108 MHz (USA, Europe, default) */ @@ -1452,7 +1457,6 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv, break; }; tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO; - tuner->capability = V4L2_TUNER_CAP_LOW; /* Stereo indicator == Stereo (instead of Mono) */ if ((radio->registers[STATUSRSSI] & STATUSRSSI_ST) == 1) @@ -1483,17 +1487,15 @@ static int si470x_vidioc_s_tuner(struct file *file, void *priv, struct v4l2_tuner *tuner) { struct si470x_device *radio = video_drvdata(file); - int retval = 0; + int retval = -EINVAL; /* safety checks */ if (radio->disconnected) { retval = -EIO; goto done; } - if ((tuner->index != 0) && (tuner->type != V4L2_TUNER_RADIO)) { - retval = -EINVAL; + if (tuner->index != 0) goto done; - } if (tuner->audmode == V4L2_TUNER_MODE_MONO) radio->registers[POWERCFG] |= POWERCFG_MONO; /* force mono */ @@ -1524,11 +1526,12 @@ static int si470x_vidioc_g_frequency(struct file *file, void *priv, retval = -EIO; goto done; } - if ((freq->tuner != 0) && (freq->type != V4L2_TUNER_RADIO)) { + if (freq->tuner != 0) { retval = -EINVAL; goto done; } + freq->type = V4L2_TUNER_RADIO; retval = si470x_get_freq(radio, &freq->frequency); done: @@ -1553,7 +1556,7 @@ static int si470x_vidioc_s_frequency(struct file *file, void *priv, retval = -EIO; goto done; } - if ((freq->tuner != 0) && (freq->type != V4L2_TUNER_RADIO)) { + if (freq->tuner != 0) { retval = -EINVAL; goto done; } @@ -1582,7 +1585,7 @@ static int si470x_vidioc_s_hw_freq_seek(struct file *file, void *priv, retval = -EIO; goto done; } - if ((seek->tuner != 0) && (seek->type != V4L2_TUNER_RADIO)) { + if (seek->tuner != 0) { retval = -EINVAL; goto done; } |