diff options
| -rw-r--r-- | drivers/media/video/cx23885/cx23885-video.c | 40 |
1 files changed, 25 insertions, 15 deletions
diff --git a/drivers/media/video/cx23885/cx23885-video.c b/drivers/media/video/cx23885/cx23885-video.c index 9726f2a0ef6c..396fa4e23acb 100644 --- a/drivers/media/video/cx23885/cx23885-video.c +++ b/drivers/media/video/cx23885/cx23885-video.c | |||
| @@ -521,13 +521,22 @@ static int cx23885_audio_mux(struct cx23885_dev *dev, unsigned int input) | |||
| 521 | { | 521 | { |
| 522 | dprintk(1, "%s(input=%d)\n", __func__, input); | 522 | dprintk(1, "%s(input=%d)\n", __func__, input); |
| 523 | 523 | ||
| 524 | if ((dev->board == CX23885_BOARD_HAUPPAUGE_HVR1800) || | 524 | /* The baseband video core of the cx23885 has two audio inputs. |
| 525 | (dev->board == CX23885_BOARD_MPX885)) { | 525 | * LR1 and LR2. In almost every single case so far only HVR1xxx |
| 526 | 526 | * cards we've only ever supported LR1. Time to support LR2, | |
| 527 | if (INPUT(input)->amux == CX25840_AUDIO7) | 527 | * which is available via the optional white breakout header on |
| 528 | cx23885_flatiron_mux(dev, 1); | 528 | * the board. |
| 529 | else if (INPUT(input)->amux == CX25840_AUDIO6) | 529 | * We'll use a could of existing enums in the card struct to allow |
| 530 | cx23885_flatiron_mux(dev, 2); | 530 | * devs to specify which baseband input they need, or just default |
| 531 | * to what we've always used. | ||
| 532 | */ | ||
| 533 | if (INPUT(input)->amux == CX25840_AUDIO7) | ||
| 534 | cx23885_flatiron_mux(dev, 1); | ||
| 535 | else if (INPUT(input)->amux == CX25840_AUDIO6) | ||
| 536 | cx23885_flatiron_mux(dev, 2); | ||
| 537 | else { | ||
| 538 | /* Not specifically defined, assume the default. */ | ||
| 539 | cx23885_flatiron_mux(dev, 1); | ||
| 531 | } | 540 | } |
| 532 | 541 | ||
| 533 | return 0; | 542 | return 0; |
| @@ -1305,6 +1314,10 @@ static int vidioc_s_input(struct file *file, void *priv, unsigned int i) | |||
| 1305 | 1314 | ||
| 1306 | mutex_lock(&dev->lock); | 1315 | mutex_lock(&dev->lock); |
| 1307 | cx23885_video_mux(dev, i); | 1316 | cx23885_video_mux(dev, i); |
| 1317 | |||
| 1318 | /* By default establish the default audio input for the card also */ | ||
| 1319 | /* Caller is free to use VIDIOC_S_AUDIO to override afterwards */ | ||
| 1320 | cx23885_audio_mux(dev, i); | ||
| 1308 | mutex_unlock(&dev->lock); | 1321 | mutex_unlock(&dev->lock); |
| 1309 | return 0; | 1322 | return 0; |
| 1310 | } | 1323 | } |
| @@ -1369,20 +1382,16 @@ static int vidioc_s_audinput(struct file *file, void *priv, | |||
| 1369 | struct v4l2_audio *i) | 1382 | struct v4l2_audio *i) |
| 1370 | { | 1383 | { |
| 1371 | struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev; | 1384 | struct cx23885_dev *dev = ((struct cx23885_fh *)priv)->dev; |
| 1372 | |||
| 1373 | /* cx23885 offers 2 different audio inputs on the A/V core, LR1 and LR2. | ||
| 1374 | * By default the driver has always used LR1 and we need support for | ||
| 1375 | * switching. This isn't board specific, is part of the base silicon. | ||
| 1376 | */ | ||
| 1377 | if (i->index >= 2) | 1385 | if (i->index >= 2) |
| 1378 | return -EINVAL; | 1386 | return -EINVAL; |
| 1379 | 1387 | ||
| 1380 | dprintk(1, "%s(%d)\n", __func__, i->index); | 1388 | dprintk(1, "%s(%d)\n", __func__, i->index); |
| 1381 | 1389 | ||
| 1382 | mutex_lock(&dev->lock); | ||
| 1383 | dev->audinput = i->index; | 1390 | dev->audinput = i->index; |
| 1384 | cx23885_audio_mux(dev, dev->audinput); | 1391 | |
| 1385 | mutex_unlock(&dev->lock); | 1392 | /* Skip the audio defaults from the cards struct, caller wants |
| 1393 | * directly touch the audio mux hardware. */ | ||
| 1394 | cx23885_flatiron_mux(dev, dev->audinput + 1); | ||
| 1386 | return 0; | 1395 | return 0; |
| 1387 | } | 1396 | } |
| 1388 | 1397 | ||
| @@ -1780,6 +1789,7 @@ int cx23885_video_register(struct cx23885_dev *dev) | |||
| 1780 | cx23885_set_tvnorm(dev, dev->tvnorm); | 1789 | cx23885_set_tvnorm(dev, dev->tvnorm); |
| 1781 | init_controls(dev); | 1790 | init_controls(dev); |
| 1782 | cx23885_video_mux(dev, 0); | 1791 | cx23885_video_mux(dev, 0); |
| 1792 | cx23885_audio_mux(dev, 0); | ||
| 1783 | mutex_unlock(&dev->lock); | 1793 | mutex_unlock(&dev->lock); |
| 1784 | 1794 | ||
| 1785 | return 0; | 1795 | return 0; |
