diff options
author | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-20 13:56:37 -0400 |
---|---|---|
committer | Linus Torvalds <torvalds@linux-foundation.org> | 2014-03-20 13:56:37 -0400 |
commit | 92f99731e61a3487781762d4e6ae8b1576e68e07 (patch) | |
tree | 28ae9bded27966cc3964a17669af7ee5c33a9cec | |
parent | 887843961c4b4681ee993c36d4997bf4b4aa8253 (diff) | |
parent | 749d32237bf39e6576dd95bfdf24e4378e51716c (diff) |
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
-rw-r--r-- | sound/core/compress_offload.c | 2 | ||||
-rw-r--r-- | sound/pci/oxygen/xonar_dg.c | 30 |
2 files changed, 25 insertions, 7 deletions
diff --git a/sound/core/compress_offload.c b/sound/core/compress_offload.c index 7a20897d33db..7403f348ed14 100644 --- a/sound/core/compress_offload.c +++ b/sound/core/compress_offload.c | |||
@@ -133,7 +133,7 @@ static int snd_compr_open(struct inode *inode, struct file *f) | |||
133 | kfree(data); | 133 | kfree(data); |
134 | } | 134 | } |
135 | snd_card_unref(compr->card); | 135 | snd_card_unref(compr->card); |
136 | return 0; | 136 | return ret; |
137 | } | 137 | } |
138 | 138 | ||
139 | static int snd_compr_free(struct inode *inode, struct file *f) | 139 | static int snd_compr_free(struct inode *inode, struct file *f) |
diff --git a/sound/pci/oxygen/xonar_dg.c b/sound/pci/oxygen/xonar_dg.c index ed6f199f8a38..4cf3200e988b 100644 --- a/sound/pci/oxygen/xonar_dg.c +++ b/sound/pci/oxygen/xonar_dg.c | |||
@@ -238,11 +238,21 @@ void set_cs4245_adc_params(struct oxygen *chip, | |||
238 | cs4245_write_spi(chip, CS4245_MCLK_FREQ); | 238 | cs4245_write_spi(chip, CS4245_MCLK_FREQ); |
239 | } | 239 | } |
240 | 240 | ||
241 | static inline unsigned int shift_bits(unsigned int value, | ||
242 | unsigned int shift_from, | ||
243 | unsigned int shift_to, | ||
244 | unsigned int mask) | ||
245 | { | ||
246 | if (shift_from < shift_to) | ||
247 | return (value << (shift_to - shift_from)) & mask; | ||
248 | else | ||
249 | return (value >> (shift_from - shift_to)) & mask; | ||
250 | } | ||
251 | |||
241 | unsigned int adjust_dg_dac_routing(struct oxygen *chip, | 252 | unsigned int adjust_dg_dac_routing(struct oxygen *chip, |
242 | unsigned int play_routing) | 253 | unsigned int play_routing) |
243 | { | 254 | { |
244 | struct dg *data = chip->model_data; | 255 | struct dg *data = chip->model_data; |
245 | unsigned int routing = 0; | ||
246 | 256 | ||
247 | switch (data->output_sel) { | 257 | switch (data->output_sel) { |
248 | case PLAYBACK_DST_HP: | 258 | case PLAYBACK_DST_HP: |
@@ -252,15 +262,23 @@ unsigned int adjust_dg_dac_routing(struct oxygen *chip, | |||
252 | OXYGEN_PLAY_MUTE67, OXYGEN_PLAY_MUTE_MASK); | 262 | OXYGEN_PLAY_MUTE67, OXYGEN_PLAY_MUTE_MASK); |
253 | break; | 263 | break; |
254 | case PLAYBACK_DST_MULTICH: | 264 | case PLAYBACK_DST_MULTICH: |
255 | routing = (0 << OXYGEN_PLAY_DAC0_SOURCE_SHIFT) | | ||
256 | (2 << OXYGEN_PLAY_DAC1_SOURCE_SHIFT) | | ||
257 | (1 << OXYGEN_PLAY_DAC2_SOURCE_SHIFT) | | ||
258 | (0 << OXYGEN_PLAY_DAC3_SOURCE_SHIFT); | ||
259 | oxygen_write8_masked(chip, OXYGEN_PLAY_ROUTING, | 265 | oxygen_write8_masked(chip, OXYGEN_PLAY_ROUTING, |
260 | OXYGEN_PLAY_MUTE01, OXYGEN_PLAY_MUTE_MASK); | 266 | OXYGEN_PLAY_MUTE01, OXYGEN_PLAY_MUTE_MASK); |
261 | break; | 267 | break; |
262 | } | 268 | } |
263 | return routing; | 269 | return (play_routing & OXYGEN_PLAY_DAC0_SOURCE_MASK) | |
270 | shift_bits(play_routing, | ||
271 | OXYGEN_PLAY_DAC2_SOURCE_SHIFT, | ||
272 | OXYGEN_PLAY_DAC1_SOURCE_SHIFT, | ||
273 | OXYGEN_PLAY_DAC1_SOURCE_MASK) | | ||
274 | shift_bits(play_routing, | ||
275 | OXYGEN_PLAY_DAC1_SOURCE_SHIFT, | ||
276 | OXYGEN_PLAY_DAC2_SOURCE_SHIFT, | ||
277 | OXYGEN_PLAY_DAC2_SOURCE_MASK) | | ||
278 | shift_bits(play_routing, | ||
279 | OXYGEN_PLAY_DAC0_SOURCE_SHIFT, | ||
280 | OXYGEN_PLAY_DAC3_SOURCE_SHIFT, | ||
281 | OXYGEN_PLAY_DAC3_SOURCE_MASK); | ||
264 | } | 282 | } |
265 | 283 | ||
266 | void dump_cs4245_registers(struct oxygen *chip, | 284 | void dump_cs4245_registers(struct oxygen *chip, |