ALSA: oxygen: modify adjust_dg_dac_routing function
[deliverable/linux.git] / sound / pci / oxygen / xonar_dg.c
index 81c004c78766fc8768ac4ea6042a8faa58ab70e2..329da5434556ab316e32b87af09983abca620131 100644 (file)
@@ -262,33 +262,29 @@ static void set_cs4245_adc_params(struct oxygen *chip,
        cs4245_write_spi(chip, CS4245_MCLK_FREQ);
 }
 
-static inline unsigned int shift_bits(unsigned int value,
-                                     unsigned int shift_from,
-                                     unsigned int shift_to,
-                                     unsigned int mask)
-{
-       if (shift_from < shift_to)
-               return (value << (shift_to - shift_from)) & mask;
-       else
-               return (value >> (shift_from - shift_to)) & mask;
-}
-
 static unsigned int adjust_dg_dac_routing(struct oxygen *chip,
                                          unsigned int play_routing)
 {
-       return (play_routing & OXYGEN_PLAY_DAC0_SOURCE_MASK) |
-              shift_bits(play_routing,
-                         OXYGEN_PLAY_DAC2_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC1_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC1_SOURCE_MASK) |
-              shift_bits(play_routing,
-                         OXYGEN_PLAY_DAC1_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC2_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC2_SOURCE_MASK) |
-              shift_bits(play_routing,
-                         OXYGEN_PLAY_DAC0_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC3_SOURCE_SHIFT,
-                         OXYGEN_PLAY_DAC3_SOURCE_MASK);
+       struct dg *data = chip->model_data;
+       unsigned int routing = 0;
+
+       switch (data->pcm_output) {
+       case PLAYBACK_DST_HP:
+       case PLAYBACK_DST_HP_FP:
+               oxygen_write8_masked(chip, OXYGEN_PLAY_ROUTING,
+                       OXYGEN_PLAY_MUTE23 | OXYGEN_PLAY_MUTE45 |
+                       OXYGEN_PLAY_MUTE67, OXYGEN_PLAY_MUTE_MASK);
+               break;
+       case PLAYBACK_DST_MULTICH:
+               routing = (0 << OXYGEN_PLAY_DAC0_SOURCE_SHIFT) |
+                         (2 << OXYGEN_PLAY_DAC1_SOURCE_SHIFT) |
+                         (1 << OXYGEN_PLAY_DAC2_SOURCE_SHIFT) |
+                         (0 << OXYGEN_PLAY_DAC3_SOURCE_SHIFT);
+               oxygen_write8_masked(chip, OXYGEN_PLAY_ROUTING,
+                       OXYGEN_PLAY_MUTE01, OXYGEN_PLAY_MUTE_MASK);
+               break;
+       }
+       return routing;
 }
 
 static int output_switch_info(struct snd_kcontrol *ctl,
This page took 0.031101 seconds and 5 git commands to generate.