Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 82467611 authored by Takashi Iwai's avatar Takashi Iwai Committed by Jaroslav Kysela
Browse files

[ALSA] hda-codec - kernel config for each codec



Create kernel configs to choose the codec support codes to build.

Signed-off-by: default avatarTakashi Iwai <tiwai@suse.de>
Signed-off-by: default avatarJaroslav Kysela <perex@suse.cz>
parent 532d5381
Loading
Loading
Loading
Loading
+72 −0
Original line number Diff line number Diff line
@@ -509,6 +509,78 @@ config SND_HDA_HWDEP
	  This interface can be used for out-of-bound communication
	  with codesc for debugging purposes.

config SND_HDA_CODEC_REALTEK
	bool "Build Realtek HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include Realtek HD-audio codec support in
	  snd-hda-intel driver, such as ALC880.

config SND_HDA_CODEC_ANALOG
	bool "Build Analog Device HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include Analog Device HD-audio codec support in
	  snd-hda-intel driver, such as AD1986A.

config SND_HDA_CODEC_SIGMATEL
	bool "Build IDT/Sigmatel HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include IDT (Sigmatel) HD-audio codec support in
	  snd-hda-intel driver, such as STAC9200.

config SND_HDA_CODEC_VIA
	bool "Build VIA HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include VIA HD-audio codec support in
	  snd-hda-intel driver, such as VT1708.

config SND_HDA_CODEC_ATIHDMI
	bool "Build ATI HDMI HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include ATI HDMI HD-audio codec support in
	  snd-hda-intel driver, such as ATI RS600 HDMI.

config SND_HDA_CODEC_CONEXANT
	bool "Build Conexant HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include Conexant HD-audio codec support in
	  snd-hda-intel driver, such as CX20549.

config SND_HDA_CODEC_CMEDIA
	bool "Build C-Media HD-audio codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include C-Media HD-audio codec support in
	  snd-hda-intel driver, such as CMI9880.

config SND_HDA_CODEC_SI3054
	bool "Build Silicon Labs 3054 HD-modem codec support"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to include Silicon Labs 3054 HD-modem codec
	  (and compatibles) support in snd-hda-intel driver.

config SND_HDA_GENERIC
	bool "Enable generic HD-audio codec parser"
	depends on SND_HDA_INTEL
	default y
	help
	  Say Y here to enable the generic HD-audio codec parser
	  in snd-hda-intel driver.

config SND_HDSP
	tristate "RME Hammerfall DSP Audio"
	depends on SND
+10 −10
Original line number Diff line number Diff line
@@ -2,17 +2,17 @@ snd-hda-intel-y := hda_intel.o
# since snd-hda-intel is the only driver using hda-codec,
# merge it into a single module although it was originally
# designed to be individual modules
snd-hda-intel-y += hda_codec.o \
	hda_generic.o \
	patch_realtek.o \
	patch_cmedia.o \
	patch_analog.o \
	patch_sigmatel.o \
	patch_si3054.o \
	patch_atihdmi.o \
	patch_conexant.o \
	patch_via.o
snd-hda-intel-y += hda_codec.o
snd-hda-intel-$(CONFIG_PROC_FS) += hda_proc.o
snd-hda-intel-$(CONFIG_SND_HDA_HWDEP) += hda_hwdep.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_GENERIC) += hda_generic.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_REALTEK) += patch_realtek.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_CMEDIA) += patch_cmedia.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_ANALOG) += patch_analog.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_SIGMATEL) += patch_sigmatel.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_SI3054) += patch_si3054.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_ATIHDMI) += patch_atihdmi.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_CONEXANT) += patch_conexant.o
snd-hda-intel-$(CONFIG_SND_HDA_CODEC_VIA) += patch_via.o

obj-$(CONFIG_SND_HDA_INTEL) += snd-hda-intel.o
+27 −4
Original line number Diff line number Diff line
@@ -388,6 +388,13 @@ int __devinit snd_hda_bus_new(struct snd_card *card,
	return 0;
}

#ifdef CONFIG_SND_HDA_GENERIC
#define is_generic_config(codec) \
	(codec->bus->modelname && !strcmp(codec->bus->modelname, "generic"))
#else
#define is_generic_config(codec)	0
#endif

/*
 * find a matching codec preset
 */
@@ -396,7 +403,7 @@ find_codec_preset(struct hda_codec *codec)
{
	const struct hda_codec_preset **tbl, *preset;

	if (codec->bus->modelname && !strcmp(codec->bus->modelname, "generic"))
	if (is_generic_config(codec))
		return NULL; /* use the generic parser */

	for (tbl = hda_preset_tables; *tbl; tbl++) {
@@ -582,10 +589,26 @@ int __devinit snd_hda_codec_new(struct hda_bus *bus, unsigned int codec_addr,
		snd_hda_get_codec_name(codec, bus->card->mixername,
				       sizeof(bus->card->mixername));

	if (codec->preset && codec->preset->patch)
#ifdef CONFIG_SND_HDA_GENERIC
	if (is_generic_config(codec)) {
		err = snd_hda_parse_generic_codec(codec);
		goto patched;
	}
#endif
	if (codec->preset && codec->preset->patch) {
		err = codec->preset->patch(codec);
	else
		goto patched;
	}

	/* call the default parser */
#ifdef CONFIG_SND_HDA_GENERIC
	err = snd_hda_parse_generic_codec(codec);
#else
	printk(KERN_ERR "hda-codec: No codec parser is available\n");
	err = -ENODEV;
#endif

 patched:
	if (err < 0) {
		snd_hda_codec_free(codec);
		return err;
+16 −0
Original line number Diff line number Diff line
@@ -20,13 +20,29 @@ extern struct hda_codec_preset snd_hda_preset_conexant[];
extern struct hda_codec_preset snd_hda_preset_via[];

static const struct hda_codec_preset *hda_preset_tables[] = {
#ifdef CONFIG_SND_HDA_CODEC_REALTEK
	snd_hda_preset_realtek,
#endif
#ifdef CONFIG_SND_HDA_CODEC_CMEDIA
	snd_hda_preset_cmedia,
#endif
#ifdef CONFIG_SND_HDA_CODEC_ANALOG
	snd_hda_preset_analog,
#endif
#ifdef CONFIG_SND_HDA_CODEC_SIGMATEL
	snd_hda_preset_sigmatel,
#endif
#ifdef CONFIG_SND_HDA_CODEC_SI3054
	snd_hda_preset_si3054,
#endif
#ifdef CONFIG_SND_HDA_CODEC_ATIHDMI
	snd_hda_preset_atihdmi,
#endif
#ifdef CONFIG_SND_HDA_CODEC_CONEXANT
	snd_hda_preset_conexant,
#endif
#ifdef CONFIG_SND_HDA_CODEC_VIA
	snd_hda_preset_via,
#endif
	NULL
};