[alsa-devel] [PATCH] ALSA: HDA: cxt5066 - Use asus model for Asus U50F, select correct SPDIF output

Takashi Iwai tiwai at suse.de
Mon Jan 24 14:16:47 CET 2011


At Mon, 24 Jan 2011 01:59:52 -0500,
Andy Robinson wrote:
> 
> The attached patch adds a quirk to use the newly-added asus model for
> the Asus U50F. It also selects the correct digital outputs based on
> the pin config instead of always using node 0x21, since the Asus U50F
> uses node 0x12 for digital out.

The content changes look almost good to me.
Could you run checkpatch.pl and fix coding-style issues?

Also, put the comment like above into the git changelog itself.


thanks,

Takashi

> [2 0001-ALSA-HDA-Use-asus-model-for-Asus-U50F-select-correct.patch <text/x-patch; US-ASCII (base64)>]
> From b8d44308767f85a815e79fc55474672087f4dec9 Mon Sep 17 00:00:00 2001
> From: Andy Robinson <ajr55555 at gmail.com>
> Date: Mon, 24 Jan 2011 01:19:23 -0500
> Subject: [PATCH 1/1] ALSA: HDA: Use asus model for Asus U50F, select correct SPDIF output
> 
> 
> Signed-off-by: Andy Robinson <ajr55555 at gmail.com>
> 
> diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c
> index 19f0daf..4402784 100644
> --- a/sound/pci/hda/patch_conexant.c
> +++ b/sound/pci/hda/patch_conexant.c
> @@ -85,6 +85,7 @@ struct conexant_spec {
>  	unsigned int auto_mic;
>  	int auto_mic_ext;		/* autocfg.inputs[] index for ext mic */
>  	unsigned int need_dac_fix;
> +	hda_nid_t slave_dig_outs[2];
>  
>  	/* capture */
>  	unsigned int num_adc_nids;
> @@ -353,6 +354,9 @@ static int conexant_build_pcms(struct hda_codec *codec)
>  			info->stream[SNDRV_PCM_STREAM_CAPTURE].nid =
>  				spec->dig_in_nid;
>  		}
> +		if (spec->slave_dig_outs[0]) {
> +			codec->slave_dig_outs = spec->slave_dig_outs;
> +		}
>  	}
>  
>  	return 0;
> @@ -2101,7 +2105,7 @@ static int patch_cxt5051(struct hda_codec *codec)
>  static hda_nid_t cxt5066_dac_nids[1] = { 0x10 };
>  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
> +static hda_nid_t cxt5066_digout_pin_nids[2] = { 0x20, 0x22 };
>  
>  /* 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
> @@ -2623,6 +2627,27 @@ static void cxt5066_olpc_capture_cleanup(struct hda_codec *codec)
>  	spec->recording = 0;
>  }
>  
> +static void conexant_check_dig_outs(struct hda_codec *codec,
> +				    hda_nid_t *dig_pins,
> +				    int num_pins)
> +{
> +	struct conexant_spec *spec = codec->spec;
> +	hda_nid_t *nid_loc = &spec->multiout.dig_out_nid;
> +	int i;
> +
> +	for (i = 0; i < num_pins; i++) {
> +		if (get_defcfg_connect(snd_hda_codec_get_pincfg(codec, *dig_pins)) != AC_JACK_PORT_NONE
> +		    && snd_hda_get_connections(codec, *dig_pins, nid_loc, 1) == 1) {
> +			if (spec->slave_dig_outs[0])
> +				nid_loc++;
> +			else
> +				nid_loc = spec->slave_dig_outs;
> +		}
> +
> +		dig_pins++;
> +	}
> +}
> +
>  static struct hda_input_mux cxt5066_capture_source = {
>  	.num_items = 4,
>  	.items = {
> @@ -3085,8 +3110,9 @@ static struct snd_pci_quirk cxt5066_cfg_tbl[] = {
>  	SND_PCI_QUIRK(0x1028, 0x0402, "Dell Vostro", CXT5066_DELL_VOSTRO),
>  	SND_PCI_QUIRK(0x1028, 0x0408, "Dell Inspiron One 19T", CXT5066_IDEAPAD),
>  	SND_PCI_QUIRK(0x103c, 0x360b, "HP G60", CXT5066_HP_LAPTOP),
> -	SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_HP_LAPTOP),
> +	SND_PCI_QUIRK(0x1043, 0x13f3, "Asus A52J", CXT5066_ASUS),
>  	SND_PCI_QUIRK(0x1043, 0x1643, "Asus K52JU", CXT5066_ASUS),
> +	SND_PCI_QUIRK(0x1043, 0x1993, "Asus U50F", CXT5066_ASUS),
>  	SND_PCI_QUIRK(0x1179, 0xff1e, "Toshiba Satellite C650D", CXT5066_IDEAPAD),
>  	SND_PCI_QUIRK(0x1179, 0xff50, "Toshiba Satellite P500-PSPGSC-01800T", CXT5066_OLPC_XO_1_5),
>  	SND_PCI_QUIRK(0x1179, 0xffe0, "Toshiba Satellite Pro T130-15F", CXT5066_OLPC_XO_1_5),
> @@ -3118,7 +3144,7 @@ static int patch_cxt5066(struct hda_codec *codec)
>  	spec->multiout.max_channels = 2;
>  	spec->multiout.num_dacs = ARRAY_SIZE(cxt5066_dac_nids);
>  	spec->multiout.dac_nids = cxt5066_dac_nids;
> -	spec->multiout.dig_out_nid = CXT5066_SPDIF_OUT;
> +	conexant_check_dig_outs(codec, cxt5066_digout_pin_nids, ARRAY_SIZE(cxt5066_digout_pin_nids));
>  	spec->num_adc_nids = 1;
>  	spec->adc_nids = cxt5066_adc_nids;
>  	spec->capsrc_nids = cxt5066_capsrc_nids;
> @@ -3164,7 +3190,8 @@ static int patch_cxt5066(struct hda_codec *codec)
>  		spec->mixers[spec->num_mixers++] = cxt5066_mixer_master;
>  		spec->mixers[spec->num_mixers++] = cxt5066_mixers;
>  		/* no S/PDIF out */
> -		spec->multiout.dig_out_nid = 0;
> +		if (board_config == CXT5066_HP_LAPTOP)
> +			spec->multiout.dig_out_nid = 0;
>  		/* input source automatically selected */
>  		spec->input_mux = NULL;
>  		spec->port_d_mode = 0;
> -- 
> 1.7.1
> 


More information about the Alsa-devel mailing list