ALSA: oxygen: handle CD input configuration with a flag
authorClemens Ladisch <clemens@ladisch.de>
Mon, 4 Oct 2010 11:21:52 +0000 (13:21 +0200)
committerTakashi Iwai <tiwai@suse.de>
Tue, 5 Oct 2010 16:11:17 +0000 (18:11 +0200)
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>
sound/pci/oxygen/oxygen.c
sound/pci/oxygen/oxygen.h
sound/pci/oxygen/oxygen_mixer.c
sound/pci/oxygen/xonar_cs43xx.c
sound/pci/oxygen/xonar_pcm179x.c
sound/pci/oxygen/xonar_wm87x6.c

index 289cb4dacfc79ec012b6efb174054efaa0afe855..f4fdf6dac800c47a2b22a7c967d3e54a12a1b598 100644 (file)
@@ -505,7 +505,8 @@ static const struct oxygen_model model_generic = {
                         PLAYBACK_2_TO_AC97_1 |
                         CAPTURE_0_FROM_I2S_1 |
                         CAPTURE_1_FROM_SPDIF |
-                        CAPTURE_2_FROM_AC97_1,
+                        CAPTURE_2_FROM_AC97_1 |
+                        AC97_CD_INPUT,
        .dac_channels = 8,
        .dac_volume_min = 0,
        .dac_volume_max = 255,
index a3409edcfb5094791c33563f8ad3911826ce3e26..7d5222caa0a92e5ca844269e02253fed98cfba98 100644 (file)
@@ -34,6 +34,7 @@
      /* CAPTURE_3_FROM_I2S_3           not implemented */
 #define MIDI_OUTPUT            0x0800
 #define MIDI_INPUT             0x1000
+#define AC97_CD_INPUT          0x2000
 
 enum {
        CONTROL_SPDIF_PCM,
index f375b8a27862452bb6ec24b4f46028136910263a..7d40ba8db9fc9837c48f04aa315dd6ce7e64ed9f 100644 (file)
@@ -972,6 +972,9 @@ static int add_controls(struct oxygen *chip,
                if (!strcmp(template.name, "Stereo Upmixing") &&
                    chip->model.dac_channels == 2)
                        continue;
+               if (!strncmp(template.name, "CD Capture ", 11) &&
+                   !(chip->model.device_config & AC97_CD_INPUT))
+                       continue;
                if (!strcmp(template.name, "Master Playback Volume") &&
                    chip->model.dac_tlv) {
                        template.tlv.p = chip->model.dac_tlv;
index 7c4986b27f2b07bd8faa7d824a0056d1db821308..aa27c31049afba1d8d759cc4c5fb7ce7d04e1947 100644 (file)
@@ -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 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)
 {
        int err;
@@ -391,7 +384,6 @@ static const struct oxygen_model model_xonar_d1 = {
        .longname = "Asus Virtuoso 100",
        .chip = "AV200",
        .init = xonar_d1_init,
-       .control_filter = xonar_d1_control_filter,
        .mixer_init = xonar_d1_mixer_init,
        .cleanup = xonar_d1_cleanup,
        .suspend = xonar_d1_suspend,
index ba18fb546b4f9d7c8ace8b82d5100e3c82d0e3b1..338f88567f57dc3de35e7e5378447cee54316922 100644 (file)
@@ -915,13 +915,6 @@ static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
        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)
 {
        int err;
@@ -991,7 +984,8 @@ static const struct oxygen_model model_xonar_d2 = {
                         CAPTURE_0_FROM_I2S_2 |
                         CAPTURE_1_FROM_SPDIF |
                         MIDI_OUTPUT |
-                        MIDI_INPUT,
+                        MIDI_INPUT |
+                        AC97_CD_INPUT,
        .dac_channels = 8,
        .dac_volume_min = 255 - 2*60,
        .dac_volume_max = 255,
@@ -1037,7 +1031,6 @@ static const struct oxygen_model model_xonar_st = {
        .longname = "Asus Virtuoso 100",
        .chip = "AV200",
        .init = xonar_st_init,
-       .control_filter = xonar_st_control_filter,
        .mixer_init = xonar_st_mixer_init,
        .cleanup = xonar_st_cleanup,
        .suspend = xonar_st_suspend,
index 5f9f59c10198c1977bbec732d9305f2196fb7ce7..200f7601276f8e5b5fa841a34ea5ad4a07c0fc44 100644 (file)
@@ -1028,13 +1028,6 @@ static const struct snd_kcontrol_new lc_controls[] = {
                                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)
 {
        struct xonar_wm87x6 *data = chip->model_data;
@@ -1074,7 +1067,6 @@ static const struct oxygen_model model_xonar_ds = {
        .longname = "Asus Virtuoso 66",
        .chip = "AV200",
        .init = xonar_ds_init,
-       .control_filter = xonar_ds_control_filter,
        .mixer_init = xonar_ds_mixer_init,
        .cleanup = xonar_ds_cleanup,
        .suspend = xonar_ds_suspend,