aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/virtuoso.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2008-04-16 09:13:36 +0200
committerTakashi Iwai <tiwai@suse.de>2008-04-24 12:00:36 +0200
commit193e813814775b1b1574515fc6f11e61b29a54f7 (patch)
tree4c910d3dd308aa13ddf10d8836dad3171f21ab4b /sound/pci/oxygen/virtuoso.c
parent0c0e6daf14183fb1cd0dea054ecf81165abbdc83 (diff)
downloadkernel_samsung_smdk4412-193e813814775b1b1574515fc6f11e61b29a54f7.zip
kernel_samsung_smdk4412-193e813814775b1b1574515fc6f11e61b29a54f7.tar.gz
kernel_samsung_smdk4412-193e813814775b1b1574515fc6f11e61b29a54f7.tar.bz2
[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 6f5c253..37f53a8 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)
static void xonar_dx_init(struct oxygen *chip)
{
struct xonar_data *data = chip->model_data;
- unsigned int i;
- for (i = 0; i < 8; ++i)
- chip->dac_volume[i] = 127;
data->anti_pop_delay = 800;
data->output_enable_bit = GPIO_DX_OUTPUT_ENABLE;
data->ext_power_reg = OXYGEN_GPI_DATA;
@@ -414,26 +411,6 @@ static void xonar_gpio_changed(struct oxygen *chip)
}
}
-static int pcm1796_volume_info(struct snd_kcontrol *ctl,
- struct snd_ctl_elem_info *info)
-{
- info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
- info->count = 8;
- info->value.integer.min = 0x0f;
- info->value.integer.max = 0xff;
- return 0;
-}
-
-static int cs4362a_volume_info(struct snd_kcontrol *ctl,
- struct snd_ctl_elem_info *info)
-{
- info->type = SNDRV_CTL_ELEM_TYPE_INTEGER;
- info->count = 8;
- info->value.integer.min = 0;
- info->value.integer.max = 127;
- return 0;
-}
-
static int alt_switch_get(struct snd_kcontrol *ctl,
struct snd_ctl_elem_value *value)
{
@@ -526,7 +503,6 @@ static int xonar_d2_control_filter(struct snd_kcontrol_new *template)
{
if (!strcmp(template->name, "Master Playback Volume")) {
template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
- template->info = pcm1796_volume_info;
template->tlv.p = pcm1796_db_scale;
} else if (!strncmp(template->name, "CD Capture ", 11)) {
/* 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)
{
if (!strcmp(template->name, "Master Playback Volume")) {
template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
- template->info = cs4362a_volume_info;
template->tlv.p = cs4362a_db_scale;
} else if (!strncmp(template->name, "CD Capture ", 11)) {
return 1; /* no CD input */
@@ -577,6 +552,8 @@ static const struct oxygen_model xonar_models[] = {
CAPTURE_0_FROM_I2S_2 |
CAPTURE_1_FROM_SPDIF,
.dac_channels = 8,
+ .dac_volume_min = 0x0f,
+ .dac_volume_max = 0xff,
.misc_flags = OXYGEN_MISC_MIDI,
.function_flags = OXYGEN_FUNCTION_SPI |
OXYGEN_FUNCTION_ENABLE_SPI_4_5,
@@ -603,6 +580,8 @@ static const struct oxygen_model xonar_models[] = {
CAPTURE_0_FROM_I2S_2 |
CAPTURE_1_FROM_SPDIF,
.dac_channels = 8,
+ .dac_volume_min = 0x0f,
+ .dac_volume_max = 0xff,
.misc_flags = OXYGEN_MISC_MIDI,
.function_flags = OXYGEN_FUNCTION_SPI |
OXYGEN_FUNCTION_ENABLE_SPI_4_5,
@@ -629,6 +608,8 @@ static const struct oxygen_model xonar_models[] = {
PLAYBACK_1_TO_SPDIF |
CAPTURE_0_FROM_I2S_2,
.dac_channels = 8,
+ .dac_volume_min = 0,
+ .dac_volume_max = 127,
.function_flags = OXYGEN_FUNCTION_2WIRE,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,