All of lore.kernel.org
 help / color / mirror / Atom feed
* Re: [PATCH] hda: Added new IDT codec family
  2007-11-05 15:06 [PATCH] hda: Added new IDT codec family Matthew Ranostay
@ 2007-11-05 12:30 ` Takashi Iwai
  2007-11-05 15:54   ` Maxim Levitsky
  2007-11-05 17:10   ` Matthew Ranostay
  0 siblings, 2 replies; 5+ messages in thread
From: Takashi Iwai @ 2007-11-05 12:30 UTC (permalink / raw)
  To: Matthew Ranostay; +Cc: alsa-devel

At Mon, 05 Nov 2007 10:06:57 -0500,
Matthew Ranostay wrote:
> 
> diff -r 3e1a17f8baca pci/hda/hda_codec.h
> --- a/pci/hda/hda_codec.h	Wed Oct 31 17:36:20 2007 +0100
> +++ b/pci/hda/hda_codec.h	Sat Nov 03 22:55:14 2007 -0500
> @@ -92,6 +92,8 @@ enum {
>   */
>  #define AC_VERB_SET_STREAM_FORMAT		0x200
>  #define AC_VERB_SET_AMP_GAIN_MUTE		0x300
> +#define AC_VERB_SET_RIGHT_AMP_IN_MUTE	0x350
> +#define AC_VERB_SET_LEFT_AMP_IN_MUTE	0x360

Usually we pass the values for left or right bits in the parameter
value (AC_AMP_SET_LEFT and AC_AMP_SET_RIGHT) instead of the verb
value.  So, no need to redefine them.

>  #define AC_VERB_SET_PROC_COEF			0x400
>  #define AC_VERB_SET_COEF_INDEX			0x500
>  #define AC_VERB_SET_CONNECT_SEL			0x701
> 
> diff -r 3e1a17f8baca pci/hda/patch_sigmatel.c
> --- a/pci/hda/patch_sigmatel.c	Wed Oct 31 17:36:20 2007 +0100
> +++ b/pci/hda/patch_sigmatel.c	Mon Nov 05 09:34:05 2007 -0500
> @@ -62,6 +62,11 @@ enum {
>  };
>  
>  enum {
> +	STAC_92HD71BXX_REF,
> +	STAC_92HD71BXX_MODELS
> +};
> +
> +enum {
>  	STAC_925x_REF,
>  	STAC_M2_2,
>  	STAC_MA6,
> @@ -172,6 +177,23 @@ static hda_nid_t stac9200_dac_nids[1] = 
>          0x02,
>  };
>  
> +static hda_nid_t stac92hd71bxx_adc_nids[2] = {
> +		0x12, 0x13,
> +};
> +
> +static hda_nid_t stac92hd71bxx_mux_nids[2] = {
> +		0x1a, 0x1b
> +};
> +
> +static hda_nid_t stac92hd71bxx_dac_nids[2] = {
> +		0x10, /*0x11, */
> +};
> +
> +#define STAC92HD71BXX_NUM_DMICS	2
> +static hda_nid_t stac92hd71bxx_dmic_nids[STAC92HD71BXX_NUM_DMICS + 1] = {
> +		0x18, 0x19, 0
> +};

Wrong indentations.
Try to run $linux_kernel/scripts/checkpatch.pl.  You'll find other
minor coding-style issues.

> +
>  static hda_nid_t stac925x_adc_nids[1] = {
>          0x03,
>  };
> @@ -236,6 +258,11 @@ static hda_nid_t stac922x_pin_nids[10] =
>  static hda_nid_t stac922x_pin_nids[10] = {
>  	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
>  	0x0f, 0x10, 0x11, 0x15, 0x1b,
> +};
> +
> +static hda_nid_t stac92hd71bxx_pin_nids[10] = {
> +	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
> +	0x0f, 0x14, 0x18, 0x19, 0x1e,
>  };
>  
>  static hda_nid_t stac927x_pin_nids[14] = {
> @@ -393,6 +420,25 @@ static struct hda_verb stac9200_eapd_ini
>  	/* set dac0mux for dac converter */
>  	{0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
>  	{0x08, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
> +	{}
> +};
> +
> +static struct hda_verb stac92hd71bxx_core_init[] = {
> +	/* set master volume and direct control */
> +	{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
> +	/* unmute right and left channels for node 0x0a */
> +	{ 0x0a, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
> +	{ 0x0a, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},

The below would do the same job with a single line:
    { 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) }


> +	/* connect headphone jack to dac1 */
> +	{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
> +	/* unmute right and left channels for node 0x0d */
> +	{ 0x0d, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
> +	{ 0x0d, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
> +	/* unmute right and left channels for node 0x0f */
> +	{ 0x0f, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
> +	{ 0x0f, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
> +	/* unmute mono out node */
> +	{ 0x14, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
>  	{}
>  };

Ditto.


Thanks,

Takashi

^ permalink raw reply	[flat|nested] 5+ messages in thread

* [PATCH] hda: Added new IDT codec family
@ 2007-11-05 15:06 Matthew Ranostay
  2007-11-05 12:30 ` Takashi Iwai
  0 siblings, 1 reply; 5+ messages in thread
