mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 21:01:29 +00:00
ALSA: oxygen: allow different number of PCM and mixer channels
For cards like the Xonar HDAV1.3, differentiate between the number of PCM channels that can be played and the number of channels whose volume can be adjusted. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
This commit is contained in:
parent
3daa7ea650
commit
1f4d7be729
@ -185,7 +185,7 @@ static void ak4396_init(struct oxygen *chip)
|
||||
{
|
||||
struct generic_data *data = chip->model_data;
|
||||
|
||||
data->dacs = chip->model.dac_channels / 2;
|
||||
data->dacs = chip->model.dac_channels_pcm / 2;
|
||||
data->ak4396_regs[0][AK4396_CONTROL_2] =
|
||||
AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL;
|
||||
ak4396_registers_init(chip);
|
||||
@ -583,7 +583,8 @@ static const struct oxygen_model model_generic = {
|
||||
CAPTURE_1_FROM_SPDIF |
|
||||
CAPTURE_2_FROM_AC97_1 |
|
||||
AC97_CD_INPUT,
|
||||
.dac_channels = 8,
|
||||
.dac_channels_pcm = 8,
|
||||
.dac_channels_mixer = 8,
|
||||
.dac_volume_min = 0,
|
||||
.dac_volume_max = 255,
|
||||
.function_flags = OXYGEN_FUNCTION_SPI |
|
||||
@ -643,7 +644,8 @@ static int __devinit get_oxygen_model(struct oxygen *chip,
|
||||
PLAYBACK_1_TO_SPDIF;
|
||||
if (id->driver_data == MODEL_FANTASIA)
|
||||
chip->model.device_config |= CAPTURE_0_FROM_I2S_1;
|
||||
chip->model.dac_channels = 2;
|
||||
chip->model.dac_channels_pcm = 2;
|
||||
chip->model.dac_channels_mixer = 2;
|
||||
break;
|
||||
}
|
||||
if (id->driver_data == MODEL_MERIDIAN ||
|
||||
|
@ -100,7 +100,8 @@ struct oxygen_model {
|
||||
unsigned long private_data;
|
||||
size_t model_data_size;
|
||||
unsigned int device_config;
|
||||
u8 dac_channels;
|
||||
u8 dac_channels_pcm;
|
||||
u8 dac_channels_mixer;
|
||||
u8 dac_volume_min;
|
||||
u8 dac_volume_max;
|
||||
u8 misc_flags;
|
||||
|
@ -31,7 +31,7 @@ static int dac_volume_info(struct snd_kcontrol *ctl,
|
||||
struct oxygen *chip = ctl->private_data;
|
||||
|
||||
info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
|
||||
info->count = chip->model.dac_channels;
|
||||
info->count = chip->model.dac_channels_mixer;
|
||||
info->value.integer.min = chip->model.dac_volume_min;
|
||||
info->value.integer.max = chip->model.dac_volume_max;
|
||||
return 0;
|
||||
@ -44,7 +44,7 @@ static int dac_volume_get(struct snd_kcontrol *ctl,
|
||||
unsigned int i;
|
||||
|
||||
mutex_lock(&chip->mutex);
|
||||
for (i = 0; i < chip->model.dac_channels; ++i)
|
||||
for (i = 0; i < chip->model.dac_channels_mixer; ++i)
|
||||
value->value.integer.value[i] = chip->dac_volume[i];
|
||||
mutex_unlock(&chip->mutex);
|
||||
return 0;
|
||||
@ -59,7 +59,7 @@ static int dac_volume_put(struct snd_kcontrol *ctl,
|
||||
|
||||
changed = 0;
|
||||
mutex_lock(&chip->mutex);
|
||||
for (i = 0; i < chip->model.dac_channels; ++i)
|
||||
for (i = 0; i < chip->model.dac_channels_mixer; ++i)
|
||||
if (value->value.integer.value[i] != chip->dac_volume[i]) {
|
||||
chip->dac_volume[i] = value->value.integer.value[i];
|
||||
changed = 1;
|
||||
@ -1022,7 +1022,7 @@ static int add_controls(struct oxygen *chip,
|
||||
continue;
|
||||
}
|
||||
if (!strcmp(template.name, "Stereo Upmixing") &&
|
||||
chip->model.dac_channels == 2)
|
||||
chip->model.dac_channels_pcm == 2)
|
||||
continue;
|
||||
if (!strcmp(template.name, "Mic Source Capture Enum") &&
|
||||
!(chip->model.device_config & AC97_FMIC_SWITCH))
|
||||
|
@ -143,7 +143,7 @@ static int oxygen_open(struct snd_pcm_substream *substream,
|
||||
runtime->hw.rate_min = 44100;
|
||||
break;
|
||||
case PCM_MULTICH:
|
||||
runtime->hw.channels_max = chip->model.dac_channels;
|
||||
runtime->hw.channels_max = chip->model.dac_channels_pcm;
|
||||
break;
|
||||
}
|
||||
if (chip->model.pcm_hardware_filter)
|
||||
|
@ -426,7 +426,8 @@ static const struct oxygen_model model_xonar_d1 = {
|
||||
PLAYBACK_1_TO_SPDIF |
|
||||
CAPTURE_0_FROM_I2S_2 |
|
||||
AC97_FMIC_SWITCH,
|
||||
.dac_channels = 8,
|
||||
.dac_channels_pcm = 8,
|
||||
.dac_channels_mixer = 8,
|
||||
.dac_volume_min = 127 - 60,
|
||||
.dac_volume_max = 127,
|
||||
.function_flags = OXYGEN_FUNCTION_2WIRE,
|
||||
|
@ -1094,7 +1094,8 @@ static const struct oxygen_model model_xonar_d2 = {
|
||||
MIDI_OUTPUT |
|
||||
MIDI_INPUT |
|
||||
AC97_CD_INPUT,
|
||||
.dac_channels = 8,
|
||||
.dac_channels_pcm = 8,
|
||||
.dac_channels_mixer = 8,
|
||||
.dac_volume_min = 255 - 2*60,
|
||||
.dac_volume_max = 255,
|
||||
.misc_flags = OXYGEN_MISC_MIDI,
|
||||
@ -1127,7 +1128,8 @@ static const struct oxygen_model model_xonar_hdav = {
|
||||
PLAYBACK_1_TO_SPDIF |
|
||||
CAPTURE_0_FROM_I2S_2 |
|
||||
CAPTURE_1_FROM_SPDIF,
|
||||
.dac_channels = 8,
|
||||
.dac_channels_pcm = 8,
|
||||
.dac_channels_mixer = 2,
|
||||
.dac_volume_min = 255 - 2*60,
|
||||
.dac_volume_max = 255,
|
||||
.misc_flags = OXYGEN_MISC_MIDI,
|
||||
@ -1157,7 +1159,8 @@ static const struct oxygen_model model_xonar_st = {
|
||||
PLAYBACK_1_TO_SPDIF |
|
||||
CAPTURE_0_FROM_I2S_2 |
|
||||
AC97_FMIC_SWITCH,
|
||||
.dac_channels = 2,
|
||||
.dac_channels_pcm = 2,
|
||||
.dac_channels_mixer = 2,
|
||||
.dac_volume_min = 255 - 2*60,
|
||||
.dac_volume_max = 255,
|
||||
.function_flags = OXYGEN_FUNCTION_2WIRE,
|
||||
@ -1187,6 +1190,7 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip,
|
||||
break;
|
||||
case GPIO_DB_H6:
|
||||
chip->model.shortname = "Xonar HDAV1.3+H6";
|
||||
chip->model.dac_channels_mixer = 8;
|
||||
chip->model.private_data = 1;
|
||||
break;
|
||||
}
|
||||
@ -1200,7 +1204,8 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip,
|
||||
break;
|
||||
case GPIO_DB_H6:
|
||||
chip->model.shortname = "Xonar ST+H6";
|
||||
chip->model.dac_channels = 8;
|
||||
chip->model.dac_channels_pcm = 8;
|
||||
chip->model.dac_channels_mixer = 8;
|
||||
chip->model.private_data = 1;
|
||||
break;
|
||||
}
|
||||
|
@ -1135,7 +1135,8 @@ static const struct oxygen_model model_xonar_ds = {
|
||||
.device_config = PLAYBACK_0_TO_I2S |
|
||||
PLAYBACK_1_TO_SPDIF |
|
||||
CAPTURE_0_FROM_I2S_1,
|
||||
.dac_channels = 8,
|
||||
.dac_channels_pcm = 8,
|
||||
.dac_channels_mixer = 8,
|
||||
.dac_volume_min = 255 - 2*60,
|
||||
.dac_volume_max = 255,
|
||||
.function_flags = OXYGEN_FUNCTION_SPI,
|
||||
|
Loading…
Reference in New Issue
Block a user