aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMauro Carvalho Chehab <mchehab@redhat.com>2010-10-07 01:28:24 -0400
committerMauro Carvalho Chehab <mchehab@redhat.com>2010-10-20 23:17:51 -0400
commit709944eae2505eb4c93c0fff4bd4de18dfd8c570 (patch)
tree9f0575806839aef7a6d266a0e54bbdbe5caed7a2
parent39a96b4cf592e79aefd1b4f2b136c20ec7bf10a7 (diff)
[media] tm6000: add audio standards table
The better is to remove the audio init from tm6000-core and add a separate per-standard set of tables. Signed-off-by: Mauro Carvalho Chehab <mchehab@redhat.com>
-rw-r--r--drivers/staging/tm6000/tm6000-core.c44
-rw-r--r--drivers/staging/tm6000/tm6000-stds.c167
-rw-r--r--drivers/staging/tm6000/tm6000-video.c12
3 files changed, 178 insertions, 45 deletions
diff --git a/drivers/staging/tm6000/tm6000-core.c b/drivers/staging/tm6000/tm6000-core.c
index 3d825107c09f..1bce43acd3d9 100644
--- a/drivers/staging/tm6000/tm6000-core.c
+++ b/drivers/staging/tm6000/tm6000-core.c
@@ -202,6 +202,10 @@ int tm6000_init_analog_mode(struct tm6000_core *dev)
202 val &= ~0x40; 202 val &= ~0x40;
203 tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, val); 203 tm6000_set_reg(dev, TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, val);
204 204
205 tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc);
206
207#if 0 /* FIXME: VBI is standard-dependent */
208
205 /* Init teletext */ 209 /* Init teletext */
206 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); 210 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01);
207 tm6000_set_reg(dev, TM6010_REQ07_R41_TELETEXT_VBI_CODE1, 0x27); 211 tm6000_set_reg(dev, TM6010_REQ07_R41_TELETEXT_VBI_CODE1, 0x27);
@@ -251,44 +255,7 @@ int tm6000_init_analog_mode(struct tm6000_core *dev)
251 tm6000_set_reg(dev, TM6010_REQ07_R5B_VBI_TELETEXT_DTO0, 0x4c); 255 tm6000_set_reg(dev, TM6010_REQ07_R5B_VBI_TELETEXT_DTO0, 0x4c);
252 tm6000_set_reg(dev, TM6010_REQ07_R40_TELETEXT_VBI_CODE0, 0x01); 256 tm6000_set_reg(dev, TM6010_REQ07_R40_TELETEXT_VBI_CODE0, 0x01);
253 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x00); 257 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x00);
254 258#endif
255
256 /* Init audio */
257 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
258 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
259 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
260 tm6000_set_reg(dev, TM6010_REQ08_R04_A_SIF_AMP_CTRL, 0xa0);
261 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
262 tm6000_set_reg(dev, TM6010_REQ08_R07_A_LEFT_VOL, 0x00);
263 tm6000_set_reg(dev, TM6010_REQ08_R08_A_RIGHT_VOL, 0x00);
264 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
265 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
266 tm6000_set_reg(dev, TM6010_REQ08_R0B_A_ASD_THRES1, 0x20);
267 tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2, 0x12);
268 tm6000_set_reg(dev, TM6010_REQ08_R0D_A_AMD_THRES, 0x20);
269 tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1, 0xf0);
270 tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2, 0x80);
271 tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1, 0xc0);
272 tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2, 0x80);
273 tm6000_set_reg(dev, TM6010_REQ08_R12_A_AGC_U, 0x12);
274 tm6000_set_reg(dev, TM6010_REQ08_R13_A_AGC_ERR_T, 0xfe);
275 tm6000_set_reg(dev, TM6010_REQ08_R14_A_AGC_GAIN_INIT, 0x20);
276 tm6000_set_reg(dev, TM6010_REQ08_R15_A_AGC_STEP_THR, 0x14);
277 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
278 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
279 tm6000_set_reg(dev, TM6010_REQ08_R18_A_TR_CTRL, 0xa0);
280 tm6000_set_reg(dev, TM6010_REQ08_R19_A_FH_2FH_GAIN, 0x32);
281 tm6000_set_reg(dev, TM6010_REQ08_R1A_A_NICAM_SER_MAX, 0x64);
282 tm6000_set_reg(dev, TM6010_REQ08_R1B_A_NICAM_SER_MIN, 0x20);
283 tm6000_set_reg(dev, REQ_08_SET_GET_AVREG_BIT, 0x1c, 0x00);
284 tm6000_set_reg(dev, REQ_08_SET_GET_AVREG_BIT, 0x1d, 0x00);
285 tm6000_set_reg(dev, TM6010_REQ08_R1E_A_GAIN_DEEMPH_OUT, 0x13);
286 tm6000_set_reg(dev, TM6010_REQ08_R1F_A_TEST_INTF_SEL, 0x00);
287 tm6000_set_reg(dev, TM6010_REQ08_R20_A_TEST_PIN_SEL, 0x00);
288 tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL, 0xf3);
289 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x00);
290 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
291
292 } else { 259 } else {
293 /* Enables soft reset */ 260 /* Enables soft reset */
294 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01); 261 tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01);
@@ -370,7 +337,6 @@ int tm6000_init_digital_mode(struct tm6000_core *dev)
370 tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, 0x28); 337 tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, 0x28);
371 tm6000_set_reg(dev, TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xfc); 338 tm6000_set_reg(dev, TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xfc);
372 tm6000_set_reg(dev, TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0xff); 339 tm6000_set_reg(dev, TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0xff);
373 tm6000_set_reg(dev, TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe);
374 tm6000_read_write_usb(dev, 0xc0, 0x0e, 0x00c2, 0x0008, buf, 2); 340 tm6000_read_write_usb(dev, 0xc0, 0x0e, 0x00c2, 0x0008, buf, 2);
375 printk(KERN_INFO"buf %#x %#x\n", buf[0], buf[1]); 341 printk(KERN_INFO"buf %#x %#x\n", buf[0], buf[1]);
376 } else { 342 } else {
diff --git a/drivers/staging/tm6000/tm6000-stds.c b/drivers/staging/tm6000/tm6000-stds.c
index fe22f427491a..506670282875 100644
--- a/drivers/staging/tm6000/tm6000-stds.c
+++ b/drivers/staging/tm6000/tm6000-stds.c
@@ -28,8 +28,22 @@ struct tm6000_reg_settings {
28 unsigned char value; 28 unsigned char value;
29}; 29};
30 30
31enum tm6000_audio_std {
32 BG_NICAM,
33 BTSC,
34 BG_A2,
35 DK_NICAM,
36 EIAJ,
37 FM_RADIO,
38 I_NICAM,
39 KOREA_A2,
40 L_NICAM,
41};
42
31struct tm6000_std_tv_settings { 43struct tm6000_std_tv_settings {
32 v4l2_std_id id; 44 v4l2_std_id id;
45 enum tm6000_audio_std audio_default_std;
46
33 struct tm6000_reg_settings sif[12]; 47 struct tm6000_reg_settings sif[12];
34 struct tm6000_reg_settings nosif[12]; 48 struct tm6000_reg_settings nosif[12];
35 struct tm6000_reg_settings common[26]; 49 struct tm6000_reg_settings common[26];
@@ -37,12 +51,14 @@ struct tm6000_std_tv_settings {
37 51
38struct tm6000_std_settings { 52struct tm6000_std_settings {
39 v4l2_std_id id; 53 v4l2_std_id id;
54 enum tm6000_audio_std audio_default_std;
40 struct tm6000_reg_settings common[37]; 55 struct tm6000_reg_settings common[37];
41}; 56};
42 57
43static struct tm6000_std_tv_settings tv_stds[] = { 58static struct tm6000_std_tv_settings tv_stds[] = {
44 { 59 {
45 .id = V4L2_STD_PAL_M, 60 .id = V4L2_STD_PAL_M,
61 .audio_default_std = BTSC,
46 .sif = { 62 .sif = {
47 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, 63 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
48 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, 64 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
@@ -96,12 +112,13 @@ static struct tm6000_std_tv_settings tv_stds[] = {
96 112
97 {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc}, 113 {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
98 {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07}, 114 {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
99 {TM6010_REQ08_R05_A_STANDARD_MOD, 0x21}, /* FIXME */
100 {TM6010_REQ07_R3F_RESET, 0x00}, 115 {TM6010_REQ07_R3F_RESET, 0x00},
116
101 {0, 0, 0}, 117 {0, 0, 0},
102 }, 118 },
103 }, { 119 }, {
104 .id = V4L2_STD_PAL_Nc, 120 .id = V4L2_STD_PAL_Nc,
121 .audio_default_std = BTSC,
105 .sif = { 122 .sif = {
106 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, 123 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
107 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, 124 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
@@ -161,6 +178,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
161 }, 178 },
162 }, { 179 }, {
163 .id = V4L2_STD_PAL, 180 .id = V4L2_STD_PAL,
181 .audio_default_std = BG_A2,
164 .sif = { 182 .sif = {
165 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, 183 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
166 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, 184 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
@@ -220,6 +238,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
220 }, 238 },
221 }, { 239 }, {
222 .id = V4L2_STD_SECAM, 240 .id = V4L2_STD_SECAM,
241 .audio_default_std = BG_NICAM,
223 .sif = { 242 .sif = {
224 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, 243 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
225 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, 244 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
@@ -278,6 +297,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
278 }, 297 },
279 }, { 298 }, {
280 .id = V4L2_STD_NTSC, 299 .id = V4L2_STD_NTSC,
300 .audio_default_std = BTSC,
281 .sif = { 301 .sif = {
282 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2}, 302 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
283 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8}, 303 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
@@ -341,6 +361,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
341static struct tm6000_std_settings composite_stds[] = { 361static struct tm6000_std_settings composite_stds[] = {
342 { 362 {
343 .id = V4L2_STD_PAL_M, 363 .id = V4L2_STD_PAL_M,
364 .audio_default_std = BTSC,
344 .common = { 365 .common = {
345 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 366 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
346 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, 367 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
@@ -383,6 +404,7 @@ static struct tm6000_std_settings composite_stds[] = {
383 }, 404 },
384 }, { 405 }, {
385 .id = V4L2_STD_PAL_Nc, 406 .id = V4L2_STD_PAL_Nc,
407 .audio_default_std = BTSC,
386 .common = { 408 .common = {
387 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 409 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
388 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, 410 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
@@ -425,6 +447,7 @@ static struct tm6000_std_settings composite_stds[] = {
425 }, 447 },
426 }, { 448 }, {
427 .id = V4L2_STD_PAL, 449 .id = V4L2_STD_PAL,
450 .audio_default_std = BG_A2,
428 .common = { 451 .common = {
429 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 452 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
430 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, 453 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
@@ -467,6 +490,7 @@ static struct tm6000_std_settings composite_stds[] = {
467 }, 490 },
468 }, { 491 }, {
469 .id = V4L2_STD_SECAM, 492 .id = V4L2_STD_SECAM,
493 .audio_default_std = BG_NICAM,
470 .common = { 494 .common = {
471 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 495 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
472 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, 496 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
@@ -508,6 +532,7 @@ static struct tm6000_std_settings composite_stds[] = {
508 }, 532 },
509 }, { 533 }, {
510 .id = V4L2_STD_NTSC, 534 .id = V4L2_STD_NTSC,
535 .audio_default_std = BTSC,
511 .common = { 536 .common = {
512 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 537 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
513 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4}, 538 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
@@ -554,6 +579,7 @@ static struct tm6000_std_settings composite_stds[] = {
554static struct tm6000_std_settings svideo_stds[] = { 579static struct tm6000_std_settings svideo_stds[] = {
555 { 580 {
556 .id = V4L2_STD_PAL_M, 581 .id = V4L2_STD_PAL_M,
582 .audio_default_std = BTSC,
557 .common = { 583 .common = {
558 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 584 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
559 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, 585 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
@@ -596,6 +622,7 @@ static struct tm6000_std_settings svideo_stds[] = {
596 }, 622 },
597 }, { 623 }, {
598 .id = V4L2_STD_PAL_Nc, 624 .id = V4L2_STD_PAL_Nc,
625 .audio_default_std = BTSC,
599 .common = { 626 .common = {
600 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 627 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
601 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, 628 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
@@ -638,6 +665,7 @@ static struct tm6000_std_settings svideo_stds[] = {
638 }, 665 },
639 }, { 666 }, {
640 .id = V4L2_STD_PAL, 667 .id = V4L2_STD_PAL,
668 .audio_default_std = BG_A2,
641 .common = { 669 .common = {
642 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 670 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
643 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, 671 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
@@ -680,6 +708,7 @@ static struct tm6000_std_settings svideo_stds[] = {
680 }, 708 },
681 }, { 709 }, {
682 .id = V4L2_STD_SECAM, 710 .id = V4L2_STD_SECAM,
711 .audio_default_std = BG_NICAM,
683 .common = { 712 .common = {
684 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 713 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
685 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, 714 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
@@ -721,6 +750,7 @@ static struct tm6000_std_settings svideo_stds[] = {
721 }, 750 },
722 }, { 751 }, {
723 .id = V4L2_STD_NTSC, 752 .id = V4L2_STD_NTSC,
753 .audio_default_std = BTSC,
724 .common = { 754 .common = {
725 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0}, 755 {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
726 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc}, 756 {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
@@ -765,6 +795,136 @@ static struct tm6000_std_settings svideo_stds[] = {
765 }, 795 },
766}; 796};
767 797
798
799static int tm6000_set_audio_std(struct tm6000_core *dev,
800 enum tm6000_audio_std std)
801{
802 switch (std) {
803 case BG_NICAM:
804 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
805 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x11);
806 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
807 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x01);
808 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
809 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
810 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
811 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
812 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
813 break;
814 case BTSC:
815 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
816 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
817 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
818 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x02);
819 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
820 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
821 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
822 tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1, 0xf0);
823 tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2, 0x80);
824 tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1, 0xc0);
825 tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2, 0x80);
826 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
827 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
828 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
829 break;
830 case BG_A2:
831 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
832 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
833 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
834 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x05);
835 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
836 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
837 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
838 tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1, 0xf0);
839 tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2, 0x80);
840 tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1, 0xc0);
841 tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2, 0x80);
842 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
843 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
844 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
845 break;
846 case DK_NICAM:
847 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
848 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
849 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
850 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x06);
851 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
852 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
853 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
854 tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2, 0x0a);
855 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
856 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
857 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
858 break;
859 case EIAJ:
860 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
861 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
862 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
863 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x03);
864 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
865 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
866 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
867 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
868 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
869 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
870 break;
871 case FM_RADIO:
872 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
873 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x01);
874 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
875 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x0c);
876 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x00);
877 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x10);
878 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
879 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
880 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
881 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
882 break;
883 case I_NICAM:
884 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
885 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
886 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
887 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x01);
888 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
889 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
890 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
891 tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2, 0x0a);
892 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
893 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
894 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
895 break;
896 case KOREA_A2:
897 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
898 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
899 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
900 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x04);
901 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
902 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
903 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
904 tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1, 0xf0);
905 tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2, 0x80);
906 tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1, 0xc0);
907 tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2, 0xf0);
908 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
909 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
910 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
911 break;
912 case L_NICAM:
913 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
914 tm6000_set_reg(dev, TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x02);
915 tm6000_set_reg(dev, TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
916 tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD, 0x0a);
917 tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD, 0x06);
918 tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL, 0x08);
919 tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD, 0x91);
920 tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX, 0xfe);
921 tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN, 0x01);
922 tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
923 break;
924 }
925 return 0;
926}
927
768void tm6000_get_std_res(struct tm6000_core *dev) 928void tm6000_get_std_res(struct tm6000_core *dev)
769{ 929{
770 /* Currently, those are the only supported resoltions */ 930 /* Currently, those are the only supported resoltions */
@@ -825,6 +985,8 @@ static int tm6000_set_tv(struct tm6000_core *dev, int pos)
825 rc = tm6000_load_std(dev, tv_stds[pos].common, 985 rc = tm6000_load_std(dev, tv_stds[pos].common,
826 sizeof(tv_stds[pos].common)); 986 sizeof(tv_stds[pos].common));
827 987
988 tm6000_set_audio_std(dev, tv_stds[pos].audio_default_std);
989
828 return rc; 990 return rc;
829} 991}
830 992
@@ -850,6 +1012,8 @@ int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id * norm)
850 rc = tm6000_load_std(dev, svideo_stds[i].common, 1012 rc = tm6000_load_std(dev, svideo_stds[i].common,
851 sizeof(svideo_stds[i]. 1013 sizeof(svideo_stds[i].
852 common)); 1014 common));
1015 tm6000_set_audio_std(dev, svideo_stds[i].audio_default_std);
1016
853 goto ret; 1017 goto ret;
854 } 1018 }
855 } 1019 }
@@ -861,6 +1025,7 @@ int tm6000_set_standard(struct tm6000_core *dev, v4l2_std_id * norm)
861 composite_stds[i].common, 1025 composite_stds[i].common,
862 sizeof(composite_stds[i]. 1026 sizeof(composite_stds[i].
863 common)); 1027 common));
1028 tm6000_set_audio_std(dev, composite_stds[i].audio_default_std);
864 goto ret; 1029 goto ret;
865 } 1030 }
866 } 1031 }
diff --git a/drivers/staging/tm6000/tm6000-video.c b/drivers/staging/tm6000/tm6000-video.c
index a45b012c340e..9304158db6da 100644
--- a/drivers/staging/tm6000/tm6000-video.c
+++ b/drivers/staging/tm6000/tm6000-video.c
@@ -1015,7 +1015,8 @@ static int vidioc_s_std (struct file *file, void *priv, v4l2_std_id *norm)
1015 struct tm6000_fh *fh=priv; 1015 struct tm6000_fh *fh=priv;
1016 struct tm6000_core *dev = fh->dev; 1016 struct tm6000_core *dev = fh->dev;
1017 1017
1018 rc=tm6000_set_standard (dev, norm); 1018 rc = tm6000_set_standard(dev, norm);
1019 rc = tm6000_init_analog_mode(dev);
1019 1020
1020 fh->width = dev->width; 1021 fh->width = dev->width;
1021 fh->height = dev->height; 1022 fh->height = dev->height;
@@ -1292,9 +1293,10 @@ static int tm6000_open(struct file *file)
1292 "active=%d\n",list_empty(&dev->vidq.active)); 1293 "active=%d\n",list_empty(&dev->vidq.active));
1293 1294
1294 /* initialize hardware on analog mode */ 1295 /* initialize hardware on analog mode */
1295 if (dev->mode!=TM6000_MODE_ANALOG) { 1296// if (dev->mode!=TM6000_MODE_ANALOG) {
1296 rc=tm6000_init_analog_mode (dev); 1297// rc = tm6000_set_standard(dev, dev->norm);
1297 if (rc<0) 1298 rc += tm6000_init_analog_mode(dev);
1299 if (rc < 0)
1298 return rc; 1300 return rc;
1299 1301
1300 /* Put all controls at a sane state */ 1302 /* Put all controls at a sane state */
@@ -1302,7 +1304,7 @@ static int tm6000_open(struct file *file)
1302 qctl_regs[i] =tm6000_qctrl[i].default_value; 1304 qctl_regs[i] =tm6000_qctrl[i].default_value;
1303 1305
1304 dev->mode=TM6000_MODE_ANALOG; 1306 dev->mode=TM6000_MODE_ANALOG;
1305 } 1307// }
1306 1308
1307 videobuf_queue_vmalloc_init(&fh->vb_vidq, &tm6000_video_qops, 1309 videobuf_queue_vmalloc_init(&fh->vb_vidq, &tm6000_video_qops,
1308 NULL, &dev->slock, 1310 NULL, &dev->slock,