Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 81658
b: refs/heads/master
c: 05855ba
h: refs/heads/master
v: v3
  • Loading branch information
Clemens Ladisch authored and Jaroslav Kysela committed Jan 31, 2008
1 parent ea82c33 commit 3cc0e14
Show file tree
Hide file tree
Showing 6 changed files with 45 additions and 31 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: b8c5b53e1f104a9f877f947cdb86d5c7208d6c9a
refs/heads/master: 05855ba3f405d02c4530072527d2b1c72e3b38a9
4 changes: 4 additions & 0 deletions trunk/sound/pci/oxygen/oxygen.c
Original file line number Diff line number Diff line change
Expand Up @@ -285,6 +285,8 @@ static const struct oxygen_model model_generic = {
OXYGEN_CHANNEL_MULTICH |
OXYGEN_CHANNEL_AC97,
.function_flags = OXYGEN_FUNCTION_ENABLE_SPI_4_5,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
};
static const struct oxygen_model model_meridian = {
.shortname = "C-Media CMI8788",
Expand All @@ -304,6 +306,8 @@ static const struct oxygen_model model_meridian = {
OXYGEN_CHANNEL_MULTICH |
OXYGEN_CHANNEL_AC97,
.function_flags = OXYGEN_FUNCTION_ENABLE_SPI_4_5,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
};

static int __devinit generic_oxygen_probe(struct pci_dev *pci,
Expand Down
2 changes: 2 additions & 0 deletions trunk/sound/pci/oxygen/oxygen.h
Original file line number Diff line number Diff line change
Expand Up @@ -86,6 +86,8 @@ struct oxygen_model {
void (*update_dac_mute)(struct oxygen *chip);
u8 used_channels;
u8 function_flags;
u16 dac_i2s_format;
u16 adc_i2s_format;
};

/* oxygen_lib.c */
Expand Down
46 changes: 27 additions & 19 deletions trunk/sound/pci/oxygen/oxygen_pcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -313,12 +313,12 @@ static unsigned int oxygen_i2s_magic2(struct snd_pcm_hw_params *hw_params)
return params_rate(hw_params) <= 96000 ? 0x10 : 0x00;
}

static unsigned int oxygen_i2s_format(struct snd_pcm_hw_params *hw_params)
static unsigned int oxygen_i2s_bits(struct snd_pcm_hw_params *hw_params)
{
if (params_format(hw_params) == SNDRV_PCM_FORMAT_S32_LE)
return OXYGEN_I2S_FORMAT_24;
return OXYGEN_I2S_BITS_24;
else
return OXYGEN_I2S_FORMAT_16;
return OXYGEN_I2S_BITS_16;
}

static unsigned int oxygen_play_channels(struct snd_pcm_hw_params *hw_params)
Expand Down Expand Up @@ -386,13 +386,15 @@ static int oxygen_rec_a_hw_params(struct snd_pcm_substream *substream,
oxygen_write8_masked(chip, OXYGEN_REC_FORMAT,
oxygen_format(hw_params) << OXYGEN_REC_FORMAT_A_SHIFT,
OXYGEN_REC_FORMAT_A_MASK);
oxygen_write8_masked(chip, OXYGEN_I2S_A_FORMAT,
oxygen_rate(hw_params) |
oxygen_i2s_magic2(hw_params) |
oxygen_i2s_format(hw_params),
OXYGEN_I2S_RATE_MASK |
OXYGEN_I2S_MAGIC2_MASK |
OXYGEN_I2S_FORMAT_MASK);
oxygen_write16_masked(chip, OXYGEN_I2S_A_FORMAT,
oxygen_rate(hw_params) |
oxygen_i2s_magic2(hw_params) |
chip->model->adc_i2s_format |
oxygen_i2s_bits(hw_params),
OXYGEN_I2S_RATE_MASK |
OXYGEN_I2S_FORMAT_MASK |
OXYGEN_I2S_MAGIC2_MASK |
OXYGEN_I2S_BITS_MASK);
oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x08);
spin_unlock_irq(&chip->reg_lock);

Expand All @@ -416,13 +418,15 @@ static int oxygen_rec_b_hw_params(struct snd_pcm_substream *substream,
oxygen_write8_masked(chip, OXYGEN_REC_FORMAT,
oxygen_format(hw_params) << OXYGEN_REC_FORMAT_B_SHIFT,
OXYGEN_REC_FORMAT_B_MASK);
oxygen_write8_masked(chip, OXYGEN_I2S_B_FORMAT,
oxygen_rate(hw_params) |
oxygen_i2s_magic2(hw_params) |
oxygen_i2s_format(hw_params),
OXYGEN_I2S_RATE_MASK |
OXYGEN_I2S_MAGIC2_MASK |
OXYGEN_I2S_FORMAT_MASK);
oxygen_write16_masked(chip, OXYGEN_I2S_B_FORMAT,
oxygen_rate(hw_params) |
oxygen_i2s_magic2(hw_params) |
chip->model->adc_i2s_format |
oxygen_i2s_bits(hw_params),
OXYGEN_I2S_RATE_MASK |
OXYGEN_I2S_FORMAT_MASK |
OXYGEN_I2S_MAGIC2_MASK |
OXYGEN_I2S_BITS_MASK);
oxygen_clear_bits8(chip, OXYGEN_REC_ROUTING, 0x10);
spin_unlock_irq(&chip->reg_lock);

Expand Down Expand Up @@ -493,8 +497,12 @@ static int oxygen_multich_hw_params(struct snd_pcm_substream *substream,
oxygen_format(hw_params) << OXYGEN_MULTICH_FORMAT_SHIFT,
OXYGEN_MULTICH_FORMAT_MASK);
oxygen_write16_masked(chip, OXYGEN_I2S_MULTICH_FORMAT,
oxygen_rate(hw_params) | oxygen_i2s_format(hw_params),
OXYGEN_I2S_RATE_MASK | OXYGEN_I2S_FORMAT_MASK);
oxygen_rate(hw_params) |
chip->model->dac_i2s_format |
oxygen_i2s_bits(hw_params),
OXYGEN_I2S_RATE_MASK |
OXYGEN_I2S_FORMAT_MASK |
OXYGEN_I2S_BITS_MASK);
oxygen_clear_bits16(chip, OXYGEN_PLAY_ROUTING, 0x001f);
oxygen_update_dac_routing(chip);
oxygen_update_spdif_source(chip);
Expand Down
16 changes: 9 additions & 7 deletions trunk/sound/pci/oxygen/oxygen_regs.h
Original file line number Diff line number Diff line change
Expand Up @@ -105,18 +105,20 @@
#define OXYGEN_RATE_96000 0x0005
#define OXYGEN_RATE_176400 0x0006
#define OXYGEN_RATE_192000 0x0007
#define OXYGEN_I2S_MAGIC1_MASK 0x0008
#define OXYGEN_I2S_FORMAT_MASK 0x0008
#define OXYGEN_I2S_FORMAT_I2S 0x0000
#define OXYGEN_I2S_FORMAT_LJUST 0x0008
#define OXYGEN_I2S_MAGIC2_MASK 0x0030
#define OXYGEN_I2S_FORMAT_MASK 0x00c0
#define OXYGEN_I2S_FORMAT_16 0x0000
#define OXYGEN_I2S_FORMAT_20 0x0040
#define OXYGEN_I2S_FORMAT_24 0x0080
#define OXYGEN_I2S_FORMAT_32 0x00c0
#define OXYGEN_I2S_BITS_MASK 0x00c0
#define OXYGEN_I2S_BITS_16 0x0000
#define OXYGEN_I2S_BITS_20 0x0040
#define OXYGEN_I2S_BITS_24 0x0080
#define OXYGEN_I2S_BITS_32 0x00c0

#define OXYGEN_I2S_A_FORMAT 0x62
#define OXYGEN_I2S_B_FORMAT 0x64
#define OXYGEN_I2S_C_FORMAT 0x66
/* OXYGEN_I2S_RATE_* and OXYGEN_I2S_FORMAT_* */
/* like OXYGEN_I2S_MULTICH_FORMAT */

#define OXYGEN_SPDIF_CONTROL 0x70
#define OXYGEN_SPDIF_OUT_ENABLE 0x00000002
Expand Down
6 changes: 2 additions & 4 deletions trunk/sound/pci/oxygen/virtuoso.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,10 +102,6 @@ static void xonar_init(struct oxygen *chip)

oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, 0x8c);
oxygen_write16_masked(chip, OXYGEN_GPIO_DATA, 0x00, 0x8c);
#if 0
oxygen_clear_bits16(chip, OXYGEN_I2S_MULTICH_FORMAT,
OXYGEN_I2S_MAGIC1_MASK);
#endif
oxygen_ac97_set_bits(chip, 0, 0x62, 0x0080);
msleep(300);
oxygen_set_bits16(chip, OXYGEN_GPIO_CONTROL, 0x100);
Expand Down Expand Up @@ -253,6 +249,8 @@ static const struct oxygen_model model_xonar = {
OXYGEN_CHANNEL_SPDIF |
OXYGEN_CHANNEL_MULTICH,
.function_flags = OXYGEN_FUNCTION_ENABLE_SPI_4_5,
.dac_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
.adc_i2s_format = OXYGEN_I2S_FORMAT_LJUST,
};

static int __devinit xonar_probe(struct pci_dev *pci,
Expand Down

0 comments on commit 3cc0e14

Please sign in to comment.