]> www.pilppa.org Git - linux-2.6-omap-h63xx.git/blobdiff - sound/pci/oxygen/oxygen.c
[ALSA] oxygen: add control filter to model struct
[linux-2.6-omap-h63xx.git] / sound / pci / oxygen / oxygen.c
index e2dda16d5dcc0caa8fc2a327738b53c9811ccbbb..adf91cc3e1ae5b836bdc4af69af994408577363d 100644 (file)
@@ -29,6 +29,7 @@
  */
 
 #include <linux/pci.h>
+#include <sound/control.h>
 #include <sound/core.h>
 #include <sound/initval.h>
 #include <sound/pcm.h>
@@ -244,18 +245,27 @@ static void set_ak5385_params(struct oxygen *chip,
 
 static const DECLARE_TLV_DB_LINEAR(ak4396_db_scale, TLV_DB_GAIN_MUTE, 0);
 
+static int ak4396_control_filter(struct snd_kcontrol_new *template)
+{
+       if (!strcmp(template->name, "Master Playback Volume")) {
+               template->access |= SNDRV_CTL_ELEM_ACCESS_TLV_READ;
+               template->tlv.p = ak4396_db_scale;
+       }
+       return 0;
+}
+
 static const struct oxygen_model model_generic = {
        .shortname = "C-Media CMI8788",
        .longname = "C-Media Oxygen HD Audio",
        .chip = "CMI8788",
        .owner = THIS_MODULE,
        .init = generic_init,
+       .control_filter = ak4396_control_filter,
        .cleanup = generic_cleanup,
        .set_dac_params = set_ak4396_params,
        .set_adc_params = set_wm8785_params,
        .update_dac_volume = update_ak4396_volume,
        .update_dac_mute = update_ak4396_mute,
-       .dac_tlv = ak4396_db_scale,
        .used_channels = OXYGEN_CHANNEL_A |
                         OXYGEN_CHANNEL_C |
                         OXYGEN_CHANNEL_SPDIF |
@@ -269,12 +279,12 @@ static const struct oxygen_model model_meridian = {
        .chip = "CMI8788",
        .owner = THIS_MODULE,
        .init = meridian_init,
+       .control_filter = ak4396_control_filter,
        .cleanup = generic_cleanup,
        .set_dac_params = set_ak4396_params,
        .set_adc_params = set_ak5385_params,
        .update_dac_volume = update_ak4396_volume,
        .update_dac_mute = update_ak4396_mute,
-       .dac_tlv = ak4396_db_scale,
        .used_channels = OXYGEN_CHANNEL_B |
                         OXYGEN_CHANNEL_C |
                         OXYGEN_CHANNEL_SPDIF |