aboutsummaryrefslogtreecommitdiffstats
path: root/sound
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2011-01-10 09:59:38 -0500
committerTakashi Iwai <tiwai@suse.de>2011-01-10 10:45:53 -0500
commit1f4d7be7293aecd5f8469a46f606f62f0f05d84c (patch)
treed0caf037ec00a8684b18e8d413990c82cfc5f48a /sound
parent3daa7ea650d59ae86926f0ced4c4ccd99ab33fda (diff)
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>
Diffstat (limited to 'sound')
-rw-r--r--sound/pci/oxygen/oxygen.c8
-rw-r--r--sound/pci/oxygen/oxygen.h3
-rw-r--r--sound/pci/oxygen/oxygen_mixer.c8
-rw-r--r--sound/pci/oxygen/oxygen_pcm.c2
-rw-r--r--sound/pci/oxygen/xonar_cs43xx.c3
-rw-r--r--sound/pci/oxygen/xonar_pcm179x.c13
-rw-r--r--sound/pci/oxygen/xonar_wm87x6.c3
7 files changed, 25 insertions, 15 deletions
diff --git a/sound/pci/oxygen/oxygen.c b/sound/pci/oxygen/oxygen.c
index dc47977becae..fe7ed4fc9f46 100644
--- a/sound/pci/oxygen/oxygen.c
+++ b/sound/pci/oxygen/oxygen.c
@@ -185,7 +185,7 @@ static void ak4396_init(struct oxygen *chip)
185{ 185{
186 struct generic_data *data = chip->model_data; 186 struct generic_data *data = chip->model_data;
187 187
188 data->dacs = chip->model.dac_channels / 2; 188 data->dacs = chip->model.dac_channels_pcm / 2;
189 data->ak4396_regs[0][AK4396_CONTROL_2] = 189 data->ak4396_regs[0][AK4396_CONTROL_2] =
190 AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL; 190 AK4396_SMUTE | AK4396_DEM_OFF | AK4396_DFS_NORMAL;
191 ak4396_registers_init(chip); 191 ak4396_registers_init(chip);
@@ -583,7 +583,8 @@ static const struct oxygen_model model_generic = {
583 CAPTURE_1_FROM_SPDIF | 583 CAPTURE_1_FROM_SPDIF |
584 CAPTURE_2_FROM_AC97_1 | 584 CAPTURE_2_FROM_AC97_1 |
585 AC97_CD_INPUT, 585 AC97_CD_INPUT,
586 .dac_channels = 8, 586 .dac_channels_pcm = 8,
587 .dac_channels_mixer = 8,
587 .dac_volume_min = 0, 588 .dac_volume_min = 0,
588 .dac_volume_max = 255, 589 .dac_volume_max = 255,
589 .function_flags = OXYGEN_FUNCTION_SPI | 590 .function_flags = OXYGEN_FUNCTION_SPI |
@@ -643,7 +644,8 @@ static int __devinit get_oxygen_model(struct oxygen *chip,
643 PLAYBACK_1_TO_SPDIF; 644 PLAYBACK_1_TO_SPDIF;
644 if (id->driver_data == MODEL_FANTASIA) 645 if (id->driver_data == MODEL_FANTASIA)
645 chip->model.device_config |= CAPTURE_0_FROM_I2S_1; 646 chip->model.device_config |= CAPTURE_0_FROM_I2S_1;
646 chip->model.dac_channels = 2; 647 chip->model.dac_channels_pcm = 2;
648 chip->model.dac_channels_mixer = 2;
647 break; 649 break;
648 } 650 }
649 if (id->driver_data == MODEL_MERIDIAN || 651 if (id->driver_data == MODEL_MERIDIAN ||
diff --git a/sound/pci/oxygen/oxygen.h b/sound/pci/oxygen/oxygen.h
index b8fbc15b89a3..3d9535c2debb 100644
--- a/sound/pci/oxygen/oxygen.h
+++ b/sound/pci/oxygen/oxygen.h
@@ -100,7 +100,8 @@ struct oxygen_model {
100 unsigned long private_data; 100 unsigned long private_data;
101 size_t model_data_size; 101 size_t model_data_size;
102 unsigned int device_config; 102 unsigned int device_config;
103 u8 dac_channels; 103 u8 dac_channels_pcm;
104 u8 dac_channels_mixer;
104 u8 dac_volume_min; 105 u8 dac_volume_min;
105 u8 dac_volume_max; 106 u8 dac_volume_max;
106 u8 misc_flags; 107 u8 misc_flags;
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c
index 605e84b9e1ec..242c1cac69b8 100644
--- a/sound/pci/oxygen/oxygen_mixer.c
+++ b/sound/pci/oxygen/oxygen_mixer.c
@@ -31,7 +31,7 @@ static int dac_volume_info(struct snd_kcontrol *ctl,
31 struct oxygen *chip = ctl->private_data; 31 struct oxygen *chip = ctl->private_data;
32 32
33 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER; 33 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
34 info->count = chip->model.dac_channels; 34 info->count = chip->model.dac_channels_mixer;
35 info->value.integer.min = chip->model.dac_volume_min; 35 info->value.integer.min = chip->model.dac_volume_min;
36 info->value.integer.max = chip->model.dac_volume_max; 36 info->value.integer.max = chip->model.dac_volume_max;
37 return 0; 37 return 0;
@@ -44,7 +44,7 @@ static int dac_volume_get(struct snd_kcontrol *ctl,
44 unsigned int i; 44 unsigned int i;
45 45
46 mutex_lock(&chip->mutex); 46 mutex_lock(&chip->mutex);
47 for (i = 0; i < chip->model.dac_channels; ++i) 47 for (i = 0; i < chip->model.dac_channels_mixer; ++i)
48 value->value.integer.value[i] = chip->dac_volume[i]; 48 value->value.integer.value[i] = chip->dac_volume[i];
49 mutex_unlock(&chip->mutex); 49 mutex_unlock(&chip->mutex);
50 return 0; 50 return 0;
@@ -59,7 +59,7 @@ static int dac_volume_put(struct snd_kcontrol *ctl,
59 59
60 changed = 0; 60 changed = 0;
61 mutex_lock(&chip->mutex); 61 mutex_lock(&chip->mutex);
62 for (i = 0; i < chip->model.dac_channels; ++i) 62 for (i = 0; i < chip->model.dac_channels_mixer; ++i)
63 if (value->value.integer.value[i] != chip->dac_volume[i]) { 63 if (value->value.integer.value[i] != chip->dac_volume[i]) {
64 chip->dac_volume[i] = value->value.integer.value[i]; 64 chip->dac_volume[i] = value->value.integer.value[i];
65 changed = 1; 65 changed = 1;
@@ -1022,7 +1022,7 @@ static int add_controls(struct oxygen *chip,
1022 continue; 1022 continue;
1023 } 1023 }
1024 if (!strcmp(template.name, "Stereo Upmixing") && 1024 if (!strcmp(template.name, "Stereo Upmixing") &&
1025 chip->model.dac_channels == 2) 1025 chip->model.dac_channels_pcm == 2)
1026 continue; 1026 continue;
1027 if (!strcmp(template.name, "Mic Source Capture Enum") && 1027 if (!strcmp(template.name, "Mic Source Capture Enum") &&
1028 !(chip->model.device_config & AC97_FMIC_SWITCH)) 1028 !(chip->model.device_config & AC97_FMIC_SWITCH))
diff --git a/sound/pci/oxygen/oxygen_pcm.c b/sound/pci/oxygen/oxygen_pcm.c
index 60e4aa00c042..dc3c68f76df4 100644
--- a/sound/pci/oxygen/oxygen_pcm.c
+++ b/sound/pci/oxygen/oxygen_pcm.c
@@ -143,7 +143,7 @@ static int oxygen_open(struct snd_pcm_substream *substream,
143 runtime->hw.rate_min = 44100; 143 runtime->hw.rate_min = 44100;
144 break; 144 break;
145 case PCM_MULTICH: 145 case PCM_MULTICH:
146 runtime->hw.channels_max = chip->model.dac_channels; 146 runtime->hw.channels_max = chip->model.dac_channels_pcm;
147 break; 147 break;
148 } 148 }
149 if (chip->model.pcm_hardware_filter) 149 if (chip->model.pcm_hardware_filter)
diff --git a/sound/pci/oxygen/xonar_cs43xx.c b/sound/pci/oxygen/xonar_cs43xx.c
index de32895b3172..a25197ca39a1 100644
--- a/sound/pci/oxygen/xonar_cs43xx.c
+++ b/sound/pci/oxygen/xonar_cs43xx.c
@@ -426,7 +426,8 @@ static const struct oxygen_model model_xonar_d1 = {
426 PLAYBACK_1_TO_SPDIF | 426 PLAYBACK_1_TO_SPDIF |
427 CAPTURE_0_FROM_I2S_2 | 427 CAPTURE_0_FROM_I2S_2 |
428 AC97_FMIC_SWITCH, 428 AC97_FMIC_SWITCH,
429 .dac_channels = 8, 429 .dac_channels_pcm = 8,
430 .dac_channels_mixer = 8,
430 .dac_volume_min = 127 - 60, 431 .dac_volume_min = 127 - 60,
431 .dac_volume_max = 127, 432 .dac_volume_max = 127,
432 .function_flags = OXYGEN_FUNCTION_2WIRE, 433 .function_flags = OXYGEN_FUNCTION_2WIRE,
diff --git a/sound/pci/oxygen/xonar_pcm179x.c b/sound/pci/oxygen/xonar_pcm179x.c
index bf357c01afd2..b55149e9be81 100644
--- a/sound/pci/oxygen/xonar_pcm179x.c
+++ b/sound/pci/oxygen/xonar_pcm179x.c
@@ -1094,7 +1094,8 @@ static const struct oxygen_model model_xonar_d2 = {
1094 MIDI_OUTPUT | 1094 MIDI_OUTPUT |
1095 MIDI_INPUT | 1095 MIDI_INPUT |
1096 AC97_CD_INPUT, 1096 AC97_CD_INPUT,
1097 .dac_channels = 8, 1097 .dac_channels_pcm = 8,
1098 .dac_channels_mixer = 8,
1098 .dac_volume_min = 255 - 2*60, 1099 .dac_volume_min = 255 - 2*60,
1099 .dac_volume_max = 255, 1100 .dac_volume_max = 255,
1100 .misc_flags = OXYGEN_MISC_MIDI, 1101 .misc_flags = OXYGEN_MISC_MIDI,
@@ -1127,7 +1128,8 @@ static const struct oxygen_model model_xonar_hdav = {
1127 PLAYBACK_1_TO_SPDIF | 1128 PLAYBACK_1_TO_SPDIF |
1128 CAPTURE_0_FROM_I2S_2 | 1129 CAPTURE_0_FROM_I2S_2 |
1129 CAPTURE_1_FROM_SPDIF, 1130 CAPTURE_1_FROM_SPDIF,
1130 .dac_channels = 8, 1131 .dac_channels_pcm = 8,
1132 .dac_channels_mixer = 2,
1131 .dac_volume_min = 255 - 2*60, 1133 .dac_volume_min = 255 - 2*60,
1132 .dac_volume_max = 255, 1134 .dac_volume_max = 255,
1133 .misc_flags = OXYGEN_MISC_MIDI, 1135 .misc_flags = OXYGEN_MISC_MIDI,
@@ -1157,7 +1159,8 @@ static const struct oxygen_model model_xonar_st = {
1157 PLAYBACK_1_TO_SPDIF | 1159 PLAYBACK_1_TO_SPDIF |
1158 CAPTURE_0_FROM_I2S_2 | 1160 CAPTURE_0_FROM_I2S_2 |
1159 AC97_FMIC_SWITCH, 1161 AC97_FMIC_SWITCH,
1160 .dac_channels = 2, 1162 .dac_channels_pcm = 2,
1163 .dac_channels_mixer = 2,
1161 .dac_volume_min = 255 - 2*60, 1164 .dac_volume_min = 255 - 2*60,
1162 .dac_volume_max = 255, 1165 .dac_volume_max = 255,
1163 .function_flags = OXYGEN_FUNCTION_2WIRE, 1166 .function_flags = OXYGEN_FUNCTION_2WIRE,
@@ -1187,6 +1190,7 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip,
1187 break; 1190 break;
1188 case GPIO_DB_H6: 1191 case GPIO_DB_H6:
1189 chip->model.shortname = "Xonar HDAV1.3+H6"; 1192 chip->model.shortname = "Xonar HDAV1.3+H6";
1193 chip->model.dac_channels_mixer = 8;
1190 chip->model.private_data = 1; 1194 chip->model.private_data = 1;
1191 break; 1195 break;
1192 } 1196 }
@@ -1200,7 +1204,8 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip,
1200 break; 1204 break;
1201 case GPIO_DB_H6: 1205 case GPIO_DB_H6:
1202 chip->model.shortname = "Xonar ST+H6"; 1206 chip->model.shortname = "Xonar ST+H6";
1203 chip->model.dac_channels = 8; 1207 chip->model.dac_channels_pcm = 8;
1208 chip->model.dac_channels_mixer = 8;
1204 chip->model.private_data = 1; 1209 chip->model.private_data = 1;
1205 break; 1210 break;
1206 } 1211 }
diff --git a/sound/pci/oxygen/xonar_wm87x6.c b/sound/pci/oxygen/xonar_wm87x6.c
index 1705d1e93115..da92cc24eed2 100644
--- a/sound/pci/oxygen/xonar_wm87x6.c
+++ b/sound/pci/oxygen/xonar_wm87x6.c
@@ -1135,7 +1135,8 @@ static const struct oxygen_model model_xonar_ds = {
1135 .device_config = PLAYBACK_0_TO_I2S | 1135 .device_config = PLAYBACK_0_TO_I2S |
1136 PLAYBACK_1_TO_SPDIF | 1136 PLAYBACK_1_TO_SPDIF |
1137 CAPTURE_0_FROM_I2S_1, 1137 CAPTURE_0_FROM_I2S_1,
1138 .dac_channels = 8, 1138 .dac_channels_pcm = 8,
1139 .dac_channels_mixer = 8,
1139 .dac_volume_min = 255 - 2*60, 1140 .dac_volume_min = 255 - 2*60,
1140 .dac_volume_max = 255, 1141 .dac_volume_max = 255,
1141 .function_flags = OXYGEN_FUNCTION_SPI, 1142 .function_flags = OXYGEN_FUNCTION_SPI,