diff options
Diffstat (limited to 'drivers/media/video/msp3400-driver.c')
-rw-r--r-- | drivers/media/video/msp3400-driver.c | 104 |
1 files changed, 5 insertions, 99 deletions
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c index 11ea9765769c..bd0b036c5cab 100644 --- a/drivers/media/video/msp3400-driver.c +++ b/drivers/media/video/msp3400-driver.c | |||
@@ -53,7 +53,7 @@ | |||
53 | #include <linux/videodev.h> | 53 | #include <linux/videodev.h> |
54 | #include <linux/videodev2.h> | 54 | #include <linux/videodev2.h> |
55 | #include <media/v4l2-common.h> | 55 | #include <media/v4l2-common.h> |
56 | #include <media/audiochip.h> | 56 | #include <media/tvaudio.h> |
57 | #include <linux/kthread.h> | 57 | #include <linux/kthread.h> |
58 | #include <linux/suspend.h> | 58 | #include <linux/suspend.h> |
59 | #include "msp3400.h" | 59 | #include "msp3400.h" |
@@ -585,51 +585,12 @@ static int msp_set_ctrl(struct i2c_client *client, struct v4l2_control *ctrl) | |||
585 | static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg) | 585 | static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg) |
586 | { | 586 | { |
587 | struct msp_state *state = i2c_get_clientdata(client); | 587 | struct msp_state *state = i2c_get_clientdata(client); |
588 | u16 *sarg = arg; | ||
589 | int scart = 0; | 588 | int scart = 0; |
590 | 589 | ||
591 | if (msp_debug >= 2) | 590 | if (msp_debug >= 2) |
592 | v4l_i2c_print_ioctl(client, cmd); | 591 | v4l_i2c_print_ioctl(client, cmd); |
593 | 592 | ||
594 | switch (cmd) { | 593 | switch (cmd) { |
595 | case AUDC_SET_INPUT: | ||
596 | if (*sarg == state->input) | ||
597 | break; | ||
598 | state->input = *sarg; | ||
599 | switch (*sarg) { | ||
600 | case AUDIO_RADIO: | ||
601 | /* Hauppauge uses IN2 for the radio */ | ||
602 | state->mode = MSP_MODE_FM_RADIO; | ||
603 | scart = SCART_IN2; | ||
604 | break; | ||
605 | case AUDIO_EXTERN_1: | ||
606 | /* IN1 is often used for external input ... */ | ||
607 | state->mode = MSP_MODE_EXTERN; | ||
608 | scart = SCART_IN1; | ||
609 | break; | ||
610 | case AUDIO_EXTERN_2: | ||
611 | /* ... sometimes it is IN2 through ;) */ | ||
612 | state->mode = MSP_MODE_EXTERN; | ||
613 | scart = SCART_IN2; | ||
614 | break; | ||
615 | case AUDIO_TUNER: | ||
616 | state->mode = -1; | ||
617 | break; | ||
618 | default: | ||
619 | if (*sarg & AUDIO_MUTE) | ||
620 | msp_set_scart(client, SCART_MUTE, 0); | ||
621 | break; | ||
622 | } | ||
623 | if (scart) { | ||
624 | state->rxsubchans = V4L2_TUNER_SUB_STEREO; | ||
625 | msp_set_scart(client, scart, 0); | ||
626 | msp_write_dsp(client, 0x000d, 0x1900); | ||
627 | if (state->opmode != OPMODE_AUTOSELECT) | ||
628 | msp_set_audmode(client); | ||
629 | } | ||
630 | msp_wake_thread(client); | ||
631 | break; | ||
632 | |||
633 | case AUDC_SET_RADIO: | 594 | case AUDC_SET_RADIO: |
634 | if (state->radio) | 595 | if (state->radio) |
635 | return 0; | 596 | return 0; |
@@ -750,82 +711,27 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg) | |||
750 | return 0; | 711 | return 0; |
751 | } | 712 | } |
752 | 713 | ||
753 | case VIDIOC_ENUMINPUT: | ||
754 | { | ||
755 | struct v4l2_input *i = arg; | ||
756 | |||
757 | if (i->index != 0) | ||
758 | return -EINVAL; | ||
759 | |||
760 | i->type = V4L2_INPUT_TYPE_TUNER; | ||
761 | switch (i->index) { | ||
762 | case AUDIO_RADIO: | ||
763 | strcpy(i->name, "Radio"); | ||
764 | break; | ||
765 | case AUDIO_EXTERN_1: | ||
766 | strcpy(i->name, "Extern 1"); | ||
767 | break; | ||
768 | case AUDIO_EXTERN_2: | ||
769 | strcpy(i->name, "Extern 2"); | ||
770 | break; | ||
771 | case AUDIO_TUNER: | ||
772 | strcpy(i->name, "Television"); | ||
773 | break; | ||
774 | default: | ||
775 | return -EINVAL; | ||
776 | } | ||
777 | return 0; | ||
778 | } | ||
779 | |||
780 | case VIDIOC_G_AUDIO: | ||
781 | { | ||
782 | struct v4l2_audio *a = arg; | ||
783 | |||
784 | memset(a, 0, sizeof(*a)); | ||
785 | |||
786 | switch (a->index) { | ||
787 | case AUDIO_RADIO: | ||
788 | strcpy(a->name, "Radio"); | ||
789 | break; | ||
790 | case AUDIO_EXTERN_1: | ||
791 | strcpy(a->name, "Extern 1"); | ||
792 | break; | ||
793 | case AUDIO_EXTERN_2: | ||
794 | strcpy(a->name, "Extern 2"); | ||
795 | break; | ||
796 | case AUDIO_TUNER: | ||
797 | strcpy(a->name, "Television"); | ||
798 | break; | ||
799 | default: | ||
800 | return -EINVAL; | ||
801 | } | ||
802 | |||
803 | a->capability = V4L2_AUDCAP_STEREO; | ||
804 | a->mode = 0; /* TODO: add support for AVL */ | ||
805 | break; | ||
806 | } | ||
807 | |||
808 | case VIDIOC_S_AUDIO: | 714 | case VIDIOC_S_AUDIO: |
809 | { | 715 | { |
810 | struct v4l2_audio *sarg = arg; | 716 | struct v4l2_audio *sarg = arg; |
811 | 717 | ||
812 | switch (sarg->index) { | 718 | switch (sarg->index) { |
813 | case AUDIO_RADIO: | 719 | case TVAUDIO_INPUT_RADIO: |
814 | /* Hauppauge uses IN2 for the radio */ | 720 | /* Hauppauge uses IN2 for the radio */ |
815 | state->mode = MSP_MODE_FM_RADIO; | 721 | state->mode = MSP_MODE_FM_RADIO; |
816 | scart = SCART_IN2; | 722 | scart = SCART_IN2; |
817 | break; | 723 | break; |
818 | case AUDIO_EXTERN_1: | 724 | case TVAUDIO_INPUT_EXTERN: |
819 | /* IN1 is often used for external input ... */ | 725 | /* IN1 is often used for external input ... */ |
820 | state->mode = MSP_MODE_EXTERN; | 726 | state->mode = MSP_MODE_EXTERN; |
821 | scart = SCART_IN1; | 727 | scart = SCART_IN1; |
822 | break; | 728 | break; |
823 | case AUDIO_EXTERN_2: | 729 | case TVAUDIO_INPUT_INTERN: |
824 | /* ... sometimes it is IN2 through ;) */ | 730 | /* ... sometimes it is IN2 through ;) */ |
825 | state->mode = MSP_MODE_EXTERN; | 731 | state->mode = MSP_MODE_EXTERN; |
826 | scart = SCART_IN2; | 732 | scart = SCART_IN2; |
827 | break; | 733 | break; |
828 | case AUDIO_TUNER: | 734 | case TVAUDIO_INPUT_TUNER: |
829 | state->mode = -1; | 735 | state->mode = -1; |
830 | break; | 736 | break; |
831 | } | 737 | } |