Commit 92f99731 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'sound-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound

Pull sound fixes from Takashi Iwai:
 "Just two minor bug fixes: a fix for a regression in oxygen driver that
  was introduced in 3.14-rc1, and a stable fix for the return value of
  compress offload open callback"

* tag 'sound-3.14' of git://git.kernel.org/pub/scm/linux/kernel/git/tiwai/sound:
  ALSA: compress: Pass through return value of open ops callback
  ALSA: oxygen: Xonar DG(X): fix Stereo Upmixing regression
parents 88784396 749d3223
...@@ -133,7 +133,7 @@ static int snd_compr_open(struct inode *inode, struct file *f) ...@@ -133,7 +133,7 @@ static int snd_compr_open(struct inode *inode, struct file *f)
kfree(data); kfree(data);
} }
snd_card_unref(compr->card); snd_card_unref(compr->card);
return 0; return ret;
} }
static int snd_compr_free(struct inode *inode, struct file *f) static int snd_compr_free(struct inode *inode, struct file *f)
......
...@@ -238,11 +238,21 @@ void set_cs4245_adc_params(struct oxygen *chip, ...@@ -238,11 +238,21 @@ 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;
}
unsigned int adjust_dg_dac_routing(struct oxygen *chip, unsigned int adjust_dg_dac_routing(struct oxygen *chip,
unsigned int play_routing) unsigned int play_routing)
{ {
struct dg *data = chip->model_data; struct dg *data = chip->model_data;
unsigned int routing = 0;
switch (data->output_sel) { switch (data->output_sel) {
case PLAYBACK_DST_HP: case PLAYBACK_DST_HP:
...@@ -252,15 +262,23 @@ unsigned int adjust_dg_dac_routing(struct oxygen *chip, ...@@ -252,15 +262,23 @@ unsigned int adjust_dg_dac_routing(struct oxygen *chip,
OXYGEN_PLAY_MUTE67, OXYGEN_PLAY_MUTE_MASK); OXYGEN_PLAY_MUTE67, OXYGEN_PLAY_MUTE_MASK);
break; break;
case PLAYBACK_DST_MULTICH: 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_write8_masked(chip, OXYGEN_PLAY_ROUTING,
OXYGEN_PLAY_MUTE01, OXYGEN_PLAY_MUTE_MASK); OXYGEN_PLAY_MUTE01, OXYGEN_PLAY_MUTE_MASK);
break; break;
} }
return 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);
} }
void dump_cs4245_registers(struct oxygen *chip, void dump_cs4245_registers(struct oxygen *chip,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment