aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/virtuoso.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2008-04-16 03:13:36 -0400
committerTakashi Iwai <tiwai@suse.de>2008-04-24 06:00:36 -0400
commit193e813814775b1b1574515fc6f11e61b29a54f7 (patch)
tree4c910d3dd308aa13ddf10d8836dad3171f21ab4b /sound/pci/oxygen/virtuoso.c
parent0c0e6daf14183fb1cd0dea054ecf81165abbdc83 (diff)
[ALSA] oxygen: generalize handling of DAC volume limits
Add fields for the DAC volume limits to the module structure so that model drivers do not need to install their own control info handlers. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/oxygen/virtuoso.c')
-rw-r--r--sound/pci/oxygen/virtuoso.c31
1 files changed, 6 insertions, 25 deletions
diff --git a/sound/pci/oxygen/virtuoso.c b/sound/pci/oxygen/virtuoso.c
index 6f5c2531abd0..37f53a8c5888 100644
--- a/sound/pci/oxygen/virtuoso.c
+++ b/sound/pci/oxygen/virtuoso.c
@@ -219,10 +219,7 @@ static void xonar_d2x_init(struct oxygen *chip)
219static void xonar_dx_init(struct oxygen *chip) 219static void xonar_dx_init(struct oxygen *chip)
220{ 220{
221 struct xonar_data *data = chip->model_data; 221 struct xonar_data *data = chip->model_data;
222 unsigned int i;
223 222
224 for (i = 0; i < 8; ++i)
225 chip->dac_volume[i] = 127;
226 data->anti_pop_delay = 800; 223 data->anti_pop_delay = 800;
227 data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE; 224 data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE;
228 data->ext_power_reg = OXYGEN_GPI_DATA; 225 data->ext_power_reg = OXYGEN_GPI_DATA;
@@ -414,26 +411,6 @@ static void xonar_gpio_changed(struct oxygen *chip)
414 } 411 }
415} 412}
416 413
417static int pcm1796_volume_info(struct snd_kcontrol *ctl,
418 struct snd_ctl_elem_info *info)
419{
420 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
421 info->count = 8;
422 info->value.integer.min = 0x0f;
423 info->value.integer.max = 0xff;
424 return 0;
425}
426
427static int cs4362a_volume_info(struct snd_kcontrol *ctl,
428 struct snd_ctl_elem_info *info)
429{
430 info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
431 info->count = 8;
432 info->value.integer.min = 0;
433 info->value.integer.max = 127;
434 return 0;
435}
436
437static int alt_switch_get(struct snd_kcontrol *ctl, 414static int alt_switch_get(struct snd_kcontrol *ctl,
438 struct snd_ctl_elem_value *value) 415 struct snd_ctl_elem_value *value)
439{ 416{
@@ -526,7 +503,6 @@ static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
526{ 503{
527 if (!strcmp(template->name, "Master Playback Volume")) { 504 if (!strcmp(template->name, "Master Playback Volume")) {
528 template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; 505 template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
529 template->info = pcm1796_volume_info;
530 template->tlv.p = pcm1796_db_scale; 506 template->tlv.p = pcm1796_db_scale;
531 } else if (!strncmp(template->name, "CD Capture ", 11)) { 507 } else if (!strncmp(template->name, "CD Capture ", 11)) {
532 /* CD in is actually connected to the video in pin */ 508 /* CD in is actually connected to the video in pin */
@@ -539,7 +515,6 @@ static int xonar_dx_control_filter(struct snd_kcontrol_new *template)
539{ 515{
540 if (!strcmp(template->name, "Master Playback Volume")) { 516 if (!strcmp(template->name, "Master Playback Volume")) {
541 template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ; 517 template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
542 template->info = cs4362a_volume_info;
543 template->tlv.p = cs4362a_db_scale; 518 template->tlv.p = cs4362a_db_scale;
544 } else if (!strncmp(template->name, "CD Capture ", 11)) { 519 } else if (!strncmp(template->name, "CD Capture ", 11)) {
545 return 1; /* no CD input */ 520 return 1; /* no CD input */
@@ -577,6 +552,8 @@ static const struct oxygen_model xonar_models[] = {
577 CAPTURE_0_FROM_I2S_2 | 552 CAPTURE_0_FROM_I2S_2 |
578 CAPTURE_1_FROM_SPDIF, 553 CAPTURE_1_FROM_SPDIF,
579 .dac_channels = 8, 554 .dac_channels = 8,
555 .dac_volume_min = 0x0f,
556 .dac_volume_max = 0xff,
580 .misc_flags = OXYGEN_MISC_MIDI, 557 .misc_flags = OXYGEN_MISC_MIDI,
581 .function_flags = OXYGEN_FUNCTION_SPI | 558 .function_flags = OXYGEN_FUNCTION_SPI |
582 OXYGEN_FUNCTION_ENABLE_SPI_4_5, 559 OXYGEN_FUNCTION_ENABLE_SPI_4_5,
@@ -603,6 +580,8 @@ static const struct oxygen_model xonar_models[] = {
603 CAPTURE_0_FROM_I2S_2 | 580 CAPTURE_0_FROM_I2S_2 |
604 CAPTURE_1_FROM_SPDIF, 581 CAPTURE_1_FROM_SPDIF,
605 .dac_channels = 8, 582 .dac_channels = 8,
583 .dac_volume_min = 0x0f,
584 .dac_volume_max = 0xff,
606 .misc_flags = OXYGEN_MISC_MIDI, 585 .misc_flags = OXYGEN_MISC_MIDI,
607 .function_flags = OXYGEN_FUNCTION_SPI | 586 .function_flags = OXYGEN_FUNCTION_SPI |
608 OXYGEN_FUNCTION_ENABLE_SPI_4_5, 587 OXYGEN_FUNCTION_ENABLE_SPI_4_5,
@@ -629,6 +608,8 @@ static const struct oxygen_model xonar_models[] = {
629 PLAYBACK_1_TO_SPDIF | 608 PLAYBACK_1_TO_SPDIF |
630 CAPTURE_0_FROM_I2S_2, 609 CAPTURE_0_FROM_I2S_2,
631 .dac_channels = 8, 610 .dac_channels = 8,
611 .dac_volume_min = 0,
612 .dac_volume_max = 127,
632 .function_flags = OXYGEN_FUNCTION_2WIRE, 613 .function_flags = OXYGEN_FUNCTION_2WIRE,
633 .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST, 614 .dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
634 .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST, 615 .adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,