From: Matthew Ranostay @ 2007-11-05 15:06 UTC (permalink / raw)
  To: alsa-devel, Takashi Iwai

[-- Attachment #1: Type: text/plain, Size: 128 bytes --]

Added initial support for the STAC92HD71BXX family of codecs.
---
Signed-off-by: Matthew Ranostay <mranostay@embeddedalley.com>

[-- Attachment #2: stac92hd71bxx.patch --]
[-- Type: text/plain, Size: 6694 bytes --]

diff -r 3e1a17f8baca pci/hda/hda_codec.h
--- a/pci/hda/hda_codec.h	Wed Oct 31 17:36:20 2007 +0100
+++ b/pci/hda/hda_codec.h	Sat Nov 03 22:55:14 2007 -0500
@@ -92,6 +92,8 @@ enum {
  */
 #define AC_VERB_SET_STREAM_FORMAT		0x200
 #define AC_VERB_SET_AMP_GAIN_MUTE		0x300
+#define AC_VERB_SET_RIGHT_AMP_IN_MUTE	0x350
+#define AC_VERB_SET_LEFT_AMP_IN_MUTE	0x360
 #define AC_VERB_SET_PROC_COEF			0x400
 #define AC_VERB_SET_COEF_INDEX			0x500
 #define AC_VERB_SET_CONNECT_SEL			0x701
diff -r 3e1a17f8baca pci/hda/patch_sigmatel.c
--- a/pci/hda/patch_sigmatel.c	Wed Oct 31 17:36:20 2007 +0100
+++ b/pci/hda/patch_sigmatel.c	Mon Nov 05 09:34:05 2007 -0500
@@ -62,6 +62,11 @@ enum {
 };
 
 enum {
+	STAC_92HD71BXX_REF,
+	STAC_92HD71BXX_MODELS
+};
+
+enum {
 	STAC_925x_REF,
 	STAC_M2_2,
 	STAC_MA6,
@@ -172,6 +177,23 @@ static hda_nid_t stac9200_dac_nids[1] = 
         0x02,
 };
 
+static hda_nid_t stac92hd71bxx_adc_nids[2] = {
+		0x12, 0x13,
+};
+
+static hda_nid_t stac92hd71bxx_mux_nids[2] = {
+		0x1a, 0x1b
+};
+
+static hda_nid_t stac92hd71bxx_dac_nids[2] = {
+		0x10, /*0x11, */
+};
+
+#define STAC92HD71BXX_NUM_DMICS	2
+static hda_nid_t stac92hd71bxx_dmic_nids[STAC92HD71BXX_NUM_DMICS + 1] = {
+		0x18, 0x19, 0
+};
+
 static hda_nid_t stac925x_adc_nids[1] = {
         0x03,
 };
@@ -236,6 +258,11 @@ static hda_nid_t stac922x_pin_nids[10] =
 static hda_nid_t stac922x_pin_nids[10] = {
 	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
 	0x0f, 0x10, 0x11, 0x15, 0x1b,
+};
+
+static hda_nid_t stac92hd71bxx_pin_nids[10] = {
+	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+	0x0f, 0x14, 0x18, 0x19, 0x1e,
 };
 
 static hda_nid_t stac927x_pin_nids[14] = {
@@ -393,6 +420,25 @@ static struct hda_verb stac9200_eapd_ini
 	/* set dac0mux for dac converter */
 	{0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
 	{0x08, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
+	{}
+};
+
+static struct hda_verb stac92hd71bxx_core_init[] = {
+	/* set master volume and direct control */
+	{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
+	/* unmute right and left channels for node 0x0a */
+	{ 0x0a, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
+	{ 0x0a, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
+	/* connect headphone jack to dac1 */
+	{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
+	/* unmute right and left channels for node 0x0d */
+	{ 0x0d, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
+	{ 0x0d, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
+	/* unmute right and left channels for node 0x0f */
+	{ 0x0f, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
+	{ 0x0f, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
+	/* unmute mono out node */
+	{ 0x14, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
 	{}
 };
 
@@ -480,6 +526,21 @@ static struct snd_kcontrol_new stac9200_
 	HDA_CODEC_VOLUME("Capture Volume", 0x0a, 0, HDA_OUTPUT),
 	HDA_CODEC_MUTE("Capture Switch", 0x0a, 0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME("Capture Mux Volume", 0x0c, 0, HDA_OUTPUT),
+	{ } /* end */
+};
+
+static struct snd_kcontrol_new stac92hd71bxx_mixer[] = {
+	STAC_DIGITAL_INPUT_SOURCE(1),
+	STAC_INPUT_SOURCE(2),
+	STAC_VOLKNOB(0x28),
+
+	/* hardware gain controls */
+	HDA_CODEC_VOLUME("Digital Mic 1 Volume", 0x18, 0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("Digital Mic 2 Volume", 0x19, 0, HDA_OUTPUT),
+	
+	HDA_CODEC_VOLUME("Capture Volume", 0x1c, 0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("Capture Switch", 0x1c, 0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("Capture Mux Volume", 0x1a, 0, HDA_OUTPUT),
 	{ } /* end */
 };
 
@@ -835,6 +896,27 @@ static struct snd_pci_quirk stac925x_cfg
 	SND_PCI_QUIRK(0x107b, 0x0461, "Gateway NX560XL", STAC_MA6),
 	SND_PCI_QUIRK(0x107b, 0x0681, "Gateway NX860", STAC_PA6),
 	SND_PCI_QUIRK(0x1002, 0x437b, "Gateway MX6453", STAC_M2_2),
+	{} /* terminator */
+};
+
+static unsigned int ref92hd71bxx_pin_configs[10] = {
+	0x02214030, 0x02a19040, 0x01a19020, 0x01014010,
+	0x0181302e, 0x01114010, 0x01a19020, 0x90a000f0,
+	0x90a000f0, 0x01452050,
+};
+
+static unsigned int *stac92hd71bxx_brd_tbl[STAC_92HD71BXX_MODELS] = {
+	[STAC_92HD71BXX_REF] = ref92hd71bxx_pin_configs,
+};
+
+static const char *stac92hd71bxx_models[STAC_92HD71BXX_MODELS] = {
+	[STAC_92HD71BXX_REF] = "ref",
+};
+
+static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
+	/* SigmaTel reference board */
+	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,
+		      "DFI LanParty", STAC_92HD71BXX_REF),
 	{} /* terminator */
 };
 
@@ -2614,6 +2696,77 @@ static int patch_stac925x(struct hda_cod
 
 	return 0;
 }
+
+static int patch_stac92hd71bxx(struct hda_codec *codec) {
+	struct sigmatel_spec *spec;
+	int err = 0;
+
+	spec  = kzalloc(sizeof(*spec), GFP_KERNEL);
+	if (spec == NULL)
+		return -ENOMEM;
+	
+	codec->spec = spec;
+	spec->num_pins = ARRAY_SIZE(stac92hd71bxx_pin_nids);
+	spec->pin_nids = stac92hd71bxx_pin_nids;
+
+	spec->board_config = snd_hda_check_board_config(codec, STAC_92HD71BXX_MODELS,
+    							stac92hd71bxx_models,
+								stac92hd71bxx_cfg_tbl);
+again:
+	if (spec->board_config < 0) {
+		snd_printdd(KERN_INFO "hda_codec: Unknown model for STAC92HD71BXX, "
+			"using BIOS defaults\n");
+		err = stac92xx_save_bios_config_regs(codec);
+		if (err < 0) {
+			stac92xx_free(codec);
+			return err;
+		}
+		spec->pin_configs = spec->bios_pin_configs;
+	}
+	else {
+		spec->pin_configs = stac92hd71bxx_brd_tbl[spec->board_config];
+		stac92xx_set_config_regs(codec);
+	}
+	
+	spec->gpio_mask = spec->gpio_data = 0x00000001; /* GPIO0 High = EAPD */
+	stac92xx_enable_gpio_mask(codec);
+	
+	spec->init = stac92hd71bxx_core_init;
+	spec->mixer = stac92hd71bxx_mixer;
+
+	spec->mux_nids = stac92hd71bxx_mux_nids;
+	spec->adc_nids = stac92hd71bxx_adc_nids;	
+	spec->dmic_nids = stac92hd71bxx_dmic_nids;
+	spec->dmux_nid = 0x1c;
+
+	spec->num_muxes = ARRAY_SIZE(stac92hd71bxx_mux_nids);
+	spec->num_adcs = ARRAY_SIZE(stac92hd71bxx_adc_nids);
+	spec->num_dmics = STAC92HD71BXX_NUM_DMICS;
+
+	spec->multiout.num_dacs = 2;
+	spec->multiout.hp_nid = 0x11;
+	spec->multiout.dac_nids = stac92hd71bxx_dac_nids;
+
+	err = stac92xx_parse_auto_config(codec, 0x21, 0x23);
+	if (!err) {
+		if (spec->board_config < 0) {
+			printk(KERN_WARNING "hda_codec: No auto-config is "
+			       "available, default to model=ref\n");
+			spec->board_config = STAC_92HD71BXX_REF;
+			goto again;
+		}
+		err = -EINVAL;
+	}
+	
+	if (err < 0) {
+		stac92xx_free(codec);
+		return err;
+	}
+	
+	codec->patch_ops = stac92xx_patch_ops;
+	
+	return 0;
+};
 
 static int patch_stac922x(struct hda_codec *codec)
 {
@@ -3176,5 +3329,7 @@ struct hda_codec_preset snd_hda_preset_s
  	{ .id = 0x838476a5, .name = "STAC9255D", .patch = patch_stac9205 },
  	{ .id = 0x838476a6, .name = "STAC9254", .patch = patch_stac9205 },
  	{ .id = 0x838476a7, .name = "STAC9254D", .patch = patch_stac9205 },
+	{ .id = 0x111d76b0, .name = "STAC92HD71BXX", .patch = patch_stac92hd71bxx },
 	{} /* terminator */
 };
+

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hda: Added new IDT codec family
  2007-11-05 12:30 ` Takashi Iwai
@ 2007-11-05 15:54   ` Maxim Levitsky
  2007-11-05 17:10   ` Matthew Ranostay
  1 sibling, 0 replies; 5+ messages in thread
From: Maxim Levitsky @ 2007-11-05 15:54 UTC (permalink / raw)
  To: alsa-devel; +Cc: Takashi Iwai, Matthew Ranostay

On Monday 05 November 2007 14:30:07 Takashi Iwai wrote:
> At Mon, 05 Nov 2007 10:06:57 -0500,
> Matthew Ranostay wrote:
> > 
> > diff -r 3e1a17f8baca pci/hda/hda_codec.h
> > --- a/pci/hda/hda_codec.h	Wed Oct 31 17:36:20 2007 +0100
> > +++ b/pci/hda/hda_codec.h	Sat Nov 03 22:55:14 2007 -0500
> > @@ -92,6 +92,8 @@ enum {
> >   */
> >  #define AC_VERB_SET_STREAM_FORMAT		0x200
> >  #define AC_VERB_SET_AMP_GAIN_MUTE		0x300
> > +#define AC_VERB_SET_RIGHT_AMP_IN_MUTE	0x350
> > +#define AC_VERB_SET_LEFT_AMP_IN_MUTE	0x360
> 
> Usually we pass the values for left or right bits in the parameter
> value (AC_AMP_SET_LEFT and AC_AMP_SET_RIGHT) instead of the verb
> value.  So, no need to redefine them.
> 
> >  #define AC_VERB_SET_PROC_COEF			0x400
Any chance to see data-sheets of newer IDT chips?
There seems to be nothing on the web.
Are they available to general public?

For example STAC9872 has very limited support due to no datasheets.
 
>+static struct snd_kcontrol_new stac92hd71bxx_mixer[] = {
>+       STAC_DIGITAL_INPUT_SOURCE(1),
>+       STAC_INPUT_SOURCE(2),
>+       STAC_VOLKNOB(0x28),
>+
>+       /* hardware gain controls */
>+       HDA_CODEC_VOLUME("Digital Mic 1 Volume", 0x18, 0, HDA_OUTPUT),
>+       HDA_CODEC_VOLUME("Digital Mic 2 Volume", 0x19, 0, HDA_OUTPUT),
>+       
>+       HDA_CODEC_VOLUME("Capture Volume", 0x1c, 0, HDA_OUTPUT),
>+       HDA_CODEC_MUTE("Capture Switch", 0x1c, 0, HDA_OUTPUT),
>+       HDA_CODEC_VOLUME("Capture Mux Volume", 0x1a, 0, HDA_OUTPUT),
>        { } /* end */

The chip has two ADCs, but why just one "Capture Volume" ?
No analog loopback?

Best regards,
	Maxim Levitsky

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hda: Added new IDT codec family
  2007-11-05 12:30 ` Takashi Iwai
  2007-11-05 15:54   ` Maxim Levitsky
@ 2007-11-05 17:10   ` Matthew Ranostay
  2007-11-06  7:57     ` Takashi Iwai
  1 sibling, 1 reply; 5+ messages in thread
From: Matthew Ranostay @ 2007-11-05 17:10 UTC (permalink / raw)
  To: Takashi Iwai, alsa-devel

[-- Attachment #1: Type: text/plain, Size: 3581 bytes --]

Takashi Iwai wrote:
> At Mon, 05 Nov 2007 10:06:57 -0500,
> Matthew Ranostay wrote:
>   
>> diff -r 3e1a17f8baca pci/hda/hda_codec.h
>> --- a/pci/hda/hda_codec.h	Wed Oct 31 17:36:20 2007 +0100
>> +++ b/pci/hda/hda_codec.h	Sat Nov 03 22:55:14 2007 -0500
>> @@ -92,6 +92,8 @@ enum {
>>   */
>>  #define AC_VERB_SET_STREAM_FORMAT		0x200
>>  #define AC_VERB_SET_AMP_GAIN_MUTE		0x300
>> +#define AC_VERB_SET_RIGHT_AMP_IN_MUTE	0x350
>> +#define AC_VERB_SET_LEFT_AMP_IN_MUTE	0x360
>>     
>
> Usually we pass the values for left or right bits in the parameter
> value (AC_AMP_SET_LEFT and AC_AMP_SET_RIGHT) instead of the verb
> value.  So, no need to redefine them.
>
>   
>>  #define AC_VERB_SET_PROC_COEF			0x400
>>  #define AC_VERB_SET_COEF_INDEX			0x500
>>  #define AC_VERB_SET_CONNECT_SEL			0x701
>>
>> diff -r 3e1a17f8baca pci/hda/patch_sigmatel.c
>> --- a/pci/hda/patch_sigmatel.c	Wed Oct 31 17:36:20 2007 +0100
>> +++ b/pci/hda/patch_sigmatel.c	Mon Nov 05 09:34:05 2007 -0500
>> @@ -62,6 +62,11 @@ enum {
>>  };
>>  
>>  enum {
>> +	STAC_92HD71BXX_REF,
>> +	STAC_92HD71BXX_MODELS
>> +};
>> +
>> +enum {
>>  	STAC_925x_REF,
>>  	STAC_M2_2,
>>  	STAC_MA6,
>> @@ -172,6 +177,23 @@ static hda_nid_t stac9200_dac_nids[1] = 
>>          0x02,
>>  };
>>  
>> +static hda_nid_t stac92hd71bxx_adc_nids[2] = {
>> +		0x12, 0x13,
>> +};
>> +
>> +static hda_nid_t stac92hd71bxx_mux_nids[2] = {
>> +		0x1a, 0x1b
>> +};
>> +
>> +static hda_nid_t stac92hd71bxx_dac_nids[2] = {
>> +		0x10, /*0x11, */
>> +};
>> +
>> +#define STAC92HD71BXX_NUM_DMICS	2
>> +static hda_nid_t stac92hd71bxx_dmic_nids[STAC92HD71BXX_NUM_DMICS + 1] = {
>> +		0x18, 0x19, 0
>> +};
>>     
>
> Wrong indentations.
> Try to run $linux_kernel/scripts/checkpatch.pl.  You'll find other
> minor coding-style issues.
>
>   
>> +
>>  static hda_nid_t stac925x_adc_nids[1] = {
>>          0x03,
>>  };
>> @@ -236,6 +258,11 @@ static hda_nid_t stac922x_pin_nids[10] =
>>  static hda_nid_t stac922x_pin_nids[10] = {
>>  	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
>>  	0x0f, 0x10, 0x11, 0x15, 0x1b,
>> +};
>> +
>> +static hda_nid_t stac92hd71bxx_pin_nids[10] = {
>> +	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
>> +	0x0f, 0x14, 0x18, 0x19, 0x1e,
>>  };
>>  
>>  static hda_nid_t stac927x_pin_nids[14] = {
>> @@ -393,6 +420,25 @@ static struct hda_verb stac9200_eapd_ini
>>  	/* set dac0mux for dac converter */
>>  	{0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
>>  	{0x08, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
>> +	{}
>> +};
>> +
>> +static struct hda_verb stac92hd71bxx_core_init[] = {
>> +	/* set master volume and direct control */
>> +	{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
>> +	/* unmute right and left channels for node 0x0a */
>> +	{ 0x0a, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
>> +	{ 0x0a, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
>>     
>
> The below would do the same job with a single line:
>     { 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0) }
>
>
>   
>> +	/* connect headphone jack to dac1 */
>> +	{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
>> +	/* unmute right and left channels for node 0x0d */
>> +	{ 0x0d, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
>> +	{ 0x0d, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
>> +	/* unmute right and left channels for node 0x0f */
>> +	{ 0x0f, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
>> +	{ 0x0f, AC_VERB_SET_RIGHT_AMP_IN_MUTE, 0x0},
>> +	/* unmute mono out node */
>> +	{ 0x14, AC_VERB_SET_LEFT_AMP_IN_MUTE, 0x0},
>>  	{}
>>  };
>>     
>
> Ditto.
>
>
> Thanks,
>
> Takashi
>   
Hello Takashi,

Here is an updated and cleanup version of the last patch.
Thanks for pointing out the cruft in the previous patch.

Matt Ranstasy

[-- Attachment #2: stac92hd71bxx_update.patch --]
[-- Type: text/plain, Size: 6035 bytes --]

diff -r b7f98e64be95 pci/hda/patch_sigmatel.c
--- a/pci/hda/patch_sigmatel.c	Mon Nov 05 15:48:36 2007 +0100
+++ b/pci/hda/patch_sigmatel.c	Mon Nov 05 12:02:49 2007 -0500
@@ -62,6 +62,11 @@ enum {
 };
 
 enum {
+	STAC_92HD71BXX_REF,
+	STAC_92HD71BXX_MODELS
+};
+
+enum {
 	STAC_925x_REF,
 	STAC_M2_2,
 	STAC_MA6,
@@ -172,6 +177,23 @@ static hda_nid_t stac9200_dac_nids[1] = 
         0x02,
 };
 
+static hda_nid_t stac92hd71bxx_adc_nids[2] = {
+		0x12, 0x13,
+};
+
+static hda_nid_t stac92hd71bxx_mux_nids[2] = {
+		0x1a, 0x1b
+};
+
+static hda_nid_t stac92hd71bxx_dac_nids[2] = {
+		0x10, /*0x11, */
+};
+
+#define STAC92HD71BXX_NUM_DMICS	2
+static hda_nid_t stac92hd71bxx_dmic_nids[STAC92HD71BXX_NUM_DMICS + 1] = {
+		0x18, 0x19, 0
+};
+
 static hda_nid_t stac925x_adc_nids[1] = {
         0x03,
 };
@@ -236,6 +258,11 @@ static hda_nid_t stac922x_pin_nids[10] =
 static hda_nid_t stac922x_pin_nids[10] = {
 	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
 	0x0f, 0x10, 0x11, 0x15, 0x1b,
+};
+
+static hda_nid_t stac92hd71bxx_pin_nids[10] = {
+	0x0a, 0x0b, 0x0c, 0x0d, 0x0e,
+	0x0f, 0x14, 0x18, 0x19, 0x1e,
 };
 
 static hda_nid_t stac927x_pin_nids[14] = {
@@ -393,6 +420,20 @@ static struct hda_verb stac9200_eapd_ini
 	/* set dac0mux for dac converter */
 	{0x07, AC_VERB_SET_CONNECT_SEL, 0x00},
 	{0x08, AC_VERB_SET_EAPD_BTLENABLE, 0x02},
+	{}
+};
+
+static struct hda_verb stac92hd71bxx_core_init[] = {
+	/* set master volume and direct control */
+	{ 0x28, AC_VERB_SET_VOLUME_KNOB_CONTROL, 0xff},
+	/* connect headphone jack to dac1 */
+	{ 0x0a, AC_VERB_SET_CONNECT_SEL, 0x01},
+	/* unmute right and left channels for nodes 0x0a, 0xd, 0x0f */
+	{ 0x0a, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
+	{ 0x0d, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
+	{ 0x0f, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
+	/* unmute mono out node */
+	{ 0x14, AC_VERB_SET_AMP_GAIN_MUTE, AMP_IN_UNMUTE(0)},
 	{}
 };
 
@@ -480,6 +521,21 @@ static struct snd_kcontrol_new stac9200_
 	HDA_CODEC_VOLUME("Capture Volume", 0x0a, 0, HDA_OUTPUT),
 	HDA_CODEC_MUTE("Capture Switch", 0x0a, 0, HDA_OUTPUT),
 	HDA_CODEC_VOLUME("Capture Mux Volume", 0x0c, 0, HDA_OUTPUT),
+	{ } /* end */
+};
+
+static struct snd_kcontrol_new stac92hd71bxx_mixer[] = {
+	STAC_DIGITAL_INPUT_SOURCE(1),
+	STAC_INPUT_SOURCE(2),
+	STAC_VOLKNOB(0x28),
+
+	/* hardware gain controls */
+	HDA_CODEC_VOLUME("Digital Mic 1 Volume", 0x18, 0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("Digital Mic 2 Volume", 0x19, 0, HDA_OUTPUT),
+
+	HDA_CODEC_VOLUME("Capture Volume", 0x1c, 0, HDA_OUTPUT),
+	HDA_CODEC_MUTE("Capture Switch", 0x1c, 0, HDA_OUTPUT),
+	HDA_CODEC_VOLUME("Capture Mux Volume", 0x1a, 0, HDA_OUTPUT),
 	{ } /* end */
 };
 
@@ -835,6 +891,27 @@ static struct snd_pci_quirk stac925x_cfg
 	SND_PCI_QUIRK(0x107b, 0x0461, "Gateway NX560XL", STAC_MA6),
 	SND_PCI_QUIRK(0x107b, 0x0681, "Gateway NX860", STAC_PA6),
 	SND_PCI_QUIRK(0x1002, 0x437b, "Gateway MX6453", STAC_M2_2),
+	{} /* terminator */
+};
+
+static unsigned int ref92hd71bxx_pin_configs[10] = {
+	0x02214030, 0x02a19040, 0x01a19020, 0x01014010,
+	0x0181302e, 0x01114010, 0x01a19020, 0x90a000f0,
+	0x90a000f0, 0x01452050,
+};
+
+static unsigned int *stac92hd71bxx_brd_tbl[STAC_92HD71BXX_MODELS] = {
+	[STAC_92HD71BXX_REF] = ref92hd71bxx_pin_configs,
+};
+
+static const char *stac92hd71bxx_models[STAC_92HD71BXX_MODELS] = {
+	[STAC_92HD71BXX_REF] = "ref",
+};
+
+static struct snd_pci_quirk stac92hd71bxx_cfg_tbl[] = {
+	/* SigmaTel reference board */
+	SND_PCI_QUIRK(PCI_VENDOR_ID_INTEL, 0x2668,
+		      "DFI LanParty", STAC_92HD71BXX_REF),
 	{} /* terminator */
 };
 
@@ -2615,6 +2692,77 @@ static int patch_stac925x(struct hda_cod
 	return 0;
 }
 
+static int patch_stac92hd71bxx(struct hda_codec *codec)
+{
+	struct sigmatel_spec *spec;
+	int err = 0;
+
+	spec  = kzalloc(sizeof(*spec), GFP_KERNEL);
+	if (spec == NULL)
+		return -ENOMEM;
+
+	codec->spec = spec;
+	spec->num_pins = ARRAY_SIZE(stac92hd71bxx_pin_nids);
+	spec->pin_nids = stac92hd71bxx_pin_nids;
+	spec->board_config = snd_hda_check_board_config(codec,
+							STAC_92HD71BXX_MODELS,
+							stac92hd71bxx_models,
+							stac92hd71bxx_cfg_tbl);
+again:
+	if (spec->board_config < 0) {
+		snd_printdd(KERN_INFO "hda_codec: Unknown model for"
+			" STAC92HD71BXX, using BIOS defaults\n");
+		err = stac92xx_save_bios_config_regs(codec);
+		if (err < 0) {
+			stac92xx_free(codec);
+			return err;
+		}
+		spec->pin_configs = spec->bios_pin_configs;
+	} else {
+		spec->pin_configs = stac92hd71bxx_brd_tbl[spec->board_config];
+		stac92xx_set_config_regs(codec);
+	}
+
+	spec->gpio_mask = spec->gpio_data = 0x00000001; /* GPIO0 High = EAPD */
+	stac92xx_enable_gpio_mask(codec);
+
+	spec->init = stac92hd71bxx_core_init;
+	spec->mixer = stac92hd71bxx_mixer;
+
+	spec->mux_nids = stac92hd71bxx_mux_nids;
+	spec->adc_nids = stac92hd71bxx_adc_nids;
+	spec->dmic_nids = stac92hd71bxx_dmic_nids;
+	spec->dmux_nid = 0x1c;
+
+	spec->num_muxes = ARRAY_SIZE(stac92hd71bxx_mux_nids);
+	spec->num_adcs = ARRAY_SIZE(stac92hd71bxx_adc_nids);
+	spec->num_dmics = STAC92HD71BXX_NUM_DMICS;
+
+	spec->multiout.num_dacs = 2;
+	spec->multiout.hp_nid = 0x11;
+	spec->multiout.dac_nids = stac92hd71bxx_dac_nids;
+
+	err = stac92xx_parse_auto_config(codec, 0x21, 0x23);
+	if (!err) {
+		if (spec->board_config < 0) {
+			printk(KERN_WARNING "hda_codec: No auto-config is "
+			       "available, default to model=ref\n");
+			spec->board_config = STAC_92HD71BXX_REF;
+			goto again;
+		}
+		err = -EINVAL;
+	}
+
+	if (err < 0) {
+		stac92xx_free(codec);
+		return err;
+	}
+
+	codec->patch_ops = stac92xx_patch_ops;
+
+	return 0;
+};
+
 static int patch_stac922x(struct hda_codec *codec)
 {
 	struct sigmatel_spec *spec;
@@ -3183,5 +3331,6 @@ struct hda_codec_preset snd_hda_preset_s
  	{ .id = 0x838476a5, .name = "STAC9255D", .patch = patch_stac9205 },
  	{ .id = 0x838476a6, .name = "STAC9254", .patch = patch_stac9205 },
  	{ .id = 0x838476a7, .name = "STAC9254D", .patch = patch_stac9205 },
+	{ .id = 0x111d76b0, .name = "92HD71BXX", .patch = patch_stac92hd71bxx },
 	{} /* terminator */
 };

[-- Attachment #3: Type: text/plain, Size: 160 bytes --]

_______________________________________________
Alsa-devel mailing list
Alsa-devel@alsa-project.org
http://mailman.alsa-project.org/mailman/listinfo/alsa-devel

^ permalink raw reply	[flat|nested] 5+ messages in thread

* Re: [PATCH] hda: Added new IDT codec family
  2007-11-05 17:10   ` Matthew Ranostay
@ 2007-11-06  7:57     ` Takashi Iwai
  0 siblings, 0 replies; 5+ messages in thread
From: Takashi Iwai @ 2007-11-06  7:57 UTC (permalink / raw)
  To: Matthew Ranostay; +Cc: alsa-devel

At Mon, 05 Nov 2007 12:10:44 -0500,
Matthew Ranostay wrote:
> 
> Hello Takashi,
> 
> Here is an updated and cleanup version of the last patch.
> Thanks for pointing out the cruft in the previous patch.

Thanks for the quick fix!
Now I applied your updated patch to HG tree.


Takashi

^ permalink raw reply	[flat|nested] 5+ messages in thread

end of thread, other threads:[~2007-11-06 10:55 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-11-05 15:06 [PATCH] hda: Added new IDT codec family Matthew Ranostay
2007-11-05 12:30 ` Takashi Iwai
2007-11-05 15:54   ` Maxim Levitsky
2007-11-05 17:10   ` Matthew Ranostay
2007-11-06  7:57     ` Takashi Iwai

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.