aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHans Verkuil <hans.verkuil@cisco.com>2012-05-27 06:25:06 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2012-06-18 19:52:51 -0400
commit54f6019b5860ec062d1149b3a97a5a63ad3e4da9 (patch)
tree87d4ed19bd81a3357bcfab4a37148d1a82f945e5
parente4cca4edbce693238ba4d75269db082f34da48bb (diff)
[media] S_HW_FREQ_SEEK: set capability flags and return ENODATA instead of EAGAIN
Set the new capability flags in G_TUNER and return ENODATA if no channels were found. Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com> Acked-by: Hans de Goede <hdegoede@redhat.com> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/media/radio/radio-mr800.c5
-rw-r--r--drivers/media/radio/radio-wl1273.c3
-rw-r--r--drivers/media/radio/si470x/radio-si470x-common.c6
-rw-r--r--drivers/media/radio/wl128x/fmdrv_rx.c2
-rw-r--r--drivers/media/radio/wl128x/fmdrv_v4l2.c4
-rw-r--r--sound/i2c/other/tea575x-tuner.c4
6 files changed, 16 insertions, 8 deletions
diff --git a/drivers/media/radio/radio-mr800.c b/drivers/media/radio/radio-mr800.c
index 94cb6bc690f5..3182b26d6efa 100644
--- a/drivers/media/radio/radio-mr800.c
+++ b/drivers/media/radio/radio-mr800.c
@@ -295,7 +295,8 @@ static int vidioc_g_tuner(struct file *file, void *priv,
295 v->type = V4L2_TUNER_RADIO; 295 v->type = V4L2_TUNER_RADIO;
296 v->rangelow = FREQ_MIN * FREQ_MUL; 296 v->rangelow = FREQ_MIN * FREQ_MUL;
297 v->rangehigh = FREQ_MAX * FREQ_MUL; 297 v->rangehigh = FREQ_MAX * FREQ_MUL;
298 v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO; 298 v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO |
299 V4L2_TUNER_CAP_HWSEEK_WRAP;
299 v->rxsubchans = is_stereo ? V4L2_TUNER_SUB_STEREO : V4L2_TUNER_SUB_MONO; 300 v->rxsubchans = is_stereo ? V4L2_TUNER_SUB_STEREO : V4L2_TUNER_SUB_MONO;
300 v->audmode = radio->stereo ? 301 v->audmode = radio->stereo ?
301 V4L2_TUNER_MODE_STEREO : V4L2_TUNER_MODE_MONO; 302 V4L2_TUNER_MODE_STEREO : V4L2_TUNER_MODE_MONO;
@@ -372,7 +373,7 @@ static int vidioc_s_hw_freq_seek(struct file *file, void *priv,
372 timeout = jiffies + msecs_to_jiffies(30000); 373 timeout = jiffies + msecs_to_jiffies(30000);
373 for (;;) { 374 for (;;) {
374 if (time_after(jiffies, timeout)) { 375 if (time_after(jiffies, timeout)) {
375 retval = -EAGAIN; 376 retval = -ENODATA;
376 break; 377 break;
377 } 378 }
378 if (schedule_timeout_interruptible(msecs_to_jiffies(10))) { 379 if (schedule_timeout_interruptible(msecs_to_jiffies(10))) {
diff --git a/drivers/media/radio/radio-wl1273.c b/drivers/media/radio/radio-wl1273.c
index f1b607099b6c..e8428f573ccd 100644
--- a/drivers/media/radio/radio-wl1273.c
+++ b/drivers/media/radio/radio-wl1273.c
@@ -1514,7 +1514,8 @@ static int wl1273_fm_vidioc_g_tuner(struct file *file, void *priv,
1514 tuner->rangehigh = WL1273_FREQ(WL1273_BAND_OTHER_HIGH); 1514 tuner->rangehigh = WL1273_FREQ(WL1273_BAND_OTHER_HIGH);
1515 1515
1516 tuner->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_RDS | 1516 tuner->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_RDS |
1517 V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS_BLOCK_IO; 1517 V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS_BLOCK_IO |
1518 V4L2_TUNER_CAP_HWSEEK_BOUNDED | V4L2_TUNER_CAP_HWSEEK_WRAP;
1518 1519
1519 if (radio->stereo) 1520 if (radio->stereo)
1520 tuner->audmode = V4L2_TUNER_MODE_STEREO; 1521 tuner->audmode = V4L2_TUNER_MODE_STEREO;
diff --git a/drivers/media/radio/si470x/radio-si470x-common.c b/drivers/media/radio/si470x/radio-si470x-common.c
index 969cf494d85b..d485b79222fd 100644
--- a/drivers/media/radio/si470x/radio-si470x-common.c
+++ b/drivers/media/radio/si470x/radio-si470x-common.c
@@ -363,7 +363,7 @@ stop:
363 363
364 /* try again, if timed out */ 364 /* try again, if timed out */
365 if (retval == 0 && timed_out) 365 if (retval == 0 && timed_out)
366 return -EAGAIN; 366 return -ENODATA;
367 return retval; 367 return retval;
368} 368}
369 369
@@ -596,7 +596,9 @@ static int si470x_vidioc_g_tuner(struct file *file, void *priv,
596 strcpy(tuner->name, "FM"); 596 strcpy(tuner->name, "FM");
597 tuner->type = V4L2_TUNER_RADIO; 597 tuner->type = V4L2_TUNER_RADIO;
598 tuner->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO | 598 tuner->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO |
599 V4L2_TUNER_CAP_RDS | V4L2_TUNER_CAP_RDS_BLOCK_IO; 599 V4L2_TUNER_CAP_RDS | V4L2_TUNER_CAP_RDS_BLOCK_IO |
600 V4L2_TUNER_CAP_HWSEEK_BOUNDED |
601 V4L2_TUNER_CAP_HWSEEK_WRAP;
600 602
601 /* range limits */ 603 /* range limits */
602 switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) { 604 switch ((radio->registers[SYSCONFIG2] & SYSCONFIG2_BAND) >> 6) {
diff --git a/drivers/media/radio/wl128x/fmdrv_rx.c b/drivers/media/radio/wl128x/fmdrv_rx.c
index 43fb72291bea..3dd9fc097c47 100644
--- a/drivers/media/radio/wl128x/fmdrv_rx.c
+++ b/drivers/media/radio/wl128x/fmdrv_rx.c
@@ -251,7 +251,7 @@ again:
251 if (!timeleft) { 251 if (!timeleft) {
252 fmerr("Timeout(%d sec),didn't get tune ended int\n", 252 fmerr("Timeout(%d sec),didn't get tune ended int\n",
253 jiffies_to_msecs(FM_DRV_RX_SEEK_TIMEOUT) / 1000); 253 jiffies_to_msecs(FM_DRV_RX_SEEK_TIMEOUT) / 1000);
254 return -ETIMEDOUT; 254 return -ENODATA;
255 } 255 }
256 256
257 int_reason = fmdev->irq_info.flag & (FM_TUNE_COMPLETE | FM_BAND_LIMIT); 257 int_reason = fmdev->irq_info.flag & (FM_TUNE_COMPLETE | FM_BAND_LIMIT);
diff --git a/drivers/media/radio/wl128x/fmdrv_v4l2.c b/drivers/media/radio/wl128x/fmdrv_v4l2.c
index 080b96a61f1a..49a11ec1f449 100644
--- a/drivers/media/radio/wl128x/fmdrv_v4l2.c
+++ b/drivers/media/radio/wl128x/fmdrv_v4l2.c
@@ -285,7 +285,9 @@ static int fm_v4l2_vidioc_g_tuner(struct file *file, void *priv,
285 tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO | 285 tuner->rxsubchans = V4L2_TUNER_SUB_MONO | V4L2_TUNER_SUB_STEREO |
286 ((fmdev->rx.rds.flag == FM_RDS_ENABLE) ? V4L2_TUNER_SUB_RDS : 0); 286 ((fmdev->rx.rds.flag == FM_RDS_ENABLE) ? V4L2_TUNER_SUB_RDS : 0);
287 tuner->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS | 287 tuner->capability = V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_RDS |
288 V4L2_TUNER_CAP_LOW; 288 V4L2_TUNER_CAP_LOW |
289 V4L2_TUNER_CAP_HWSEEK_BOUNDED |
290 V4L2_TUNER_CAP_HWSEEK_WRAP;
289 tuner->audmode = (stereo_mono_mode ? 291 tuner->audmode = (stereo_mono_mode ?
290 V4L2_TUNER_MODE_MONO : V4L2_TUNER_MODE_STEREO); 292 V4L2_TUNER_MODE_MONO : V4L2_TUNER_MODE_STEREO);
291 293
diff --git a/sound/i2c/other/tea575x-tuner.c b/sound/i2c/other/tea575x-tuner.c
index 582aace20ea3..ba2bc511d777 100644
--- a/sound/i2c/other/tea575x-tuner.c
+++ b/sound/i2c/other/tea575x-tuner.c
@@ -191,6 +191,8 @@ static int vidioc_g_tuner(struct file *file, void *priv,
191 strcpy(v->name, "FM"); 191 strcpy(v->name, "FM");
192 v->type = V4L2_TUNER_RADIO; 192 v->type = V4L2_TUNER_RADIO;
193 v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO; 193 v->capability = V4L2_TUNER_CAP_LOW | V4L2_TUNER_CAP_STEREO;
194 if (!tea->cannot_read_data)
195 v->capability |= V4L2_TUNER_CAP_HWSEEK_BOUNDED;
194 v->rangelow = FREQ_LO; 196 v->rangelow = FREQ_LO;
195 v->rangehigh = FREQ_HI; 197 v->rangehigh = FREQ_HI;
196 v->rxsubchans = tea->stereo ? V4L2_TUNER_SUB_STEREO : V4L2_TUNER_SUB_MONO; 198 v->rxsubchans = tea->stereo ? V4L2_TUNER_SUB_STEREO : V4L2_TUNER_SUB_MONO;
@@ -299,7 +301,7 @@ static int vidioc_s_hw_freq_seek(struct file *file, void *fh,
299 } 301 }
300 tea->val &= ~TEA575X_BIT_SEARCH; 302 tea->val &= ~TEA575X_BIT_SEARCH;
301 snd_tea575x_set_freq(tea); 303 snd_tea575x_set_freq(tea);
302 return -EAGAIN; 304 return -ENODATA;
303} 305}
304 306
305static int tea575x_s_ctrl(struct v4l2_ctrl *ctrl) 307static int tea575x_s_ctrl(struct v4l2_ctrl *ctrl)