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 <mchehab@xxxxxxxxxx> > > 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 majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html