aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen/oxygen_pcm.c
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2008-01-17 03:05:09 -0500
committerJaroslav Kysela <perex@perex.cz>2008-01-31 11:30:03 -0500
commit05855ba3f405d02c4530072527d2b1c72e3b38a9 (patch)
treea3a53083e0e773d606f56922f927f719568026d9 /sound/pci/oxygen/oxygen_pcm.c
parentb8c5b53e1f104a9f877f947cdb86d5c7208d6c9a (diff)
[ALSA] oxygen: make the I2S format configurable
Add proper register bit symbols for the I2S format field, and allow card models to configure the I2S format to be used for the DACs and ADCs. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Jaroslav Kysela <perex@perex.cz>
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);