[alsa-devel] Macbook Air 2,1 - no mic nor main speakers

Reimundo Heluani rheluani at gmail.com
Mon Feb 22 07:30:58 CET 2010


On Sat, 2010-02-06 at 10:27 -0800, Reimundo Heluani wrote:
> Hello list, this came up a year ago and Takashi's answer was "a broken
> bios". I was hoping someone here could point me to documentation to read
> in order to diagnose the problem if indeed is a broken bios. I don't
> want to start randombly reading the driver's code.
> 
> Macbook Air 2,1
> 2.6.32-gentoo-r3 SMP x86_64
> Alsa Driver 1.0.21 libs 1.0.22
> nVidia Corporation MCP79 High Definition Audio (rev b1)
> HDA NVidia at 0x93380000 irq 19
> 00:08.0 0403: 10de:0ac0 (rev b1)  Subsystem: 10de:cb79
> Codec: Realtek ALC889A
> 
> Booting with snd_hda_intel.model=mbp3 get sound on headphones, but not on mainspeakers. The mic never worked.
> 

Hello again, I found out that puting the pin in 0x18 as a PIN_OUT I get
sound in the internal speaker. Currently I can change patch_realtek.c to
load the driver using an "mba21" model and I get sound on the main
speaker. One of the (many) problems I have is that I need to use
something like

{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, (PIN_OUT | AC_PINCTL_VREF_50) } 

otherwise it goes into HiZ and I get no audio. Looking at that
patch_realtek.c I don't see anything similar. Anyway, I don't have a
clue about ALSA, I just started reading the HDA specification and looked
over patch_realtek.c and came up with the small change below to have a
working main speaker. I'd appreciate if you had any suggestion for the
mic or to point me towards the right documentation.

Sincerely, 

R.

*** patch_realtek.c.orig	Sun Feb 21 01:23:58 2010
--- patch_realtek.c	Sun Feb 21 19:42:13 2010
***************
*** 205,210 ****
--- 205,211 ----
  	ALC882_ASUS_A7J,
  	ALC882_ASUS_A7M,
  	ALC885_MACPRO,
+ 	ALC885_MBA21,
  	ALC885_MBP3,
  	ALC885_MB5,
  	ALC885_IMAC24,
***************
*** 6749,6754 ****
--- 6750,6766 ----
  	{ 8, alc882_sixstack_ch8_init },
  };
  
+ /* Macbook Air I have no clue how it works yet */
+ 
+ static struct hda_verb alc885_mba21_init[] = {
+ 	{ 0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, PIN_OUT },
+ 	{ } /* end */
+ };
+ 
+ static struct hda_channel_mode alc885_mba21_ch_modes[1] = {
+ 	{ 2, alc885_mba21_init },
+ };
+ 
  /*
   * macbook pro ALC885 can switch LineIn to LineOut without losing Mic
   */
***************
*** 7020,7025 ****
--- 7032,7045 ----
  	{ } /* end */
  };
  
+ 
+ static struct snd_kcontrol_new alc885_mba21_mixer[] = {
+ 	HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT),
+ 	HDA_BIND_MUTE	("Speaker Playback Switch", 0x0c, 0x02, HDA_OUTPUT),
+ 	{ }
+ };
+ 
+ 
  static struct snd_kcontrol_new alc885_mbp3_mixer[] = {
  	HDA_CODEC_VOLUME("Speaker Playback Volume", 0x0c, 0x00, HDA_OUTPUT),
  	HDA_BIND_MUTE   ("Speaker Playback Switch", 0x0c, 0x02, HDA_INPUT),
***************
*** 7444,7449 ****
--- 7464,7482 ----
  	{ }
  };
  
+ static struct hda_verb alc885_mba21_init_verbs[] = {
+ 	/*Internal Speaker Mixer*/
+ 	{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_ZERO}, 
+     {0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
+ 	{0x0c, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(1)},
+ 	/*Internal Speaker Pin*/
+ 	{0x18, AC_VERB_SET_PIN_WIDGET_CONTROL, (PIN_OUT |
AC_PINCTL_VREF_50) },
+ 	{0x18, AC_VERB_SET_AMP_GAIN_MUTE, AMP_OUT_UNMUTE},
+ 	{0x18, AC_VERB_SET_CONNECT_SEL, 0x00},
+ 
+ 	{ }
+ };
+ 
  /* Macbook Pro rev3 */
  static struct hda_verb alc885_mbp3_init_verbs[] = {
  	/* Front mixer: unmute input/output amp left and right (volume = 0)
*/
***************
*** 7546,7551 ****
--- 7579,7593 ----
  	spec->autocfg.speaker_pins[1] = 0x1a;
  }
  
+ /* Macbook Air don't know how this works */
+ static void alc885_mba21_setup (struct hda_codec *codec)
+ {
+ 	struct alc_spec *spec = codec->spec;
+ 
+ 	spec->autocfg.speaker_pins[0] = 0x18;
+ }
+ 
+ 
  static void alc885_mbp3_setup(struct hda_codec *codec)
  {
  	struct alc_spec *spec = codec->spec;
***************
*** 8737,8742 ****
--- 8779,8785 ----
  	[ALC882_ASUS_A7M]	= "asus-a7m",
  	[ALC885_MACPRO]		= "macpro",
  	[ALC885_MB5]		= "mb5",
+ 	[ALC885_MBA21]		= "mba21",
  	[ALC885_MBP3]		= "mbp3",
  	[ALC885_IMAC24]		= "imac24",
  	[ALC883_3ST_2ch_DIG]	= "3stack-2ch-dig",
***************
*** 8969,8974 ****
--- 9012,9032 ----
  		.input_mux = &alc882_capture_source,
  		.dig_out_nid = ALC882_DIGOUT_NID,
  	},
+ 	[ALC885_MBA21] = {
+ 		.mixers = { alc885_mba21_mixer }, 
+ 		.init_verbs = { alc885_mba21_init_verbs, alc880_gpio1_init_verbs },
+ 		.num_dacs = 2,
+ 		.dac_nids = alc882_dac_nids,
+ 		.hp_nid = 0x04,
+ 		.channel_mode = alc885_mba21_ch_modes,
+ 		.num_channel_mode = ARRAY_SIZE(alc885_mba21_ch_modes),
+ 		.input_mux = &alc882_capture_source,
+ 		.dig_out_nid = ALC882_DIGOUT_NID,
+ 		.dig_in_nid = ALC882_DIGIN_NID,
+ 		.unsol_event = alc_automute_amp_unsol_event,
+ 		.setup = alc885_mba21_setup,
+ 		.init_hook = alc_automute_amp,
+ 	},
  	[ALC885_MBP3] = {
  		.mixers = { alc885_mbp3_mixer, alc882_chmode_mixer },
  		.init_verbs = { alc885_mbp3_init_verbs,



More information about the Alsa-devel mailing list