diff options
| -rw-r--r-- | drivers/media/video/cx25840/cx25840-core.c | 40 | ||||
| -rw-r--r-- | drivers/media/video/cx25840/cx25840.h | 1 | ||||
| -rw-r--r-- | drivers/media/video/saa7115.c | 12 |
3 files changed, 32 insertions, 21 deletions
diff --git a/drivers/media/video/cx25840/cx25840-core.c b/drivers/media/video/cx25840/cx25840-core.c index a897d6b7d708..07607264bd41 100644 --- a/drivers/media/video/cx25840/cx25840-core.c +++ b/drivers/media/video/cx25840/cx25840-core.c | |||
| @@ -440,6 +440,9 @@ static int set_v4lctrl(struct i2c_client *client, struct v4l2_control *ctrl) | |||
| 440 | case V4L2_CID_AUDIO_BALANCE: | 440 | case V4L2_CID_AUDIO_BALANCE: |
| 441 | case V4L2_CID_AUDIO_MUTE: | 441 | case V4L2_CID_AUDIO_MUTE: |
| 442 | return cx25840_audio(client, VIDIOC_S_CTRL, ctrl); | 442 | return cx25840_audio(client, VIDIOC_S_CTRL, ctrl); |
| 443 | |||
| 444 | default: | ||
| 445 | return -EINVAL; | ||
| 443 | } | 446 | } |
| 444 | 447 | ||
| 445 | return 0; | 448 | return 0; |
| @@ -564,12 +567,8 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 564 | { | 567 | { |
| 565 | struct cx25840_state *state = i2c_get_clientdata(client); | 568 | struct cx25840_state *state = i2c_get_clientdata(client); |
| 566 | struct v4l2_tuner *vt = arg; | 569 | struct v4l2_tuner *vt = arg; |
| 567 | int result = 0; | ||
| 568 | 570 | ||
| 569 | switch (cmd) { | 571 | switch (cmd) { |
| 570 | case 0: | ||
| 571 | break; | ||
| 572 | |||
| 573 | #ifdef CONFIG_VIDEO_ADV_DEBUG | 572 | #ifdef CONFIG_VIDEO_ADV_DEBUG |
| 574 | /* ioctls to allow direct access to the | 573 | /* ioctls to allow direct access to the |
| 575 | * cx25840 registers for testing */ | 574 | * cx25840 registers for testing */ |
| @@ -600,8 +599,7 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 600 | return cx25840_vbi(client, cmd, arg); | 599 | return cx25840_vbi(client, cmd, arg); |
| 601 | 600 | ||
| 602 | case VIDIOC_INT_AUDIO_CLOCK_FREQ: | 601 | case VIDIOC_INT_AUDIO_CLOCK_FREQ: |
| 603 | result = cx25840_audio(client, cmd, arg); | 602 | return cx25840_audio(client, cmd, arg); |
| 604 | break; | ||
| 605 | 603 | ||
| 606 | case VIDIOC_STREAMON: | 604 | case VIDIOC_STREAMON: |
| 607 | cx25840_dbg("enable output\n"); | 605 | cx25840_dbg("enable output\n"); |
| @@ -620,19 +618,21 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 620 | break; | 618 | break; |
| 621 | 619 | ||
| 622 | case VIDIOC_G_CTRL: | 620 | case VIDIOC_G_CTRL: |
| 623 | result = get_v4lctrl(client, (struct v4l2_control *)arg); | 621 | return get_v4lctrl(client, (struct v4l2_control *)arg); |
| 624 | break; | ||
| 625 | 622 | ||
| 626 | case VIDIOC_S_CTRL: | 623 | case VIDIOC_S_CTRL: |
| 627 | result = set_v4lctrl(client, (struct v4l2_control *)arg); | 624 | return set_v4lctrl(client, (struct v4l2_control *)arg); |
| 628 | break; | ||
| 629 | 625 | ||
| 630 | case VIDIOC_G_STD: | 626 | case VIDIOC_G_STD: |
| 631 | *(v4l2_std_id *)arg = cx25840_get_v4lstd(client); | 627 | *(v4l2_std_id *)arg = cx25840_get_v4lstd(client); |
| 632 | break; | 628 | break; |
| 633 | 629 | ||
| 634 | case VIDIOC_S_STD: | 630 | case VIDIOC_S_STD: |
| 635 | result = set_v4lstd(client, *(v4l2_std_id *)arg); | 631 | state->radio = 0; |
| 632 | return set_v4lstd(client, *(v4l2_std_id *)arg); | ||
| 633 | |||
| 634 | case AUDC_SET_RADIO: | ||
| 635 | state->radio = 1; | ||
| 636 | break; | 636 | break; |
| 637 | 637 | ||
| 638 | case VIDIOC_G_INPUT: | 638 | case VIDIOC_G_INPUT: |
| @@ -640,15 +640,13 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 640 | break; | 640 | break; |
| 641 | 641 | ||
| 642 | case VIDIOC_S_INPUT: | 642 | case VIDIOC_S_INPUT: |
| 643 | result = set_input(client, *(enum cx25840_video_input *)arg, state->aud_input); | 643 | return set_input(client, *(enum cx25840_video_input *)arg, state->aud_input); |
| 644 | break; | ||
| 645 | 644 | ||
| 646 | case VIDIOC_S_AUDIO: | 645 | case VIDIOC_S_AUDIO: |
| 647 | { | 646 | { |
| 648 | struct v4l2_audio *input = arg; | 647 | struct v4l2_audio *input = arg; |
| 649 | 648 | ||
| 650 | result = set_input(client, state->vid_input, input->index); | 649 | return set_input(client, state->vid_input, input->index); |
| 651 | break; | ||
| 652 | } | 650 | } |
| 653 | 651 | ||
| 654 | case VIDIOC_G_AUDIO: | 652 | case VIDIOC_G_AUDIO: |
| @@ -671,6 +669,9 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 671 | u8 vpres = cx25840_read(client, 0x80a) & 0x10; | 669 | u8 vpres = cx25840_read(client, 0x80a) & 0x10; |
| 672 | int val = 0; | 670 | int val = 0; |
| 673 | 671 | ||
| 672 | if (state->radio) | ||
| 673 | break; | ||
| 674 | |||
| 674 | vt->capability |= | 675 | vt->capability |= |
| 675 | V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 | | 676 | V4L2_TUNER_CAP_STEREO | V4L2_TUNER_CAP_LANG1 | |
| 676 | V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP; | 677 | V4L2_TUNER_CAP_LANG2 | V4L2_TUNER_CAP_SAP; |
| @@ -725,12 +726,10 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 725 | break; | 726 | break; |
| 726 | 727 | ||
| 727 | case VIDIOC_G_FMT: | 728 | case VIDIOC_G_FMT: |
| 728 | result = get_v4lfmt(client, (struct v4l2_format *)arg); | 729 | return get_v4lfmt(client, (struct v4l2_format *)arg); |
| 729 | break; | ||
| 730 | 730 | ||
| 731 | case VIDIOC_S_FMT: | 731 | case VIDIOC_S_FMT: |
| 732 | result = set_v4lfmt(client, (struct v4l2_format *)arg); | 732 | return set_v4lfmt(client, (struct v4l2_format *)arg); |
| 733 | break; | ||
| 734 | 733 | ||
| 735 | case VIDIOC_INT_RESET: | 734 | case VIDIOC_INT_RESET: |
| 736 | cx25840_initialize(client, 0); | 735 | cx25840_initialize(client, 0); |
| @@ -742,11 +741,10 @@ static int cx25840_command(struct i2c_client *client, unsigned int cmd, | |||
| 742 | break; | 741 | break; |
| 743 | 742 | ||
| 744 | default: | 743 | default: |
| 745 | cx25840_err("invalid ioctl %x\n", cmd); | ||
| 746 | return -EINVAL; | 744 | return -EINVAL; |
| 747 | } | 745 | } |
| 748 | 746 | ||
| 749 | return result; | 747 | return 0; |
| 750 | } | 748 | } |
| 751 | 749 | ||
| 752 | /* ----------------------------------------------------------------------- */ | 750 | /* ----------------------------------------------------------------------- */ |
diff --git a/drivers/media/video/cx25840/cx25840.h b/drivers/media/video/cx25840/cx25840.h index 3dc67e79c856..dc58d4292a34 100644 --- a/drivers/media/video/cx25840/cx25840.h +++ b/drivers/media/video/cx25840/cx25840.h | |||
| @@ -89,6 +89,7 @@ enum cx25840_audio_input { | |||
| 89 | 89 | ||
| 90 | struct cx25840_state { | 90 | struct cx25840_state { |
| 91 | int pvr150_workaround; | 91 | int pvr150_workaround; |
| 92 | int radio; | ||
| 92 | enum cx25840_video_input vid_input; | 93 | enum cx25840_video_input vid_input; |
| 93 | enum cx25840_audio_input aud_input; | 94 | enum cx25840_audio_input aud_input; |
| 94 | u32 audclk_freq; | 95 | u32 audclk_freq; |
diff --git a/drivers/media/video/saa7115.c b/drivers/media/video/saa7115.c index 5d33d0922e79..9f550fd741d1 100644 --- a/drivers/media/video/saa7115.c +++ b/drivers/media/video/saa7115.c | |||
| @@ -74,6 +74,7 @@ struct saa7115_state { | |||
| 74 | v4l2_std_id std; | 74 | v4l2_std_id std; |
| 75 | int input; | 75 | int input; |
| 76 | int enable; | 76 | int enable; |
| 77 | int radio; | ||
| 77 | int bright; | 78 | int bright; |
| 78 | int contrast; | 79 | int contrast; |
| 79 | int hue; | 80 | int hue; |
| @@ -634,6 +635,9 @@ static int saa7115_set_v4lctrl(struct i2c_client *client, struct v4l2_control *c | |||
| 634 | state->hue = ctrl->value; | 635 | state->hue = ctrl->value; |
| 635 | saa7115_write(client, 0x0d, state->hue); | 636 | saa7115_write(client, 0x0d, state->hue); |
| 636 | break; | 637 | break; |
| 638 | |||
| 639 | default: | ||
| 640 | return -EINVAL; | ||
| 637 | } | 641 | } |
| 638 | 642 | ||
| 639 | return 0; | 643 | return 0; |
| @@ -1043,6 +1047,8 @@ static int saa7115_command(struct i2c_client *client, unsigned int cmd, void *ar | |||
| 1043 | struct v4l2_tuner *vt = arg; | 1047 | struct v4l2_tuner *vt = arg; |
| 1044 | int status; | 1048 | int status; |
| 1045 | 1049 | ||
| 1050 | if (state->radio) | ||
| 1051 | break; | ||
| 1046 | status = saa7115_read(client, 0x1f); | 1052 | status = saa7115_read(client, 0x1f); |
| 1047 | 1053 | ||
| 1048 | saa7115_dbg("status: 0x%02x\n", status); | 1054 | saa7115_dbg("status: 0x%02x\n", status); |
| @@ -1065,9 +1071,14 @@ static int saa7115_command(struct i2c_client *client, unsigned int cmd, void *ar | |||
| 1065 | break; | 1071 | break; |
| 1066 | 1072 | ||
| 1067 | case VIDIOC_S_STD: | 1073 | case VIDIOC_S_STD: |
| 1074 | state->radio = 0; | ||
| 1068 | saa7115_set_v4lstd(client, *(v4l2_std_id *)arg); | 1075 | saa7115_set_v4lstd(client, *(v4l2_std_id *)arg); |
| 1069 | break; | 1076 | break; |
| 1070 | 1077 | ||
| 1078 | case AUDC_SET_RADIO: | ||
| 1079 | state->radio = 1; | ||
| 1080 | break; | ||
| 1081 | |||
| 1071 | case VIDIOC_G_INPUT: | 1082 | case VIDIOC_G_INPUT: |
| 1072 | *(int *)arg = state->input; | 1083 | *(int *)arg = state->input; |
| 1073 | break; | 1084 | break; |
| @@ -1230,6 +1241,7 @@ static int saa7115_attach(struct i2c_adapter *adapter, int address, int kind) | |||
| 1230 | state->std = V4L2_STD_NTSC; | 1241 | state->std = V4L2_STD_NTSC; |
| 1231 | state->input = -1; | 1242 | state->input = -1; |
| 1232 | state->enable = 1; | 1243 | state->enable = 1; |
| 1244 | state->radio = 0; | ||
| 1233 | state->bright = 128; | 1245 | state->bright = 128; |
| 1234 | state->contrast = 64; | 1246 | state->contrast = 64; |
| 1235 | state->hue = 0; | 1247 | state->hue = 0; |
