aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/oxygen_pcm.c
diff options
context:
space:
mode:
Diffstat (limited to 'sound/pci/oxygen/oxygen_pcm.c')
-rw-r--r--sound/pci/oxygen/oxygen_pcm.c46
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
316static unsigned int oxygen_i2s_format(struct snd_pcm_hw_params *hw_params) 316static 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
324static unsigned int oxygen_play_channels(struct snd_pcm_hw_params *hw_params) 324static 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);