Hi Mauro

Not so good. Audio with this patch has bad white noise sometimes and
bad quality. I try found better configuration for SECAM-DK.

With my best regards, Dmitry.

> Hi Dmitri,
> 
> IMO, the better is to remove the audio init from tm6000-core and add
> a separate per-standard set of tables.
> 
> I'm enclosing the patch for it. Please check if this won't break for
> your device.
> 
> On all tests I did here with a tm6010 device (HVR 900H), I was only
> able to listen to white noise.
> 
> I'm suspecting that this device uses XC3028 MTS mode (e. g. uses
> xc3028 to decode audio, and just inputs the audio stream from some
> line IN. As the driver is not able yet to handle an audio mux, this
> may explain why I'm not able to receive any audio at all.
> 
> Maybe tm5600 devices may also require (or use) line input entries,
> instead of I2S.
> 
> Could you please check those issues?
> 
> PS.: the PAL/M hunk will probably fail, as I likely applied some
> patches before this one, in order to try to fix it. It should be
> trivial to solve the conflicts.
> 
> ---
> 
> tm6000: Implement audio standard tables
> 
> Implement separate tables for audio standards, associating them with
> the video standards.
> 
> Signed-off-by: Mauro Carvalho Chehab <mche...@redhat.com>
> 
> diff --git a/drivers/staging/tm6000/tm6000-core.c
> b/drivers/staging/tm6000/tm6000-core.c index 57cb69e..9cb2901 100644
> --- a/drivers/staging/tm6000/tm6000-core.c
> +++ b/drivers/staging/tm6000/tm6000-core.c
> @@ -200,6 +200,10 @@ int tm6000_init_analog_mode(struct tm6000_core
> *dev) val &= ~0x40;
>               tm6000_set_reg(dev,
> TM6010_REQ07_RC0_ACTIVE_VIDEO_SOURCE, val); 
> +             tm6000_set_reg(dev,
> TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfc); +
> +#if 0                /* FIXME: VBI is standard-dependent */
> +
>               /* Init teletext */
>               tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01);
>               tm6000_set_reg(dev,
> TM6010_REQ07_R41_TELETEXT_VBI_CODE1, 0x27); @@ -249,44 +253,7 @@ int
> tm6000_init_analog_mode(struct tm6000_core *dev) tm6000_set_reg(dev,
> TM6010_REQ07_R5B_VBI_TELETEXT_DTO0, 0x4c); tm6000_set_reg(dev,
> TM6010_REQ07_R40_TELETEXT_VBI_CODE0, 0x01); tm6000_set_reg(dev,
> TM6010_REQ07_R3F_RESET, 0x00); -
> -
> -             /* Init audio */
> -             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_R04_A_SIF_AMP_CTRL,
> 0xa0);
> -             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> -             tm6000_set_reg(dev, TM6010_REQ08_R07_A_LEFT_VOL,
> 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_R08_A_RIGHT_VOL,
> 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0B_A_ASD_THRES1,
> 0x20);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2,
> 0x12);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0D_A_AMD_THRES,
> 0x20);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1,
> 0xf0);
> -             tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2,
> 0x80);
> -             tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1,
> 0xc0);
> -             tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2,
> 0x80);
> -             tm6000_set_reg(dev, TM6010_REQ08_R12_A_AGC_U, 0x12);
> -             tm6000_set_reg(dev, TM6010_REQ08_R13_A_AGC_ERR_T,
> 0xfe);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R14_A_AGC_GAIN_INIT, 0x20);
> -             tm6000_set_reg(dev, TM6010_REQ08_R15_A_AGC_STEP_THR,
> 0x14);
> -             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> -             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> -             tm6000_set_reg(dev, TM6010_REQ08_R18_A_TR_CTRL,
> 0xa0);
> -             tm6000_set_reg(dev, TM6010_REQ08_R19_A_FH_2FH_GAIN,
> 0x32);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R1A_A_NICAM_SER_MAX, 0x64);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R1B_A_NICAM_SER_MIN, 0x20);
> -             tm6000_set_reg(dev, REQ_08_SET_GET_AVREG_BIT, 0x1c,
> 0x00);
> -             tm6000_set_reg(dev, REQ_08_SET_GET_AVREG_BIT, 0x1d,
> 0x00);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R1E_A_GAIN_DEEMPH_OUT, 0x13);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_R1F_A_TEST_INTF_SEL, 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_R20_A_TEST_PIN_SEL,
> 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_RE4_ADC_IN2_SEL,
> 0xf3);
> -             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x00);
> -             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> -
> +#endif
>       } else {
>               /* Enables soft reset */
>               tm6000_set_reg(dev, TM6010_REQ07_R3F_RESET, 0x01);
> @@ -360,7 +327,6 @@ int tm6000_init_digital_mode(struct tm6000_core
> *dev) tm6000_set_reg(dev, TM6010_REQ07_RFE_POWER_DOWN, 0x28);
>               tm6000_set_reg(dev,
> TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xfc); tm6000_set_reg(dev,
> TM6010_REQ08_RE6_POWER_DOWN_CTRL2, 0xff);
> -             tm6000_set_reg(dev,
> TM6010_REQ08_RF1_AADC_POWER_DOWN, 0xfe); tm6000_read_write_usb(dev,
> 0xc0, 0x0e, 0x00c2, 0x0008, buf, 2); printk(KERN_INFO"buf %#x %#x\n",
> buf[0], buf[1]); } else  {
> diff --git a/drivers/staging/tm6000/tm6000-stds.c
> b/drivers/staging/tm6000/tm6000-stds.c index 33adf6c..e79a72e 100644
> --- a/drivers/staging/tm6000/tm6000-stds.c
> +++ b/drivers/staging/tm6000/tm6000-stds.c
> @@ -28,8 +28,22 @@ struct tm6000_reg_settings {
>       unsigned char value;
>  };
>  
> +enum tm6000_audio_std {
> +     BG_NICAM,
> +     BTSC,
> +     BG_A2,
> +     DK_NICAM,
> +     EIAJ,
> +     FM_RADIO,
> +     I_NICAM,
> +     KOREA_A2,
> +     L_NICAM,
> +};
> +
>  struct tm6000_std_tv_settings {
>       v4l2_std_id id;
> +     enum tm6000_audio_std audio_default_std;
> +
>       struct tm6000_reg_settings sif[12];
>       struct tm6000_reg_settings nosif[12];
>       struct tm6000_reg_settings common[26];
> @@ -37,12 +51,14 @@ struct tm6000_std_tv_settings {
>  
>  struct tm6000_std_settings {
>       v4l2_std_id id;
> +     enum tm6000_audio_std audio_default_std;
>       struct tm6000_reg_settings common[37];
>  };
>  
>  static struct tm6000_std_tv_settings tv_stds[] = {
>       {
>               .id = V4L2_STD_PAL_M,
> +             .audio_default_std = BTSC,
>               .sif = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
> @@ -96,12 +112,14 @@ static struct tm6000_std_tv_settings tv_stds[] =
> { 
>                       {TM6010_REQ07_R04_LUMA_HAGC_CONTROL, 0xdc},
>                       {TM6010_REQ07_R0D_CHROMA_KILL_LEVEL, 0x07},
> -                     {TM6010_REQ08_R05_A_STANDARD_MOD, 0x22},
> +
>                       {TM6010_REQ07_R3F_RESET, 0x00},
> +
>                       {0, 0, 0},
>               },
>       }, {
>               .id = V4L2_STD_PAL_Nc,
> +             .audio_default_std = BTSC,
>               .sif = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
> @@ -161,6 +179,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
>               },
>       }, {
>               .id = V4L2_STD_PAL,
> +             .audio_default_std = BG_A2,
>               .sif = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
> @@ -220,6 +239,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
>               },
>       }, {
>               .id = V4L2_STD_SECAM,
> +             .audio_default_std = BG_NICAM,
>               .sif = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
> @@ -278,6 +298,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
>               },
>       }, {
>               .id = V4L2_STD_NTSC,
> +             .audio_default_std = BTSC,
>               .sif = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf2},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf8},
> @@ -341,6 +362,7 @@ static struct tm6000_std_tv_settings tv_stds[] = {
>  static struct tm6000_std_settings composite_stds[] = {
>       {
>               .id = V4L2_STD_PAL_M,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
> @@ -383,6 +405,7 @@ static struct tm6000_std_settings
> composite_stds[] = { },
>        }, {
>               .id = V4L2_STD_PAL_Nc,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
> @@ -425,6 +448,7 @@ static struct tm6000_std_settings
> composite_stds[] = { },
>       }, {
>               .id = V4L2_STD_PAL,
> +             .audio_default_std = BG_A2,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
> @@ -467,6 +491,7 @@ static struct tm6000_std_settings
> composite_stds[] = { },
>        }, {
>               .id = V4L2_STD_SECAM,
> +             .audio_default_std = BG_NICAM,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
> @@ -508,6 +533,7 @@ static struct tm6000_std_settings
> composite_stds[] = { },
>       }, {
>               .id = V4L2_STD_NTSC,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xf4},
> @@ -554,6 +580,7 @@ static struct tm6000_std_settings
> composite_stds[] = { static struct tm6000_std_settings svideo_stds[]
> = { {
>               .id = V4L2_STD_PAL_M,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
> @@ -596,6 +623,7 @@ static struct tm6000_std_settings svideo_stds[] =
> { },
>       }, {
>               .id = V4L2_STD_PAL_Nc,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
> @@ -638,6 +666,7 @@ static struct tm6000_std_settings svideo_stds[] =
> { },
>       }, {
>               .id = V4L2_STD_PAL,
> +             .audio_default_std = BG_A2,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
> @@ -680,6 +709,7 @@ static struct tm6000_std_settings svideo_stds[] =
> { },
>        }, {
>               .id = V4L2_STD_SECAM,
> +             .audio_default_std = BG_NICAM,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
> @@ -721,6 +751,7 @@ static struct tm6000_std_settings svideo_stds[] =
> { },
>       }, {
>               .id = V4L2_STD_NTSC,
> +             .audio_default_std = BTSC,
>               .common = {
>                       {TM6010_REQ08_RE2_POWER_DOWN_CTRL1, 0xf0},
>                       {TM6010_REQ08_RE3_ADC_IN1_SEL, 0xfc},
> @@ -765,6 +796,136 @@ static struct tm6000_std_settings svideo_stds[]
> = { },
>  };
>  
> +
> +static int tm6000_set_audio_std(struct tm6000_core *dev,
> +                             enum tm6000_audio_std std)
> +{
> +     switch (std) {
> +     case BG_NICAM:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x11);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case BTSC:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x02);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1,
> 0xf0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2,
> 0x80);
> +             tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1,
> 0xc0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2,
> 0x80);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case BG_A2:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x05);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1,
> 0xf0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2,
> 0x80);
> +             tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1,
> 0xc0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2,
> 0x80);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case DK_NICAM:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2,
> 0x0a);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case EIAJ:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x03);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case FM_RADIO:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x01);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x0c);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x10);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case I_NICAM:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0C_A_ASD_THRES2,
> 0x0a);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case KOREA_A2:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x04);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x04);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0E_A_MONO_THRES1,
> 0xf0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0F_A_MONO_THRES2,
> 0x80);
> +             tm6000_set_reg(dev, TM6010_REQ08_R10_A_MUTE_THRES1,
> 0xc0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R11_A_MUTE_THRES2,
> 0xf0);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     case L_NICAM:
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x00);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R02_A_FIX_GAIN_CTRL, 0x02);
> +             tm6000_set_reg(dev,
> TM6010_REQ08_R03_A_AUTO_GAIN_CTRL, 0x00);
> +             tm6000_set_reg(dev, TM6010_REQ08_R05_A_STANDARD_MOD,
> 0x0a);
> +             tm6000_set_reg(dev, TM6010_REQ08_R06_A_SOUND_MOD,
> 0x06);
> +             tm6000_set_reg(dev, TM6010_REQ08_R09_A_MAIN_VOL,
> 0x08);
> +             tm6000_set_reg(dev, TM6010_REQ08_R0A_A_I2S_MOD,
> 0x91);
> +             tm6000_set_reg(dev, TM6010_REQ08_R16_A_AGC_GAIN_MAX,
> 0xfe);
> +             tm6000_set_reg(dev, TM6010_REQ08_R17_A_AGC_GAIN_MIN,
> 0x01);
> +             tm6000_set_reg(dev, TM6010_REQ08_R01_A_INIT, 0x80);
> +             break;
> +     }
> +     return 0;
> +}
> +
>  void tm6000_get_std_res(struct tm6000_core *dev)
>  {
>       /* Currently, those are the only supported resoltions */
> @@ -825,6 +986,8 @@ static int tm6000_set_tv(struct tm6000_core *dev,
> int pos) rc = tm6000_load_std(dev, tv_stds[pos].common,
>                            sizeof(tv_stds[pos].common));
>  
> +     tm6000_set_audio_std(dev, tv_stds[pos].audio_default_std);
> +
>       return rc;
>  }
>  
> @@ -850,6 +1013,8 @@ int tm6000_set_standard(struct tm6000_core *dev,
> v4l2_std_id * norm) rc = tm6000_load_std(dev, svideo_stds[i].common,
>                                                    sizeof(svideo_stds[i].
>                                                           common));
> +                             tm6000_set_audio_std(dev,
> svideo_stds[i].audio_default_std); +
>                               goto ret;
>                       }
>               }
> @@ -861,6 +1026,7 @@ int tm6000_set_standard(struct tm6000_core *dev,
> v4l2_std_id * norm) composite_stds[i].common,
>                                                    sizeof(composite_stds[i].
>                                                           common));
> +                             tm6000_set_audio_std(dev,
> composite_stds[i].audio_default_std); goto ret;
>                       }
>               }
> diff --git a/drivers/staging/tm6000/tm6000-video.c
> b/drivers/staging/tm6000/tm6000-video.c index a45b012..9304158 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) struct tm6000_fh   *fh=priv;
>       struct tm6000_core *dev = fh->dev;
>  
> -     rc=tm6000_set_standard (dev, norm);
> +     rc = tm6000_set_standard(dev, norm);
> +     rc = tm6000_init_analog_mode(dev);
>  
>       fh->width  = dev->width;
>       fh->height = dev->height;
> @@ -1292,9 +1293,10 @@ static int tm6000_open(struct file *file)
>                               "active=%d\n",list_empty(&dev->vidq.active));
>  
>       /* initialize hardware on analog mode */
> -     if (dev->mode!=TM6000_MODE_ANALOG) {
> -             rc=tm6000_init_analog_mode (dev);
> -             if (rc<0)
> +//   if (dev->mode!=TM6000_MODE_ANALOG) {
> +//           rc = tm6000_set_standard(dev, dev->norm);
> +             rc += tm6000_init_analog_mode(dev);
> +             if (rc < 0)
>                       return rc;
>  
>               /* Put all controls at a sane state */
> @@ -1302,7 +1304,7 @@ static int tm6000_open(struct file *file)
>                       qctl_regs[i] =tm6000_qctrl[i].default_value;
>  
>               dev->mode=TM6000_MODE_ANALOG;
> -     }
> +//   }
>  
>       videobuf_queue_vmalloc_init(&fh->vb_vidq, &tm6000_video_qops,
>                       NULL, &dev->slock,
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to