Selaa lähdekoodia

ALSA: oxygen: handle CD input configuration with a flag

There are more models without a CD input than with one, so handle this
explicitly with a device_config flag to avoid having to define a control
filter callback to filter it out.

Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Clemens Ladisch 14 vuotta sitten
vanhempi
commit
b6ca8ab399

+ 2 - 1
sound/pci/oxygen/oxygen.c

@@ -505,7 +505,8 @@ static const struct oxygen_model model_generic = {
 			 PLAYBACK_2_TO_AC97_1 |
 			 PLAYBACK_2_TO_AC97_1 |
 			 CAPTURE_0_FROM_I2S_1 |
 			 CAPTURE_0_FROM_I2S_1 |
 			 CAPTURE_1_FROM_SPDIF |
 			 CAPTURE_1_FROM_SPDIF |
-			 CAPTURE_2_FROM_AC97_1,
+			 CAPTURE_2_FROM_AC97_1 |
+			 AC97_CD_INPUT,
 	.dac_channels = 8,
 	.dac_channels = 8,
 	.dac_volume_min = 0,
 	.dac_volume_min = 0,
 	.dac_volume_max = 255,
 	.dac_volume_max = 255,

+ 1 - 0
sound/pci/oxygen/oxygen.h

@@ -34,6 +34,7 @@
      /* CAPTURE_3_FROM_I2S_3		not implemented */
      /* CAPTURE_3_FROM_I2S_3		not implemented */
 #define MIDI_OUTPUT		0x0800
 #define MIDI_OUTPUT		0x0800
 #define MIDI_INPUT		0x1000
 #define MIDI_INPUT		0x1000
+#define AC97_CD_INPUT		0x2000
 
 
 enum {
 enum {
 	CONTROL_SPDIF_PCM,
 	CONTROL_SPDIF_PCM,

+ 3 - 0
sound/pci/oxygen/oxygen_mixer.c

@@ -972,6 +972,9 @@ static int add_controls(struct oxygen *chip,
 		if (!strcmp(template.name, "Stereo Upmixing") &&
 		if (!strcmp(template.name, "Stereo Upmixing") &&
 		    chip->model.dac_channels == 2)
 		    chip->model.dac_channels == 2)
 			continue;
 			continue;
+		if (!strncmp(template.name, "CD Capture ", 11) &&
+		    !(chip->model.device_config & AC97_CD_INPUT))
+			continue;
 		if (!strcmp(template.name, "Master Playback Volume") &&
 		if (!strcmp(template.name, "Master Playback Volume") &&
 		    chip->model.dac_tlv) {
 		    chip->model.dac_tlv) {
 			template.tlv.p = chip->model.dac_tlv;
 			template.tlv.p = chip->model.dac_tlv;

+ 0 - 8
sound/pci/oxygen/xonar_cs43xx.c

@@ -367,13 +367,6 @@ static void xonar_d1_line_mic_ac97_switch(struct oxygen *chip,
 
 
 static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -6000, 100, 0);
 static const DECLARE_TLV_DB_SCALE(cs4362a_db_scale, -6000, 100, 0);
 
 
-static int xonar_d1_control_filter(struct snd_kcontrol_new *template)
-{
-	if (!strncmp(template->name, "CD Capture ", 11))
-		return 1; /* no CD input */
-	return 0;
-}
-
 static int xonar_d1_mixer_init(struct oxygen *chip)
 static int xonar_d1_mixer_init(struct oxygen *chip)
 {
 {
 	int err;
 	int err;
@@ -391,7 +384,6 @@ static const struct oxygen_model model_xonar_d1 = {
 	.longname = "Asus Virtuoso 100",
 	.longname = "Asus Virtuoso 100",
 	.chip = "AV200",
 	.chip = "AV200",
 	.init = xonar_d1_init,
 	.init = xonar_d1_init,
-	.control_filter = xonar_d1_control_filter,
 	.mixer_init = xonar_d1_mixer_init,
 	.mixer_init = xonar_d1_mixer_init,
 	.cleanup = xonar_d1_cleanup,
 	.cleanup = xonar_d1_cleanup,
 	.suspend = xonar_d1_suspend,
 	.suspend = xonar_d1_suspend,

+ 2 - 9
sound/pci/oxygen/xonar_pcm179x.c

@@ -915,13 +915,6 @@ static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
 	return 0;
 	return 0;
 }
 }
 
 
-static int xonar_st_control_filter(struct snd_kcontrol_new *template)
-{
-	if (!strncmp(template->name, "CD Capture ", 11))
-		return 1; /* no CD input */
-	return 0;
-}
-
 static int add_pcm1796_controls(struct oxygen *chip)
 static int add_pcm1796_controls(struct oxygen *chip)
 {
 {
 	int err;
 	int err;
@@ -991,7 +984,8 @@ static const struct oxygen_model model_xonar_d2 = {
 			 CAPTURE_0_FROM_I2S_2 |
 			 CAPTURE_0_FROM_I2S_2 |
 			 CAPTURE_1_FROM_SPDIF |
 			 CAPTURE_1_FROM_SPDIF |
 			 MIDI_OUTPUT |
 			 MIDI_OUTPUT |
-			 MIDI_INPUT,
+			 MIDI_INPUT |
+			 AC97_CD_INPUT,
 	.dac_channels = 8,
 	.dac_channels = 8,
 	.dac_volume_min = 255 - 2*60,
 	.dac_volume_min = 255 - 2*60,
 	.dac_volume_max = 255,
 	.dac_volume_max = 255,
@@ -1037,7 +1031,6 @@ static const struct oxygen_model model_xonar_st = {
 	.longname = "Asus Virtuoso 100",
 	.longname = "Asus Virtuoso 100",
 	.chip = "AV200",
 	.chip = "AV200",
 	.init = xonar_st_init,
 	.init = xonar_st_init,
-	.control_filter = xonar_st_control_filter,
 	.mixer_init = xonar_st_mixer_init,
 	.mixer_init = xonar_st_mixer_init,
 	.cleanup = xonar_st_cleanup,
 	.cleanup = xonar_st_cleanup,
 	.suspend = xonar_st_suspend,
 	.suspend = xonar_st_suspend,

+ 0 - 8
sound/pci/oxygen/xonar_wm87x6.c

@@ -1028,13 +1028,6 @@ static const struct snd_kcontrol_new lc_controls[] = {
 				LC_CONTROL_ALC, wm8776_ngth_db_scale),
 				LC_CONTROL_ALC, wm8776_ngth_db_scale),
 };
 };
 
 
-static int xonar_ds_control_filter(struct snd_kcontrol_new *template)
-{
-	if (!strncmp(template->name, "CD Capture ", 11))
-		return 1; /* no CD input */
-	return 0;
-}
-
 static int xonar_ds_mixer_init(struct oxygen *chip)
 static int xonar_ds_mixer_init(struct oxygen *chip)
 {
 {
 	struct xonar_wm87x6 *data = chip->model_data;
 	struct xonar_wm87x6 *data = chip->model_data;
@@ -1074,7 +1067,6 @@ static const struct oxygen_model model_xonar_ds = {
 	.longname = "Asus Virtuoso 66",
 	.longname = "Asus Virtuoso 66",
 	.chip = "AV200",
 	.chip = "AV200",
 	.init = xonar_ds_init,
 	.init = xonar_ds_init,
-	.control_filter = xonar_ds_control_filter,
 	.mixer_init = xonar_ds_mixer_init,
 	.mixer_init = xonar_ds_mixer_init,
 	.cleanup = xonar_ds_cleanup,
 	.cleanup = xonar_ds_cleanup,
 	.suspend = xonar_ds_suspend,
 	.suspend = xonar_ds_suspend,