[alsa-devel] [PATCH] hda: Mic in as output changes

Matthew Ranostay mranostay at embeddedalley.com
Wed Jan 30 14:50:05 CET 2008


Takashi Iwai wrote:
> At Tue, 29 Jan 2008 17:41:18 -0500,
> Matthew Ranostay wrote:
>> Some laptop has an internal analog microphone that is 'fixed'. This patch prevents creating a 'Mic In as Output' switch for
>> ports that can't be outputs.
>>
>> Signed-off-by: Matthew Ranostay <mranostay at embeddedalley.com>
> 
> This patch causes a compile warning:
> 
>   CC [M]  pci/hda/patch_sigmatel.o
> pci/hda/patch_sigmatel.c:293:
> warning: stac927x_dac_nids defined but not used
> 
> Could you fix this?
> 
> 
> thanks,
> 
> Takashi
> 
>> ---
>> diff -r ec0316a4d108 pci/hda/patch_sigmatel.c
>> --- a/pci/hda/patch_sigmatel.c	Tue Jan 29 15:28:44 2008 +0100
>> +++ b/pci/hda/patch_sigmatel.c	Tue Jan 29 17:33:58 2008 -0500
>> @@ -288,6 +288,10 @@ static hda_nid_t stac927x_adc_nids[3] = 
>>  
>>  static hda_nid_t stac927x_mux_nids[3] = {
>>          0x15, 0x16, 0x17
>> +};
>> +
>> +static hda_nid_t stac927x_dac_nids[5] = {
>> +	0x02, 0x03, 0x04, 0x05, 0x06
>>  };
>>  
>>  static hda_nid_t stac927x_dmux_nids[1] = {
>> @@ -2283,15 +2287,23 @@ static int stac92xx_auto_create_multi_ou
>>  	}
>>  
>>  	if (spec->mic_switch) {
>> +		unsigned int def_conf;
>>  		nid = cfg->input_pins[AUTO_PIN_MIC];
>> -		pincap = snd_hda_param_read(codec, nid,
>> -						AC_PAR_PIN_CAP);
>> -		if (pincap & AC_PINCAP_OUT) {
>> -			err = stac92xx_add_control(spec,
>> -				STAC_CTL_WIDGET_IO_SWITCH,
>> -				"Mic as Output Switch", (nid << 8) | 1);
>> -			if (err < 0)
>> -				return err;
>> +		def_conf = snd_hda_codec_read(codec, nid, 0,
>> +						AC_VERB_GET_CONFIG_DEFAULT, 0);
>> +
>> +		/* some laptops have an internal analog microphone
>> + 		 * which can't be used as a output */
>> +		if (get_defcfg_connect(def_conf) != AC_JACK_PORT_FIXED) {
>> +			pincap = snd_hda_param_read(codec, nid,
>> +							AC_PAR_PIN_CAP);
>> +			if (pincap & AC_PINCAP_OUT) {
>> +				err = stac92xx_add_control(spec,
>> +					STAC_CTL_WIDGET_IO_SWITCH,
>> +					"Mic as Output Switch", (nid << 8) | 1);
>> +				if (err < 0)
>> +					return err;
>> +			}
>>  		}
>>  	}
>>  
>>
> 

Ooops patch of another patch got merged in this.
Here it is cleaned up.

---
diff -r 86c8c0a82bb9 pci/hda/patch_sigmatel.c
--- a/pci/hda/patch_sigmatel.c	Wed Jan 30 11:52:33 2008 +0100
+++ b/pci/hda/patch_sigmatel.c	Wed Jan 30 08:43:04 2008 -0500
@@ -2283,15 +2283,23 @@ static int stac92xx_auto_create_multi_ou
 	}
 
 	if (spec->mic_switch) {
+		unsigned int def_conf;
 		nid = cfg->input_pins[AUTO_PIN_MIC];
-		pincap = snd_hda_param_read(codec, nid,
-						AC_PAR_PIN_CAP);
-		if (pincap & AC_PINCAP_OUT) {
-			err = stac92xx_add_control(spec,
-				STAC_CTL_WIDGET_IO_SWITCH,
-				"Mic as Output Switch", (nid << 8) | 1);
-			if (err < 0)
-				return err;
+		def_conf = snd_hda_codec_read(codec, nid, 0,
+						AC_VERB_GET_CONFIG_DEFAULT, 0);
+
+		/* some laptops have an internal analog microphone
+ 		 * which can't be used as a output */
+		if (get_defcfg_connect(def_conf) != AC_JACK_PORT_FIXED) {
+			pincap = snd_hda_param_read(codec, nid,
+							AC_PAR_PIN_CAP);
+			if (pincap & AC_PINCAP_OUT) {
+				err = stac92xx_add_control(spec,
+					STAC_CTL_WIDGET_IO_SWITCH,
+					"Mic as Output Switch", (nid << 8) | 1);
+				if (err < 0)
+					return err;
+			}
 		}
 	}


More information about the Alsa-devel mailing list