aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/media/video
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/media/video')
-rw-r--r--drivers/media/video/msp3400-driver.c167
-rw-r--r--drivers/media/video/msp3400-kthreads.c166
2 files changed, 195 insertions, 138 deletions
diff --git a/drivers/media/video/msp3400-driver.c b/drivers/media/video/msp3400-driver.c
index f4c14604b0b9..7a11f3159e32 100644
--- a/drivers/media/video/msp3400-driver.c
+++ b/drivers/media/video/msp3400-driver.c
@@ -42,7 +42,8 @@
42 * 42 *
43 * You should have received a copy of the GNU General Public License 43 * You should have received a copy of the GNU General Public License
44 * along with this program; if not, write to the Free Software 44 * along with this program; if not, write to the Free Software
45 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 45 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
46 * 02110-1301, USA.
46 */ 47 */
47 48
48 49
@@ -72,7 +73,8 @@ int msp_debug; /* msp_debug output */
72int msp_once; /* no continous stereo monitoring */ 73int msp_once; /* no continous stereo monitoring */
73int msp_amsound; /* hard-wire AM sound at 6.5 Hz (france), 74int msp_amsound; /* hard-wire AM sound at 6.5 Hz (france),
74 the autoscan seems work well only with FM... */ 75 the autoscan seems work well only with FM... */
75int msp_standard = 1; /* Override auto detect of audio msp_standard, if needed. */ 76int msp_standard = 1; /* Override auto detect of audio msp_standard,
77 if needed. */
76int msp_dolby; 78int msp_dolby;
77 79
78int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual 80int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual
@@ -82,12 +84,12 @@ int msp_stereo_thresh = 0x190; /* a2 threshold for stereo/bilingual
82module_param(opmode, int, 0444); 84module_param(opmode, int, 0444);
83 85
84/* read-write */ 86/* read-write */
85module_param_named(once,msp_once, bool, 0644); 87module_param_named(once, msp_once, bool, 0644);
86module_param_named(debug,msp_debug, int, 0644); 88module_param_named(debug, msp_debug, int, 0644);
87module_param_named(stereo_threshold,msp_stereo_thresh, int, 0644); 89module_param_named(stereo_threshold, msp_stereo_thresh, int, 0644);
88module_param_named(standard,msp_standard, int, 0644); 90module_param_named(standard, msp_standard, int, 0644);
89module_param_named(amsound,msp_amsound, bool, 0644); 91module_param_named(amsound, msp_amsound, bool, 0644);
90module_param_named(dolby,msp_dolby, bool, 0644); 92module_param_named(dolby, msp_dolby, bool, 0644);
91 93
92MODULE_PARM_DESC(opmode, "Forces a MSP3400 opmode. 0=Manual, 1=Autodetect, 2=Autodetect and autoselect"); 94MODULE_PARM_DESC(opmode, "Forces a MSP3400 opmode. 0=Manual, 1=Autodetect, 2=Autodetect and autoselect");
93MODULE_PARM_DESC(once, "No continuous stereo monitoring"); 95MODULE_PARM_DESC(once, "No continuous stereo monitoring");
@@ -161,12 +163,13 @@ static int msp_read(struct i2c_client *client, int dev, int addr)
161 schedule_timeout_interruptible(msecs_to_jiffies(10)); 163 schedule_timeout_interruptible(msecs_to_jiffies(10));
162 } 164 }
163 if (err == 3) { 165 if (err == 3) {
164 v4l_warn(client, "giving up, resetting chip. Sound will go off, sorry folks :-|\n"); 166 v4l_warn(client, "resetting chip, sound will go off.\n");
165 msp_reset(client); 167 msp_reset(client);
166 return -1; 168 return -1;
167 } 169 }
168 retval = read[0] << 8 | read[1]; 170 retval = read[0] << 8 | read[1];
169 v4l_dbg(3, msp_debug, client, "msp_read(0x%x, 0x%x): 0x%x\n", dev, addr, retval); 171 v4l_dbg(3, msp_debug, client, "msp_read(0x%x, 0x%x): 0x%x\n",
172 dev, addr, retval);
170 return retval; 173 return retval;
171} 174}
172 175
@@ -191,7 +194,8 @@ static int msp_write(struct i2c_client *client, int dev, int addr, int val)
191 buffer[3] = val >> 8; 194 buffer[3] = val >> 8;
192 buffer[4] = val & 0xff; 195 buffer[4] = val & 0xff;
193 196
194 v4l_dbg(3, msp_debug, client, "msp_write(0x%x, 0x%x, 0x%x)\n", dev, addr, val); 197 v4l_dbg(3, msp_debug, client, "msp_write(0x%x, 0x%x, 0x%x)\n",
198 dev, addr, val);
195 for (err = 0; err < 3; err++) { 199 for (err = 0; err < 3; err++) {
196 if (i2c_master_send(client, buffer, 5) == 5) 200 if (i2c_master_send(client, buffer, 5) == 5)
197 break; 201 break;
@@ -200,7 +204,7 @@ static int msp_write(struct i2c_client *client, int dev, int addr, int val)
200 schedule_timeout_interruptible(msecs_to_jiffies(10)); 204 schedule_timeout_interruptible(msecs_to_jiffies(10));
201 } 205 }
202 if (err == 3) { 206 if (err == 3) {
203 v4l_warn(client, "giving up, resetting chip. Sound will go off, sorry folks :-|\n"); 207 v4l_warn(client, "resetting chip, sound will go off.\n");
204 msp_reset(client); 208 msp_reset(client);
205 return -1; 209 return -1;
206 } 210 }
@@ -274,7 +278,7 @@ void msp_set_scart(struct i2c_client *client, int in, int out)
274 state->acb = 0xf60; /* Mute Input and SCART 1 Output */ 278 state->acb = 0xf60; /* Mute Input and SCART 1 Output */
275 279
276 v4l_dbg(1, msp_debug, client, "scart switch: %s => %d (ACB=0x%04x)\n", 280 v4l_dbg(1, msp_debug, client, "scart switch: %s => %d (ACB=0x%04x)\n",
277 scart_names[in], out, state->acb); 281 scart_names[in], out, state->acb);
278 msp_write_dsp(client, 0x13, state->acb); 282 msp_write_dsp(client, 0x13, state->acb);
279 283
280 /* Sets I2S speed 0 = 1.024 Mbps, 1 = 2.048 Mbps */ 284 /* Sets I2S speed 0 = 1.024 Mbps, 1 = 2.048 Mbps */
@@ -293,7 +297,8 @@ void msp_set_audio(struct i2c_client *client)
293 val = (state->volume * 0x7f / 65535) << 8; 297 val = (state->volume * 0x7f / 65535) << 8;
294 298
295 v4l_dbg(1, msp_debug, client, "mute=%s scanning=%s volume=%d\n", 299 v4l_dbg(1, msp_debug, client, "mute=%s scanning=%s volume=%d\n",
296 state->muted ? "on" : "off", state->scan_in_progress ? "yes" : "no", 300 state->muted ? "on" : "off",
301 state->scan_in_progress ? "yes" : "no",
297 state->volume); 302 state->volume);
298 303
299 msp_write_dsp(client, 0x0000, val); 304 msp_write_dsp(client, 0x0000, val);
@@ -682,14 +687,14 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
682 v4l_dbg(1, msp_debug, client, "Setting I2S speed to %d\n", *a); 687 v4l_dbg(1, msp_debug, client, "Setting I2S speed to %d\n", *a);
683 688
684 switch (*a) { 689 switch (*a) {
685 case 1024000: 690 case 1024000:
686 state->i2s_mode = 0; 691 state->i2s_mode = 0;
687 break; 692 break;
688 case 2048000: 693 case 2048000:
689 state->i2s_mode = 1; 694 state->i2s_mode = 1;
690 break; 695 break;
691 default: 696 default:
692 return -EINVAL; 697 return -EINVAL;
693 } 698 }
694 break; 699 break;
695 } 700 }
@@ -699,22 +704,22 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
699 struct v4l2_queryctrl *qc = arg; 704 struct v4l2_queryctrl *qc = arg;
700 705
701 switch (qc->id) { 706 switch (qc->id) {
702 case V4L2_CID_AUDIO_VOLUME: 707 case V4L2_CID_AUDIO_VOLUME:
703 case V4L2_CID_AUDIO_MUTE: 708 case V4L2_CID_AUDIO_MUTE:
704 return v4l2_ctrl_query_fill_std(qc); 709 return v4l2_ctrl_query_fill_std(qc);
705 default: 710 default:
706 break; 711 break;
707 } 712 }
708 if (!state->has_sound_processing) 713 if (!state->has_sound_processing)
709 return -EINVAL; 714 return -EINVAL;
710 switch (qc->id) { 715 switch (qc->id) {
711 case V4L2_CID_AUDIO_LOUDNESS: 716 case V4L2_CID_AUDIO_LOUDNESS:
712 case V4L2_CID_AUDIO_BALANCE: 717 case V4L2_CID_AUDIO_BALANCE:
713 case V4L2_CID_AUDIO_BASS: 718 case V4L2_CID_AUDIO_BASS:
714 case V4L2_CID_AUDIO_TREBLE: 719 case V4L2_CID_AUDIO_TREBLE:
715 return v4l2_ctrl_query_fill_std(qc); 720 return v4l2_ctrl_query_fill_std(qc);
716 default: 721 default:
717 return -EINVAL; 722 return -EINVAL;
718 } 723 }
719 } 724 }
720 725
@@ -736,13 +741,14 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
736 state->volume, state->muted ? " (muted)" : ""); 741 state->volume, state->muted ? " (muted)" : "");
737 if (state->has_sound_processing) { 742 if (state->has_sound_processing) {
738 v4l_info(client, "Audio: balance %d bass %d treble %d loudness %s\n", 743 v4l_info(client, "Audio: balance %d bass %d treble %d loudness %s\n",
739 state->balance, state->bass, state->treble, 744 state->balance, state->bass,
745 state->treble,
740 state->loudness ? "on" : "off"); 746 state->loudness ? "on" : "off");
741 } 747 }
742 switch (state->mode) { 748 switch (state->mode) {
743 case MSP_MODE_AM_DETECT: p = "AM (for carrier detect)"; break; 749 case MSP_MODE_AM_DETECT: p = "AM (for carrier detect)"; break;
744 case MSP_MODE_FM_RADIO: p = "FM Radio"; break; 750 case MSP_MODE_FM_RADIO: p = "FM Radio"; break;
745 case MSP_MODE_FM_TERRA: p = "Terrestial FM-mono + FM-stereo"; break; 751 case MSP_MODE_FM_TERRA: p = "Terrestial FM-mono/stereo"; break;
746 case MSP_MODE_FM_SAT: p = "Satellite FM-mono"; break; 752 case MSP_MODE_FM_SAT: p = "Satellite FM-mono"; break;
747 case MSP_MODE_FM_NICAM1: p = "NICAM/FM (B/G, D/K)"; break; 753 case MSP_MODE_FM_NICAM1: p = "NICAM/FM (B/G, D/K)"; break;
748 case MSP_MODE_FM_NICAM2: p = "NICAM/FM (I)"; break; 754 case MSP_MODE_FM_NICAM2: p = "NICAM/FM (I)"; break;
@@ -773,7 +779,8 @@ static int msp_command(struct i2c_client *client, unsigned int cmd, void *arg)
773 } 779 }
774 780
775 case VIDIOC_G_CHIP_IDENT: 781 case VIDIOC_G_CHIP_IDENT:
776 return v4l2_chip_ident_i2c_client(client, arg, state->ident, (state->rev1 << 16) | state->rev2); 782 return v4l2_chip_ident_i2c_client(client, arg, state->ident,
783 (state->rev1 << 16) | state->rev2);
777 784
778 default: 785 default:
779 /* unknown */ 786 /* unknown */
@@ -816,9 +823,8 @@ static int msp_probe(struct i2c_client *client)
816 } 823 }
817 824
818 state = kzalloc(sizeof(*state), GFP_KERNEL); 825 state = kzalloc(sizeof(*state), GFP_KERNEL);
819 if (!state) { 826 if (!state)
820 return -ENOMEM; 827 return -ENOMEM;
821 }
822 828
823 i2c_set_clientdata(client, state); 829 i2c_set_clientdata(client, state);
824 830
@@ -840,9 +846,11 @@ static int msp_probe(struct i2c_client *client)
840 state->rev1 = msp_read_dsp(client, 0x1e); 846 state->rev1 = msp_read_dsp(client, 0x1e);
841 if (state->rev1 != -1) 847 if (state->rev1 != -1)
842 state->rev2 = msp_read_dsp(client, 0x1f); 848 state->rev2 = msp_read_dsp(client, 0x1f);
843 v4l_dbg(1, msp_debug, client, "rev1=0x%04x, rev2=0x%04x\n", state->rev1, state->rev2); 849 v4l_dbg(1, msp_debug, client, "rev1=0x%04x, rev2=0x%04x\n",
850 state->rev1, state->rev2);
844 if (state->rev1 == -1 || (state->rev1 == 0 && state->rev2 == 0)) { 851 if (state->rev1 == -1 || (state->rev1 == 0 && state->rev2 == 0)) {
845 v4l_dbg(1, msp_debug, client, "not an msp3400 (cannot read chip version)\n"); 852 v4l_dbg(1, msp_debug, client,
853 "not an msp3400 (cannot read chip version)\n");
846 kfree(state); 854 kfree(state);
847 return -ENODEV; 855 return -ENODEV;
848 } 856 }
@@ -860,37 +868,55 @@ static int msp_probe(struct i2c_client *client)
860 msp_family, msp_product, 868 msp_family, msp_product,
861 msp_revision, msp_hard, msp_rom); 869 msp_revision, msp_hard, msp_rom);
862 /* Rev B=2, C=3, D=4, G=7 */ 870 /* Rev B=2, C=3, D=4, G=7 */
863 state->ident = msp_family * 10000 + 4000 + msp_product * 10 + msp_revision - '@'; 871 state->ident = msp_family * 10000 + 4000 + msp_product * 10 +
872 msp_revision - '@';
864 873
865 /* Has NICAM support: all mspx41x and mspx45x products have NICAM */ 874 /* Has NICAM support: all mspx41x and mspx45x products have NICAM */
866 state->has_nicam = msp_prod_hi == 1 || msp_prod_hi == 5; 875 state->has_nicam =
876 msp_prod_hi == 1 || msp_prod_hi == 5;
867 /* Has radio support: was added with revision G */ 877 /* Has radio support: was added with revision G */
868 state->has_radio = msp_revision >= 'G'; 878 state->has_radio =
879 msp_revision >= 'G';
869 /* Has headphones output: not for stripped down products */ 880 /* Has headphones output: not for stripped down products */
870 state->has_headphones = msp_prod_lo < 5; 881 state->has_headphones =
882 msp_prod_lo < 5;
871 /* Has scart2 input: not in stripped down products of the '3' family */ 883 /* Has scart2 input: not in stripped down products of the '3' family */
872 state->has_scart2 = msp_family >= 4 || msp_prod_lo < 7; 884 state->has_scart2 =
885 msp_family >= 4 || msp_prod_lo < 7;
873 /* Has scart3 input: not in stripped down products of the '3' family */ 886 /* Has scart3 input: not in stripped down products of the '3' family */
874 state->has_scart3 = msp_family >= 4 || msp_prod_lo < 5; 887 state->has_scart3 =
888 msp_family >= 4 || msp_prod_lo < 5;
875 /* Has scart4 input: not in pre D revisions, not in stripped D revs */ 889 /* Has scart4 input: not in pre D revisions, not in stripped D revs */
876 state->has_scart4 = msp_family >= 4 || (msp_revision >= 'D' && msp_prod_lo < 5); 890 state->has_scart4 =
877 /* Has scart2 output: not in stripped down products of the '3' family */ 891 msp_family >= 4 || (msp_revision >= 'D' && msp_prod_lo < 5);
878 state->has_scart2_out = msp_family >= 4 || msp_prod_lo < 5; 892 /* Has scart2 output: not in stripped down products of
893 * the '3' family */
894 state->has_scart2_out =
895 msp_family >= 4 || msp_prod_lo < 5;
879 /* Has scart2 a volume control? Not in pre-D revisions. */ 896 /* Has scart2 a volume control? Not in pre-D revisions. */
880 state->has_scart2_out_volume = msp_revision > 'C' && state->has_scart2_out; 897 state->has_scart2_out_volume =
898 msp_revision > 'C' && state->has_scart2_out;
881 /* Has a configurable i2s out? */ 899 /* Has a configurable i2s out? */
882 state->has_i2s_conf = msp_revision >= 'G' && msp_prod_lo < 7; 900 state->has_i2s_conf =
883 /* Has subwoofer output: not in pre-D revs and not in stripped down products */ 901 msp_revision >= 'G' && msp_prod_lo < 7;
884 state->has_subwoofer = msp_revision >= 'D' && msp_prod_lo < 5; 902 /* Has subwoofer output: not in pre-D revs and not in stripped down
885 /* Has soundprocessing (bass/treble/balance/loudness/equalizer): not in 903 * products */
886 stripped down products */ 904 state->has_subwoofer =
887 state->has_sound_processing = msp_prod_lo < 7; 905 msp_revision >= 'D' && msp_prod_lo < 5;
906 /* Has soundprocessing (bass/treble/balance/loudness/equalizer):
907 * not in stripped down products */
908 state->has_sound_processing =
909 msp_prod_lo < 7;
888 /* Has Virtual Dolby Surround: only in msp34x1 */ 910 /* Has Virtual Dolby Surround: only in msp34x1 */
889 state->has_virtual_dolby_surround = msp_revision == 'G' && msp_prod_lo == 1; 911 state->has_virtual_dolby_surround =
912 msp_revision == 'G' && msp_prod_lo == 1;
890 /* Has Virtual Dolby Surround & Dolby Pro Logic: only in msp34x2 */ 913 /* Has Virtual Dolby Surround & Dolby Pro Logic: only in msp34x2 */
891 state->has_dolby_pro_logic = msp_revision == 'G' && msp_prod_lo == 2; 914 state->has_dolby_pro_logic =
892 /* The msp343xG supports BTSC only and cannot do Automatic Standard Detection. */ 915 msp_revision == 'G' && msp_prod_lo == 2;
893 state->force_btsc = msp_family == 3 && msp_revision == 'G' && msp_prod_hi == 3; 916 /* The msp343xG supports BTSC only and cannot do Automatic Standard
917 * Detection. */
918 state->force_btsc =
919 msp_family == 3 && msp_revision == 'G' && msp_prod_hi == 3;
894 920
895 state->opmode = opmode; 921 state->opmode = opmode;
896 if (state->opmode == OPMODE_AUTO) { 922 if (state->opmode == OPMODE_AUTO) {
@@ -905,32 +931,33 @@ static int msp_probe(struct i2c_client *client)
905 } 931 }
906 932
907 /* hello world :-) */ 933 /* hello world :-) */
908 v4l_info(client, "%s found @ 0x%x (%s)\n", client->name, client->addr << 1, client->adapter->name); 934 v4l_info(client, "%s found @ 0x%x (%s)\n", client->name,
935 client->addr << 1, client->adapter->name);
909 v4l_info(client, "%s ", client->name); 936 v4l_info(client, "%s ", client->name);
910 if (state->has_nicam && state->has_radio) 937 if (state->has_nicam && state->has_radio)
911 printk("supports nicam and radio, "); 938 printk(KERN_CONT "supports nicam and radio, ");
912 else if (state->has_nicam) 939 else if (state->has_nicam)
913 printk("supports nicam, "); 940 printk(KERN_CONT "supports nicam, ");
914 else if (state->has_radio) 941 else if (state->has_radio)
915 printk("supports radio, "); 942 printk(KERN_CONT "supports radio, ");
916 printk("mode is "); 943 printk(KERN_CONT "mode is ");
917 944
918 /* version-specific initialization */ 945 /* version-specific initialization */
919 switch (state->opmode) { 946 switch (state->opmode) {
920 case OPMODE_MANUAL: 947 case OPMODE_MANUAL:
921 printk("manual"); 948 printk(KERN_CONT "manual");
922 thread_func = msp3400c_thread; 949 thread_func = msp3400c_thread;
923 break; 950 break;
924 case OPMODE_AUTODETECT: 951 case OPMODE_AUTODETECT:
925 printk("autodetect"); 952 printk(KERN_CONT "autodetect");
926 thread_func = msp3410d_thread; 953 thread_func = msp3410d_thread;
927 break; 954 break;
928 case OPMODE_AUTOSELECT: 955 case OPMODE_AUTOSELECT:
929 printk("autodetect and autoselect"); 956 printk(KERN_CONT "autodetect and autoselect");
930 thread_func = msp34xxg_thread; 957 thread_func = msp34xxg_thread;
931 break; 958 break;
932 } 959 }
933 printk("\n"); 960 printk(KERN_CONT "\n");
934 961
935 /* startup control thread if needed */ 962 /* startup control thread if needed */
936 if (thread_func) { 963 if (thread_func) {
diff --git a/drivers/media/video/msp3400-kthreads.c b/drivers/media/video/msp3400-kthreads.c
index d5ee2629121e..61ec794a737e 100644
--- a/drivers/media/video/msp3400-kthreads.c
+++ b/drivers/media/video/msp3400-kthreads.c
@@ -15,7 +15,8 @@
15 * 15 *
16 * You should have received a copy of the GNU General Public License 16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software 17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. 18 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
19 * 02110-1301, USA.
19 */ 20 */
20 21
21 22
@@ -78,37 +79,37 @@ static struct msp3400c_init_data_dem {
78 {75, 19, 36, 35, 39, 40}, 79 {75, 19, 36, 35, 39, 40},
79 MSP_CARRIER(5.5), MSP_CARRIER(5.5), 80 MSP_CARRIER(5.5), MSP_CARRIER(5.5),
80 0x00d0, 0x0500, 0x0020, 0x3000 81 0x00d0, 0x0500, 0x0020, 0x3000
81 },{ /* AM (for carrier detect / msp3410) */ 82 }, { /* AM (for carrier detect / msp3410) */
82 {-1, -1, -8, 2, 59, 126}, 83 {-1, -1, -8, 2, 59, 126},
83 {-1, -1, -8, 2, 59, 126}, 84 {-1, -1, -8, 2, 59, 126},
84 MSP_CARRIER(5.5), MSP_CARRIER(5.5), 85 MSP_CARRIER(5.5), MSP_CARRIER(5.5),
85 0x00d0, 0x0100, 0x0020, 0x3000 86 0x00d0, 0x0100, 0x0020, 0x3000
86 },{ /* FM Radio */ 87 }, { /* FM Radio */
87 {-8, -8, 4, 6, 78, 107}, 88 {-8, -8, 4, 6, 78, 107},
88 {-8, -8, 4, 6, 78, 107}, 89 {-8, -8, 4, 6, 78, 107},
89 MSP_CARRIER(10.7), MSP_CARRIER(10.7), 90 MSP_CARRIER(10.7), MSP_CARRIER(10.7),
90 0x00d0, 0x0480, 0x0020, 0x3000 91 0x00d0, 0x0480, 0x0020, 0x3000
91 },{ /* Terrestial FM-mono + FM-stereo */ 92 }, { /* Terrestial FM-mono + FM-stereo */
92 {3, 18, 27, 48, 66, 72}, 93 {3, 18, 27, 48, 66, 72},
93 {3, 18, 27, 48, 66, 72}, 94 {3, 18, 27, 48, 66, 72},
94 MSP_CARRIER(5.5), MSP_CARRIER(5.5), 95 MSP_CARRIER(5.5), MSP_CARRIER(5.5),
95 0x00d0, 0x0480, 0x0030, 0x3000 96 0x00d0, 0x0480, 0x0030, 0x3000
96 },{ /* Sat FM-mono */ 97 }, { /* Sat FM-mono */
97 { 1, 9, 14, 24, 33, 37}, 98 { 1, 9, 14, 24, 33, 37},
98 { 3, 18, 27, 48, 66, 72}, 99 { 3, 18, 27, 48, 66, 72},
99 MSP_CARRIER(6.5), MSP_CARRIER(6.5), 100 MSP_CARRIER(6.5), MSP_CARRIER(6.5),
100 0x00c6, 0x0480, 0x0000, 0x3000 101 0x00c6, 0x0480, 0x0000, 0x3000
101 },{ /* NICAM/FM -- B/G (5.5/5.85), D/K (6.5/5.85) */ 102 }, { /* NICAM/FM -- B/G (5.5/5.85), D/K (6.5/5.85) */
102 {-2, -8, -10, 10, 50, 86}, 103 {-2, -8, -10, 10, 50, 86},
103 {3, 18, 27, 48, 66, 72}, 104 {3, 18, 27, 48, 66, 72},
104 MSP_CARRIER(5.5), MSP_CARRIER(5.5), 105 MSP_CARRIER(5.5), MSP_CARRIER(5.5),
105 0x00d0, 0x0040, 0x0120, 0x3000 106 0x00d0, 0x0040, 0x0120, 0x3000
106 },{ /* NICAM/FM -- I (6.0/6.552) */ 107 }, { /* NICAM/FM -- I (6.0/6.552) */
107 {2, 4, -6, -4, 40, 94}, 108 {2, 4, -6, -4, 40, 94},
108 {3, 18, 27, 48, 66, 72}, 109 {3, 18, 27, 48, 66, 72},
109 MSP_CARRIER(6.0), MSP_CARRIER(6.0), 110 MSP_CARRIER(6.0), MSP_CARRIER(6.0),
110 0x00d0, 0x0040, 0x0120, 0x3000 111 0x00d0, 0x0040, 0x0120, 0x3000
111 },{ /* NICAM/AM -- L (6.5/5.85) */ 112 }, { /* NICAM/AM -- L (6.5/5.85) */
112 {-2, -8, -10, 10, 50, 86}, 113 {-2, -8, -10, 10, 50, 86},
113 {-4, -12, -9, 23, 79, 126}, 114 {-4, -12, -9, 23, 79, 126},
114 MSP_CARRIER(6.5), MSP_CARRIER(6.5), 115 MSP_CARRIER(6.5), MSP_CARRIER(6.5),
@@ -224,7 +225,9 @@ void msp3400c_set_mode(struct i2c_client *client, int mode)
224 nor do they support stereo BTSC. */ 225 nor do they support stereo BTSC. */
225static void msp3400c_set_audmode(struct i2c_client *client) 226static void msp3400c_set_audmode(struct i2c_client *client)
226{ 227{
227 static char *strmode[] = { "mono", "stereo", "lang2", "lang1", "lang1+lang2" }; 228 static char *strmode[] = {
229 "mono", "stereo", "lang2", "lang1", "lang1+lang2"
230 };
228 struct msp_state *state = i2c_get_clientdata(client); 231 struct msp_state *state = i2c_get_clientdata(client);
229 char *modestr = (state->audmode >= 0 && state->audmode < 5) ? 232 char *modestr = (state->audmode >= 0 && state->audmode < 5) ?
230 strmode[state->audmode] : "unknown"; 233 strmode[state->audmode] : "unknown";
@@ -298,19 +301,23 @@ static void msp3400c_set_audmode(struct i2c_client *client)
298 case MSP_MODE_FM_NICAM1: 301 case MSP_MODE_FM_NICAM1:
299 case MSP_MODE_FM_NICAM2: 302 case MSP_MODE_FM_NICAM2:
300 case MSP_MODE_AM_NICAM: 303 case MSP_MODE_AM_NICAM:
301 v4l_dbg(1, msp_debug, client, "NICAM set_audmode: %s\n",modestr); 304 v4l_dbg(1, msp_debug, client,
305 "NICAM set_audmode: %s\n", modestr);
302 if (state->nicam_on) 306 if (state->nicam_on)
303 src = 0x0100; /* NICAM */ 307 src = 0x0100; /* NICAM */
304 break; 308 break;
305 case MSP_MODE_BTSC: 309 case MSP_MODE_BTSC:
306 v4l_dbg(1, msp_debug, client, "BTSC set_audmode: %s\n",modestr); 310 v4l_dbg(1, msp_debug, client,
311 "BTSC set_audmode: %s\n", modestr);
307 break; 312 break;
308 case MSP_MODE_EXTERN: 313 case MSP_MODE_EXTERN:
309 v4l_dbg(1, msp_debug, client, "extern set_audmode: %s\n",modestr); 314 v4l_dbg(1, msp_debug, client,
315 "extern set_audmode: %s\n", modestr);
310 src = 0x0200; /* SCART */ 316 src = 0x0200; /* SCART */
311 break; 317 break;
312 case MSP_MODE_FM_RADIO: 318 case MSP_MODE_FM_RADIO:
313 v4l_dbg(1, msp_debug, client, "FM-Radio set_audmode: %s\n",modestr); 319 v4l_dbg(1, msp_debug, client,
320 "FM-Radio set_audmode: %s\n", modestr);
314 break; 321 break;
315 default: 322 default:
316 v4l_dbg(1, msp_debug, client, "mono set_audmode\n"); 323 v4l_dbg(1, msp_debug, client, "mono set_audmode\n");
@@ -342,7 +349,8 @@ static void msp3400c_set_audmode(struct i2c_client *client)
342 src |= 0x0010; 349 src |= 0x0010;
343 break; 350 break;
344 } 351 }
345 v4l_dbg(1, msp_debug, client, "set_audmode final source/matrix = 0x%x\n", src); 352 v4l_dbg(1, msp_debug, client,
353 "set_audmode final source/matrix = 0x%x\n", src);
346 354
347 msp_set_source(client, src); 355 msp_set_source(client, src);
348} 356}
@@ -351,22 +359,26 @@ static void msp3400c_print_mode(struct i2c_client *client)
351{ 359{
352 struct msp_state *state = i2c_get_clientdata(client); 360 struct msp_state *state = i2c_get_clientdata(client);
353 361
354 if (state->main == state->second) { 362 if (state->main == state->second)
355 v4l_dbg(1, msp_debug, client, "mono sound carrier: %d.%03d MHz\n", 363 v4l_dbg(1, msp_debug, client,
356 state->main / 910000, (state->main / 910) % 1000); 364 "mono sound carrier: %d.%03d MHz\n",
357 } else { 365 state->main / 910000, (state->main / 910) % 1000);
358 v4l_dbg(1, msp_debug, client, "main sound carrier: %d.%03d MHz\n", 366 else
359 state->main / 910000, (state->main / 910) % 1000); 367 v4l_dbg(1, msp_debug, client,
360 } 368 "main sound carrier: %d.%03d MHz\n",
369 state->main / 910000, (state->main / 910) % 1000);
361 if (state->mode == MSP_MODE_FM_NICAM1 || state->mode == MSP_MODE_FM_NICAM2) 370 if (state->mode == MSP_MODE_FM_NICAM1 || state->mode == MSP_MODE_FM_NICAM2)
362 v4l_dbg(1, msp_debug, client, "NICAM/FM carrier : %d.%03d MHz\n", 371 v4l_dbg(1, msp_debug, client,
363 state->second / 910000, (state->second/910) % 1000); 372 "NICAM/FM carrier : %d.%03d MHz\n",
373 state->second / 910000, (state->second/910) % 1000);
364 if (state->mode == MSP_MODE_AM_NICAM) 374 if (state->mode == MSP_MODE_AM_NICAM)
365 v4l_dbg(1, msp_debug, client, "NICAM/AM carrier : %d.%03d MHz\n", 375 v4l_dbg(1, msp_debug, client,
366 state->second / 910000, (state->second / 910) % 1000); 376 "NICAM/AM carrier : %d.%03d MHz\n",
377 state->second / 910000, (state->second / 910) % 1000);
367 if (state->mode == MSP_MODE_FM_TERRA && state->main != state->second) { 378 if (state->mode == MSP_MODE_FM_TERRA && state->main != state->second) {
368 v4l_dbg(1, msp_debug, client, "FM-stereo carrier : %d.%03d MHz\n", 379 v4l_dbg(1, msp_debug, client,
369 state->second / 910000, (state->second / 910) % 1000); 380 "FM-stereo carrier : %d.%03d MHz\n",
381 state->second / 910000, (state->second / 910) % 1000);
370 } 382 }
371} 383}
372 384
@@ -385,7 +397,8 @@ static int msp3400c_detect_stereo(struct i2c_client *client)
385 val = msp_read_dsp(client, 0x18); 397 val = msp_read_dsp(client, 0x18);
386 if (val > 32767) 398 if (val > 32767)
387 val -= 65536; 399 val -= 65536;
388 v4l_dbg(2, msp_debug, client, "stereo detect register: %d\n", val); 400 v4l_dbg(2, msp_debug, client,
401 "stereo detect register: %d\n", val);
389 if (val > 8192) { 402 if (val > 8192) {
390 rxsubchans = V4L2_TUNER_SUB_STEREO; 403 rxsubchans = V4L2_TUNER_SUB_STEREO;
391 } else if (val < -4096) { 404 } else if (val < -4096) {
@@ -430,7 +443,8 @@ static int msp3400c_detect_stereo(struct i2c_client *client)
430 } 443 }
431 if (rxsubchans != state->rxsubchans) { 444 if (rxsubchans != state->rxsubchans) {
432 update = 1; 445 update = 1;
433 v4l_dbg(1, msp_debug, client, "watch: rxsubchans %02x => %02x\n", 446 v4l_dbg(1, msp_debug, client,
447 "watch: rxsubchans %02x => %02x\n",
434 state->rxsubchans, rxsubchans); 448 state->rxsubchans, rxsubchans);
435 state->rxsubchans = rxsubchans; 449 state->rxsubchans = rxsubchans;
436 } 450 }
@@ -452,9 +466,8 @@ static void watch_stereo(struct i2c_client *client)
452{ 466{
453 struct msp_state *state = i2c_get_clientdata(client); 467 struct msp_state *state = i2c_get_clientdata(client);
454 468
455 if (msp_detect_stereo(client)) { 469 if (msp_detect_stereo(client))
456 msp_set_audmode(client); 470 msp_set_audmode(client);
457 }
458 471
459 if (msp_once) 472 if (msp_once)
460 state->watch_stereo = 0; 473 state->watch_stereo = 0;
@@ -465,7 +478,7 @@ int msp3400c_thread(void *data)
465 struct i2c_client *client = data; 478 struct i2c_client *client = data;
466 struct msp_state *state = i2c_get_clientdata(client); 479 struct msp_state *state = i2c_get_clientdata(client);
467 struct msp3400c_carrier_detect *cd; 480 struct msp3400c_carrier_detect *cd;
468 int count, max1, max2, val1, val2, val, this; 481 int count, max1, max2, val1, val2, val, i;
469 482
470 483
471 v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n"); 484 v4l_dbg(1, msp_debug, client, "msp3400 daemon started\n");
@@ -475,7 +488,7 @@ int msp3400c_thread(void *data)
475 msp_sleep(state, -1); 488 msp_sleep(state, -1);
476 v4l_dbg(2, msp_debug, client, "msp3400 thread: wakeup\n"); 489 v4l_dbg(2, msp_debug, client, "msp3400 thread: wakeup\n");
477 490
478 restart: 491restart:
479 v4l_dbg(2, msp_debug, client, "thread: restart scan\n"); 492 v4l_dbg(2, msp_debug, client, "thread: restart scan\n");
480 state->restart = 0; 493 state->restart = 0;
481 if (kthread_should_stop()) 494 if (kthread_should_stop())
@@ -483,7 +496,8 @@ int msp3400c_thread(void *data)
483 496
484 if (state->radio || MSP_MODE_EXTERN == state->mode) { 497 if (state->radio || MSP_MODE_EXTERN == state->mode) {
485 /* no carrier scan, just unmute */ 498 /* no carrier scan, just unmute */
486 v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n"); 499 v4l_dbg(1, msp_debug, client,
500 "thread: no carrier scan\n");
487 state->scan_in_progress = 0; 501 state->scan_in_progress = 0;
488 msp_set_audio(client); 502 msp_set_audio(client);
489 continue; 503 continue;
@@ -514,16 +528,17 @@ int msp3400c_thread(void *data)
514 v4l_dbg(1, msp_debug, client, "AM sound override\n"); 528 v4l_dbg(1, msp_debug, client, "AM sound override\n");
515 } 529 }
516 530
517 for (this = 0; this < count; this++) { 531 for (i = 0; i < count; i++) {
518 msp3400c_set_carrier(client, cd[this].cdo, cd[this].cdo); 532 msp3400c_set_carrier(client, cd[i].cdo, cd[i].cdo);
519 if (msp_sleep(state,100)) 533 if (msp_sleep(state, 100))
520 goto restart; 534 goto restart;
521 val = msp_read_dsp(client, 0x1b); 535 val = msp_read_dsp(client, 0x1b);
522 if (val > 32767) 536 if (val > 32767)
523 val -= 65536; 537 val -= 65536;
524 if (val1 < val) 538 if (val1 < val)
525 val1 = val, max1 = this; 539 val1 = val, max1 = i;
526 v4l_dbg(1, msp_debug, client, "carrier1 val: %5d / %s\n", val,cd[this].name); 540 v4l_dbg(1, msp_debug, client,
541 "carrier1 val: %5d / %s\n", val, cd[i].name);
527 } 542 }
528 543
529 /* carrier detect pass #2 -- second (stereo) carrier */ 544 /* carrier detect pass #2 -- second (stereo) carrier */
@@ -550,16 +565,17 @@ int msp3400c_thread(void *data)
550 count = 0; 565 count = 0;
551 max2 = 0; 566 max2 = 0;
552 } 567 }
553 for (this = 0; this < count; this++) { 568 for (i = 0; i < count; i++) {
554 msp3400c_set_carrier(client, cd[this].cdo, cd[this].cdo); 569 msp3400c_set_carrier(client, cd[i].cdo, cd[i].cdo);
555 if (msp_sleep(state,100)) 570 if (msp_sleep(state, 100))
556 goto restart; 571 goto restart;
557 val = msp_read_dsp(client, 0x1b); 572 val = msp_read_dsp(client, 0x1b);
558 if (val > 32767) 573 if (val > 32767)
559 val -= 65536; 574 val -= 65536;
560 if (val2 < val) 575 if (val2 < val)
561 val2 = val, max2 = this; 576 val2 = val, max2 = i;
562 v4l_dbg(1, msp_debug, client, "carrier2 val: %5d / %s\n", val,cd[this].name); 577 v4l_dbg(1, msp_debug, client,
578 "carrier2 val: %5d / %s\n", val, cd[i].name);
563 } 579 }
564 580
565 /* program the msp3400 according to the results */ 581 /* program the msp3400 according to the results */
@@ -611,7 +627,7 @@ int msp3400c_thread(void *data)
611 break; 627 break;
612 case 0: /* 4.5 */ 628 case 0: /* 4.5 */
613 default: 629 default:
614 no_second: 630no_second:
615 state->second = msp3400c_carrier_detect_main[max1].cdo; 631 state->second = msp3400c_carrier_detect_main[max1].cdo;
616 msp3400c_set_mode(client, MSP_MODE_FM_TERRA); 632 msp3400c_set_mode(client, MSP_MODE_FM_TERRA);
617 break; 633 break;
@@ -632,7 +648,8 @@ int msp3400c_thread(void *data)
632 while (state->watch_stereo) { 648 while (state->watch_stereo) {
633 if (msp_sleep(state, count ? 1000 : 5000)) 649 if (msp_sleep(state, count ? 1000 : 5000))
634 goto restart; 650 goto restart;
635 if (count) count--; 651 if (count)
652 count--;
636 watch_stereo(client); 653 watch_stereo(client);
637 } 654 }
638 } 655 }
@@ -651,10 +668,10 @@ int msp3410d_thread(void *data)
651 set_freezable(); 668 set_freezable();
652 for (;;) { 669 for (;;) {
653 v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n"); 670 v4l_dbg(2, msp_debug, client, "msp3410 thread: sleep\n");
654 msp_sleep(state,-1); 671 msp_sleep(state, -1);
655 v4l_dbg(2, msp_debug, client, "msp3410 thread: wakeup\n"); 672 v4l_dbg(2, msp_debug, client, "msp3410 thread: wakeup\n");
656 673
657 restart: 674restart:
658 v4l_dbg(2, msp_debug, client, "thread: restart scan\n"); 675 v4l_dbg(2, msp_debug, client, "thread: restart scan\n");
659 state->restart = 0; 676 state->restart = 0;
660 if (kthread_should_stop()) 677 if (kthread_should_stop())
@@ -662,7 +679,8 @@ int msp3410d_thread(void *data)
662 679
663 if (state->mode == MSP_MODE_EXTERN) { 680 if (state->mode == MSP_MODE_EXTERN) {
664 /* no carrier scan needed, just unmute */ 681 /* no carrier scan needed, just unmute */
665 v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n"); 682 v4l_dbg(1, msp_debug, client,
683 "thread: no carrier scan\n");
666 state->scan_in_progress = 0; 684 state->scan_in_progress = 0;
667 msp_set_audio(client); 685 msp_set_audio(client);
668 continue; 686 continue;
@@ -673,7 +691,8 @@ int msp3410d_thread(void *data)
673 msp_set_audio(client); 691 msp_set_audio(client);
674 692
675 /* start autodetect. Note: autodetect is not supported for 693 /* start autodetect. Note: autodetect is not supported for
676 NTSC-M and radio, hence we force the standard in those cases. */ 694 NTSC-M and radio, hence we force the standard in those
695 cases. */
677 if (state->radio) 696 if (state->radio)
678 std = 0x40; 697 std = 0x40;
679 else 698 else
@@ -686,8 +705,9 @@ int msp3410d_thread(void *data)
686 goto restart; 705 goto restart;
687 706
688 if (msp_debug) 707 if (msp_debug)
689 v4l_dbg(2, msp_debug, client, "setting standard: %s (0x%04x)\n", 708 v4l_dbg(2, msp_debug, client,
690 msp_standard_std_name(std), std); 709 "setting standard: %s (0x%04x)\n",
710 msp_standard_std_name(std), std);
691 711
692 if (std != 1) { 712 if (std != 1) {
693 /* programmed some specific mode */ 713 /* programmed some specific mode */
@@ -703,7 +723,8 @@ int msp3410d_thread(void *data)
703 val = msp_read_dem(client, 0x7e); 723 val = msp_read_dem(client, 0x7e);
704 if (val < 0x07ff) 724 if (val < 0x07ff)
705 break; 725 break;
706 v4l_dbg(2, msp_debug, client, "detection still in progress\n"); 726 v4l_dbg(2, msp_debug, client,
727 "detection still in progress\n");
707 } 728 }
708 } 729 }
709 for (i = 0; msp_stdlist[i].name != NULL; i++) 730 for (i = 0; msp_stdlist[i].name != NULL; i++)
@@ -716,12 +737,13 @@ int msp3410d_thread(void *data)
716 state->std = val; 737 state->std = val;
717 state->rxsubchans = V4L2_TUNER_SUB_MONO; 738 state->rxsubchans = V4L2_TUNER_SUB_MONO;
718 739
719 if (msp_amsound && !state->radio && (state->v4l2_std & V4L2_STD_SECAM) && 740 if (msp_amsound && !state->radio &&
720 (val != 0x0009)) { 741 (state->v4l2_std & V4L2_STD_SECAM) && (val != 0x0009)) {
721 /* autodetection has failed, let backup */ 742 /* autodetection has failed, let backup */
722 v4l_dbg(1, msp_debug, client, "autodetection failed," 743 v4l_dbg(1, msp_debug, client, "autodetection failed,"
723 " switching to backup standard: %s (0x%04x)\n", 744 " switching to backup standard: %s (0x%04x)\n",
724 msp_stdlist[8].name ? msp_stdlist[8].name : "unknown",val); 745 msp_stdlist[8].name ?
746 msp_stdlist[8].name : "unknown", val);
725 state->std = val = 0x0009; 747 state->std = val = 0x0009;
726 msp_write_dem(client, 0x20, val); 748 msp_write_dem(client, 0x20, val);
727 } 749 }
@@ -786,7 +808,8 @@ int msp3410d_thread(void *data)
786 while (state->watch_stereo) { 808 while (state->watch_stereo) {
787 if (msp_sleep(state, count ? 1000 : 5000)) 809 if (msp_sleep(state, count ? 1000 : 5000))
788 goto restart; 810 goto restart;
789 if (count) count--; 811 if (count)
812 count--;
790 watch_stereo(client); 813 watch_stereo(client);
791 } 814 }
792 } 815 }
@@ -872,8 +895,8 @@ static void msp34xxg_set_source(struct i2c_client *client, u16 reg, int in)
872 else 895 else
873 source = (in << 8) | matrix; 896 source = (in << 8) | matrix;
874 897
875 v4l_dbg(1, msp_debug, client, "set source to %d (0x%x) for output %02x\n", 898 v4l_dbg(1, msp_debug, client,
876 in, source, reg); 899 "set source to %d (0x%x) for output %02x\n", in, source, reg);
877 msp_write_dsp(client, reg, source); 900 msp_write_dsp(client, reg, source);
878} 901}
879 902
@@ -948,7 +971,7 @@ int msp34xxg_thread(void *data)
948 msp_sleep(state, -1); 971 msp_sleep(state, -1);
949 v4l_dbg(2, msp_debug, client, "msp34xxg thread: wakeup\n"); 972 v4l_dbg(2, msp_debug, client, "msp34xxg thread: wakeup\n");
950 973
951 restart: 974restart:
952 v4l_dbg(1, msp_debug, client, "thread: restart scan\n"); 975 v4l_dbg(1, msp_debug, client, "thread: restart scan\n");
953 state->restart = 0; 976 state->restart = 0;
954 if (kthread_should_stop()) 977 if (kthread_should_stop())
@@ -956,7 +979,8 @@ int msp34xxg_thread(void *data)
956 979
957 if (state->mode == MSP_MODE_EXTERN) { 980 if (state->mode == MSP_MODE_EXTERN) {
958 /* no carrier scan needed, just unmute */ 981 /* no carrier scan needed, just unmute */
959 v4l_dbg(1, msp_debug, client, "thread: no carrier scan\n"); 982 v4l_dbg(1, msp_debug, client,
983 "thread: no carrier scan\n");
960 state->scan_in_progress = 0; 984 state->scan_in_progress = 0;
961 msp_set_audio(client); 985 msp_set_audio(client);
962 continue; 986 continue;
@@ -972,7 +996,8 @@ int msp34xxg_thread(void *data)
972 goto unmute; 996 goto unmute;
973 997
974 /* watch autodetect */ 998 /* watch autodetect */
975 v4l_dbg(1, msp_debug, client, "started autodetect, waiting for result\n"); 999 v4l_dbg(1, msp_debug, client,
1000 "started autodetect, waiting for result\n");
976 for (i = 0; i < 10; i++) { 1001 for (i = 0; i < 10; i++) {
977 if (msp_sleep(state, 100)) 1002 if (msp_sleep(state, 100))
978 goto restart; 1003 goto restart;
@@ -983,15 +1008,18 @@ int msp34xxg_thread(void *data)
983 state->std = val; 1008 state->std = val;
984 break; 1009 break;
985 } 1010 }
986 v4l_dbg(2, msp_debug, client, "detection still in progress\n"); 1011 v4l_dbg(2, msp_debug, client,
1012 "detection still in progress\n");
987 } 1013 }
988 if (state->std == 1) { 1014 if (state->std == 1) {
989 v4l_dbg(1, msp_debug, client, "detection still in progress after 10 tries. giving up.\n"); 1015 v4l_dbg(1, msp_debug, client,
1016 "detection still in progress after 10 tries. giving up.\n");
990 continue; 1017 continue;
991 } 1018 }
992 1019
993 unmute: 1020unmute:
994 v4l_dbg(1, msp_debug, client, "detected standard: %s (0x%04x)\n", 1021 v4l_dbg(1, msp_debug, client,
1022 "detected standard: %s (0x%04x)\n",
995 msp_standard_std_name(state->std), state->std); 1023 msp_standard_std_name(state->std), state->std);
996 1024
997 if (state->std == 9) { 1025 if (state->std == 9) {
@@ -1046,9 +1074,11 @@ static int msp34xxg_detect_stereo(struct i2c_client *client)
1046 if (state->std == 0x20) 1074 if (state->std == 0x20)
1047 state->rxsubchans |= V4L2_TUNER_SUB_SAP; 1075 state->rxsubchans |= V4L2_TUNER_SUB_SAP;
1048 else 1076 else
1049 state->rxsubchans = V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2; 1077 state->rxsubchans =
1078 V4L2_TUNER_SUB_LANG1 | V4L2_TUNER_SUB_LANG2;
1050 } 1079 }
1051 v4l_dbg(1, msp_debug, client, "status=0x%x, stereo=%d, bilingual=%d -> rxsubchans=%d\n", 1080 v4l_dbg(1, msp_debug, client,
1081 "status=0x%x, stereo=%d, bilingual=%d -> rxsubchans=%d\n",
1052 status, is_stereo, is_bilingual, state->rxsubchans); 1082 status, is_stereo, is_bilingual, state->rxsubchans);
1053 return (oldrx != state->rxsubchans); 1083 return (oldrx != state->rxsubchans);
1054} 1084}