[PATCH] ALSA: hda - Tweak OLPC XO-1.5 microphone bias
Takashi Iwai
tiwai at suse.de
Tue Nov 10 02:41:35 EST 2009
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 at laptop.org>
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
>
More information about the Devel
mailing list