At Mon, 9 Nov 2009 15:17:24 +0000 (GMT), Daniel Drake wrote: > > Our contacts at Conexant suggested that we reduce the external > microphone bias to 50% in order to center the input signal with > the DC input range of the codec. This is because the microphone > port is DC coupled for potential use with sensors. > > Signed-off-by: Daniel Drake <dsd@xxxxxxxxxx> Although I don't particularly like the dynamic struct array initialization that this patch changes to, its change is pretty small and this is what we'd need at this moment. So I applied it as is for 2.6.32. Thanks! Takashi > > --- > sound/pci/hda/patch_conexant.c | 15 ++++++++++++--- > 1 files changed, 12 insertions(+), 3 deletions(-) > > diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c > index 5d3a25d..ace8898 100644 > --- a/sound/pci/hda/patch_conexant.c > +++ b/sound/pci/hda/patch_conexant.c > @@ -110,6 +110,7 @@ struct conexant_spec { > > unsigned int dell_automute; > unsigned int port_d_mode; > + unsigned char ext_mic_bias; > }; > > static int conexant_playback_pcm_open(struct hda_pcm_stream *hinfo, > @@ -1917,6 +1918,11 @@ static hda_nid_t cxt5066_adc_nids[3] = { 0x14, 0x15, 0x16 }; > static hda_nid_t cxt5066_capsrc_nids[1] = { 0x17 }; > #define CXT5066_SPDIF_OUT 0x21 > > +/* OLPC's microphone port is DC coupled for use with external sensors, > + * therefore we use a 50% mic bias in order to center the input signal with > + * the DC input range of the codec. */ > +#define CXT5066_OLPC_EXT_MIC_BIAS PIN_VREF50 > + > static struct hda_channel_mode cxt5066_modes[1] = { > { 2, NULL }, > }; > @@ -1970,9 +1976,10 @@ static int cxt5066_hp_master_sw_put(struct snd_kcontrol *kcontrol, > /* toggle input of built-in and mic jack appropriately */ > static void cxt5066_automic(struct hda_codec *codec) > { > - static struct hda_verb ext_mic_present[] = { > + struct conexant_spec *spec = codec->spec; > + struct hda_verb ext_mic_present[] = { > /* enable external mic, port B */ > - {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, > + {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, spec->ext_mic_bias}, > > /* switch to external mic input */ > {0x17, AC_VERB_SET_CONNECT_SEL, 0}, > @@ -2225,7 +2232,7 @@ static struct hda_verb cxt5066_init_verbs_olpc[] = { > {0x19, AC_VERB_SET_CONNECT_SEL, 0x00}, /* DAC1 */ > > /* Port B: external microphone */ > - {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, > + {0x1a, AC_VERB_SET_PIN_WIDGET_CONTROL, CXT5066_OLPC_EXT_MIC_BIAS}, > > /* Port C: internal microphone */ > {0x1b, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_VREF80}, > @@ -2343,6 +2350,7 @@ static int patch_cxt5066(struct hda_codec *codec) > spec->input_mux = &cxt5066_capture_source; > > spec->port_d_mode = PIN_HP; > + spec->ext_mic_bias = PIN_VREF80; > > spec->num_init_verbs = 1; > spec->init_verbs[0] = cxt5066_init_verbs; > @@ -2374,6 +2382,7 @@ static int patch_cxt5066(struct hda_codec *codec) > spec->mixers[spec->num_mixers++] = cxt5066_mixer_master_olpc; > spec->mixers[spec->num_mixers++] = cxt5066_mixers; > spec->port_d_mode = 0; > + spec->ext_mic_bias = CXT5066_OLPC_EXT_MIC_BIAS; > > /* no S/PDIF out */ > spec->multiout.dig_out_nid = 0; > -- > 1.6.2.5 > _______________________________________________ Alsa-devel mailing list Alsa-devel@xxxxxxxxxxxxxxxx http://mailman.alsa-project.org/mailman/listinfo/alsa-devel