|
@@ -262,33 +262,29 @@ static void set_cs4245_adc_params(struct oxygen *chip,
|
|
cs4245_write_spi(chip, CS4245_MCLK_FREQ);
|
|
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,
|
|
static unsigned int adjust_dg_dac_routing(struct oxygen *chip,
|
|
unsigned int play_routing)
|
|
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,
|
|
static int output_switch_info(struct snd_kcontrol *ctl,
|