diff options
| author | David S. Miller <davem@davemloft.net> | 2009-05-18 21:08:20 -0700 | 
|---|---|---|
| committer | David S. Miller <davem@davemloft.net> | 2009-05-18 21:08:20 -0700 | 
| commit | bb803cfbecb03a0cf8dc7e1864f18dda6631af00 (patch) | |
| tree | 6c0989693bea6f50cfa5c6bb14f52ec19668def3 /sound/pci/hda/patch_conexant.c | |
| parent | 3878fb6fdbceecca20b15748f807340854220f06 (diff) | |
| parent | 511e11e396dc596825ce04d53d7f6d579404bc01 (diff) | |
| download | olio-linux-3.10-bb803cfbecb03a0cf8dc7e1864f18dda6631af00.tar.xz olio-linux-3.10-bb803cfbecb03a0cf8dc7e1864f18dda6631af00.zip  | |
Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6
Conflicts:
	drivers/scsi/fcoe/fcoe.c
Diffstat (limited to 'sound/pci/hda/patch_conexant.c')
| -rw-r--r-- | sound/pci/hda/patch_conexant.c | 21 | 
1 files changed, 18 insertions, 3 deletions
diff --git a/sound/pci/hda/patch_conexant.c b/sound/pci/hda/patch_conexant.c index 1f2ad76ca94..56ce19e68cb 100644 --- a/sound/pci/hda/patch_conexant.c +++ b/sound/pci/hda/patch_conexant.c @@ -350,12 +350,20 @@ static int conexant_mux_enum_put(struct snd_kcontrol *kcontrol,  }  #ifdef CONFIG_SND_JACK +static void conexant_free_jack_priv(struct snd_jack *jack) +{ +	struct conexant_jack *jacks = jack->private_data; +	jacks->nid = 0; +	jacks->jack = NULL; +} +  static int conexant_add_jack(struct hda_codec *codec,  		hda_nid_t nid, int type)  {  	struct conexant_spec *spec;  	struct conexant_jack *jack;  	const char *name; +	int err;  	spec = codec->spec;  	snd_array_init(&spec->jacks, sizeof(*jack), 32); @@ -368,7 +376,12 @@ static int conexant_add_jack(struct hda_codec *codec,  	jack->nid = nid;  	jack->type = type; -	return snd_jack_new(codec->bus->card, name, type, &jack->jack); +	err = snd_jack_new(codec->bus->card, name, type, &jack->jack); +	if (err < 0) +		return err; +	jack->jack->private_data = jack; +	jack->jack->private_free = conexant_free_jack_priv; +	return 0;  }  static void conexant_report_jack(struct hda_codec *codec, hda_nid_t nid) @@ -455,8 +468,10 @@ static void conexant_free(struct hda_codec *codec)  	if (spec->jacks.list) {  		struct conexant_jack *jacks = spec->jacks.list;  		int i; -		for (i = 0; i < spec->jacks.used; i++) -			snd_device_free(codec->bus->card, &jacks[i].jack); +		for (i = 0; i < spec->jacks.used; i++, jacks++) { +			if (jacks->jack) +				snd_device_free(codec->bus->card, jacks->jack); +		}  		snd_array_free(&spec->jacks);  	}  #endif  |