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>
This commit is contained in:
committed by
Takashi Iwai
parent
45bc307f32
commit
b6ca8ab399
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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;
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
@@ -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,
|
||||||
|
Reference in New Issue
Block a user