diff options
Diffstat (limited to 'sound/pci/oxygen/oxygen_pcm.c')
-rw-r--r-- | sound/pci/oxygen/oxygen_pcm.c | 46 |
1 files changed, 27 insertions, 19 deletions
diff --git a/sound/pci/oxygen/oxygen_pcm.c b/sound/pci/oxygen/oxygen_pcm.c index 5515c757ec4b..f24659af53d3 100644 --- a/sound/pci/oxygen/oxygen_pcm.c +++ b/sound/pci/oxygen/oxygen_pcm.c | |||
@@ -313,12 +313,12 @@ static unsigned int oxygen_i2s_magic2(struct snd_pcm_hw_params *hw_params) | |||
313 | return params_rate(hw_params) <= 96000 ? 0x10 : 0x00; | 313 | return params_rate(hw_params) <= 96000 ? 0x10 : 0x00; |
314 | } | 314 | } |
315 | 315 | ||
316 | static unsigned int oxygen_i2s_format(struct snd_pcm_hw_params *hw_params) | 316 | static unsigned int oxygen_i2s_bits(struct snd_pcm_hw_params *hw_params) |
317 | { | 317 | { |
318 | if (params_format(hw_params) == SNDRV_PCM_FORMAT_S32_LE) | 318 | if (params_format(hw_params) == SNDRV_PCM_FORMAT_S32_LE) |
319 | return OXYGEN_I2S_FORMAT_24; | 319 | return OXYGEN_I2S_BITS_24; |
320 | else | 320 | else |
321 | return OXYGEN_I2S_FORMAT_16; | 321 | return OXYGEN_I2S_BITS_16; |
322 | } | 322 | } |
323 | 323 | ||
324 | static unsigned int oxygen_play_channels(struct snd_pcm_hw_params *hw_params) | 324 | static unsigned int oxygen_play_channels(struct snd_pcm_hw_params *hw_params) |
@@ -386,13 +386,15 @@ static int oxygen_rec_a_hw_params(struct snd_pcm_substream *substream, | |||
386 | oxygen_write8_masked(chip, OXYGEN_REC_FORMAT, | 386 | oxygen_write8_masked(chip, OXYGEN_REC_FORMAT, |
387 | oxygen_format(hw_params) << OXYGEN_REC_FORMAT_A_SHIFT, | 387 | oxygen_format(hw_params) << OXYGEN_REC_FORMAT_A_SHIFT, |
388 | OXYGEN_REC_FORMAT_A_MASK); | 388 | OXYGEN_REC_FORMAT_A_MASK); |
389 | oxygen_write8_masked(chip, OXYGEN_I2S_A_FORMAT, | 389 | oxygen_write16_masked(chip, OXYGEN_I2S_A_FORMAT, |
390 | oxygen_rate(hw_params) | | 390 | oxygen_rate(hw_params) | |
391 | oxygen_i2s_magic2(hw_params) | | 391 | oxygen_i2s_magic2(hw_params) | |
392 | oxygen_i2s_format(hw_params), | 392 | chip->model->adc_i2s_format | |
393 | OXYGEN_I2S_RATE_MASK | | 393 | oxygen_i2s_bits(hw_params), |
394 | OXYGEN_I2S_MAGIC2_MASK | | 394 | OXYGEN_I2S_RATE_MASK | |
395 | OXYGEN_I2S_FORMAT_MASK); | 395 | OXYGEN_I2S_FORMAT_MASK | |
396 | OXYGEN_I2S_MAGIC2_MASK | | ||
397 | OXYGEN_I2S_BITS_MASK); | ||
396 | oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x08); | 398 | oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x08); |
397 | spin_unlock_irq(&chip->reg_lock); | 399 | spin_unlock_irq(&chip->reg_lock); |
398 | 400 | ||
@@ -416,13 +418,15 @@ static int oxygen_rec_b_hw_params(struct snd_pcm_substream *substream, | |||
416 | oxygen_write8_masked(chip, OXYGEN_REC_FORMAT, | 418 | oxygen_write8_masked(chip, OXYGEN_REC_FORMAT, |
417 | oxygen_format(hw_params) << OXYGEN_REC_FORMAT_B_SHIFT, | 419 | oxygen_format(hw_params) << OXYGEN_REC_FORMAT_B_SHIFT, |
418 | OXYGEN_REC_FORMAT_B_MASK); | 420 | OXYGEN_REC_FORMAT_B_MASK); |
419 | oxygen_write8_masked(chip, OXYGEN_I2S_B_FORMAT, | 421 | oxygen_write16_masked(chip, OXYGEN_I2S_B_FORMAT, |
420 | oxygen_rate(hw_params) | | 422 | oxygen_rate(hw_params) | |
421 | oxygen_i2s_magic2(hw_params) | | 423 | oxygen_i2s_magic2(hw_params) | |
422 | oxygen_i2s_format(hw_params), | 424 | chip->model->adc_i2s_format | |
423 | OXYGEN_I2S_RATE_MASK | | 425 | oxygen_i2s_bits(hw_params), |
424 | OXYGEN_I2S_MAGIC2_MASK | | 426 | OXYGEN_I2S_RATE_MASK | |
425 | OXYGEN_I2S_FORMAT_MASK); | 427 | OXYGEN_I2S_FORMAT_MASK | |
428 | OXYGEN_I2S_MAGIC2_MASK | | ||
429 | OXYGEN_I2S_BITS_MASK); | ||
426 | oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x10); | 430 | oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x10); |
427 | spin_unlock_irq(&chip->reg_lock); | 431 | spin_unlock_irq(&chip->reg_lock); |
428 | 432 | ||
@@ -493,8 +497,12 @@ static int oxygen_multich_hw_params(struct snd_pcm_substream *substream, | |||
493 | oxygen_format(hw_params) << OXYGEN_MULTICH_FORMAT_SHIFT, | 497 | oxygen_format(hw_params) << OXYGEN_MULTICH_FORMAT_SHIFT, |
494 | OXYGEN_MULTICH_FORMAT_MASK); | 498 | OXYGEN_MULTICH_FORMAT_MASK); |
495 | oxygen_write16_masked(chip, OXYGEN_I2S_MULTICH_FORMAT, | 499 | oxygen_write16_masked(chip, OXYGEN_I2S_MULTICH_FORMAT, |
496 | oxygen_rate(hw_params) | oxygen_i2s_format(hw_params), | 500 | oxygen_rate(hw_params) | |
497 | OXYGEN_I2S_RATE_MASK | OXYGEN_I2S_FORMAT_MASK); | 501 | chip->model->dac_i2s_format | |
502 | oxygen_i2s_bits(hw_params), | ||
503 | OXYGEN_I2S_RATE_MASK | | ||
504 | OXYGEN_I2S_FORMAT_MASK | | ||
505 | OXYGEN_I2S_BITS_MASK); | ||
498 | oxygen_clear_bits16(chip, OXYGEN_PLAY_ROUTING, 0x001f); | 506 | oxygen_clear_bits16(chip, OXYGEN_PLAY_ROUTING, 0x001f); |
499 | oxygen_update_dac_routing(chip); | 507 | oxygen_update_dac_routing(chip); |
500 | oxygen_update_spdif_source(chip); | 508 | oxygen_update_spdif_source(chip); |