aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video/cx18/cx18-av-audio.c
diff options
context:
space:
mode:
authorHans Verkuil <hverkuil@xs4all.nl>2009-03-30 05:43:13 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2009-03-30 11:43:49 -0400
commit41c129a87014bb83efb3e0224bb44cfc54659f8f (patch)
tree8a0b6f5db17d95db0f586343e761abff23a7d272 /drivers/media/video/cx18/cx18-av-audio.c
parentdf1d5ed8a81565b78d45fbdffb6561c75c75ec0d (diff)
V4L/DVB (11310): cx18: remove intermediate 'ioctl' step
The audio and vbi parts still used an 'ioctl'-like interface. Replace this with normal functions. Cc: Andy Walls <awalls@radix.net> Signed-off-by: Hans Verkuil <hverkuil@xs4all.nl> Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
Diffstat (limited to 'drivers/media/video/cx18/cx18-av-audio.c')
-rw-r--r--drivers/media/video/cx18/cx18-av-audio.c120
1 files changed, 57 insertions, 63 deletions
diff --git a/drivers/media/video/cx18/cx18-av-audio.c b/drivers/media/video/cx18/cx18-av-audio.c
index a2f0ad570434..9e30983f2ff6 100644
--- a/drivers/media/video/cx18/cx18-av-audio.c
+++ b/drivers/media/video/cx18/cx18-av-audio.c
@@ -464,82 +464,76 @@ static void set_mute(struct cx18 *cx, int mute)
464 } 464 }
465} 465}
466 466
467int cx18_av_audio(struct cx18 *cx, unsigned int cmd, void *arg) 467int cx18_av_s_clock_freq(struct v4l2_subdev *sd, u32 freq)
468{ 468{
469 struct cx18 *cx = v4l2_get_subdevdata(sd);
469 struct cx18_av_state *state = &cx->av_state; 470 struct cx18_av_state *state = &cx->av_state;
470 struct v4l2_control *ctrl = arg;
471 int retval; 471 int retval;
472 u8 v;
472 473
473 switch (cmd) { 474 if (state->aud_input > CX18_AV_AUDIO_SERIAL2) {
474 case VIDIOC_INT_AUDIO_CLOCK_FREQ: 475 v = cx18_av_read(cx, 0x803) & ~0x10;
475 { 476 cx18_av_write_expect(cx, 0x803, v, v, 0x1f);
476 u8 v; 477 cx18_av_write(cx, 0x8d3, 0x1f);
477 if (state->aud_input > CX18_AV_AUDIO_SERIAL2) { 478 }
478 v = cx18_av_read(cx, 0x803) & ~0x10; 479 v = cx18_av_read(cx, 0x810) | 0x1;
479 cx18_av_write_expect(cx, 0x803, v, v, 0x1f); 480 cx18_av_write_expect(cx, 0x810, v, v, 0x0f);
480 cx18_av_write(cx, 0x8d3, 0x1f);
481 }
482 v = cx18_av_read(cx, 0x810) | 0x1;
483 cx18_av_write_expect(cx, 0x810, v, v, 0x0f);
484 481
485 retval = set_audclk_freq(cx, *(u32 *)arg); 482 retval = set_audclk_freq(cx, freq);
486 483
487 v = cx18_av_read(cx, 0x810) & ~0x1; 484 v = cx18_av_read(cx, 0x810) & ~0x1;
488 cx18_av_write_expect(cx, 0x810, v, v, 0x0f); 485 cx18_av_write_expect(cx, 0x810, v, v, 0x0f);
489 if (state->aud_input > CX18_AV_AUDIO_SERIAL2) { 486 if (state->aud_input > CX18_AV_AUDIO_SERIAL2) {
490 v = cx18_av_read(cx, 0x803) | 0x10; 487 v = cx18_av_read(cx, 0x803) | 0x10;
491 cx18_av_write_expect(cx, 0x803, v, v, 0x1f); 488 cx18_av_write_expect(cx, 0x803, v, v, 0x1f);
492 }
493 return retval;
494 } 489 }
490 return retval;
491}
495 492
496 case VIDIOC_G_CTRL: 493int cx18_av_audio_g_ctrl(struct cx18 *cx, struct v4l2_control *ctrl)
497 switch (ctrl->id) { 494{
498 case V4L2_CID_AUDIO_VOLUME: 495 switch (ctrl->id) {
499 ctrl->value = get_volume(cx); 496 case V4L2_CID_AUDIO_VOLUME:
500 break; 497 ctrl->value = get_volume(cx);
501 case V4L2_CID_AUDIO_BASS:
502 ctrl->value = get_bass(cx);
503 break;
504 case V4L2_CID_AUDIO_TREBLE:
505 ctrl->value = get_treble(cx);
506 break;
507 case V4L2_CID_AUDIO_BALANCE:
508 ctrl->value = get_balance(cx);
509 break;
510 case V4L2_CID_AUDIO_MUTE:
511 ctrl->value = get_mute(cx);
512 break;
513 default:
514 return -EINVAL;
515 }
516 break; 498 break;
517 499 case V4L2_CID_AUDIO_BASS:
518 case VIDIOC_S_CTRL: 500 ctrl->value = get_bass(cx);
519 switch (ctrl->id) { 501 break;
520 case V4L2_CID_AUDIO_VOLUME: 502 case V4L2_CID_AUDIO_TREBLE:
521 set_volume(cx, ctrl->value); 503 ctrl->value = get_treble(cx);
522 break; 504 break;
523 case V4L2_CID_AUDIO_BASS: 505 case V4L2_CID_AUDIO_BALANCE:
524 set_bass(cx, ctrl->value); 506 ctrl->value = get_balance(cx);
525 break; 507 break;
526 case V4L2_CID_AUDIO_TREBLE: 508 case V4L2_CID_AUDIO_MUTE:
527 set_treble(cx, ctrl->value); 509 ctrl->value = get_mute(cx);
528 break;
529 case V4L2_CID_AUDIO_BALANCE:
530 set_balance(cx, ctrl->value);
531 break;
532 case V4L2_CID_AUDIO_MUTE:
533 set_mute(cx, ctrl->value);
534 break;
535 default:
536 return -EINVAL;
537 }
538 break; 510 break;
539
540 default: 511 default:
541 return -EINVAL; 512 return -EINVAL;
542 } 513 }
514 return 0;
515}
543 516
517int cx18_av_audio_s_ctrl(struct cx18 *cx, struct v4l2_control *ctrl)
518{
519 switch (ctrl->id) {
520 case V4L2_CID_AUDIO_VOLUME:
521 set_volume(cx, ctrl->value);
522 break;
523 case V4L2_CID_AUDIO_BASS:
524 set_bass(cx, ctrl->value);
525 break;
526 case V4L2_CID_AUDIO_TREBLE:
527 set_treble(cx, ctrl->value);
528 break;
529 case V4L2_CID_AUDIO_BALANCE:
530 set_balance(cx, ctrl->value);
531 break;
532 case V4L2_CID_AUDIO_MUTE:
533 set_mute(cx, ctrl->value);
534 break;
535 default:
536 return -EINVAL;
537 }
544 return 0; 538 return 0;
545} 539}