Commit 3f49a66f authored by Roman Volkov's avatar Roman Volkov Committed by Clemens Ladisch

ALSA: oxygen: Xonar DG(X): cleanup and minor changes

Remove old SPI control functions, change anti-pop init
sequence, remove some garbage from structures. The 'Apply' functions
must be called at the mixer initialization, otherwise
mixer settings sometimes will not be applied at startup.
Signed-off-by: default avatarRoman Volkov <v1ron@mail.ru>
Signed-off-by: default avatarClemens Ladisch <clemens@ladisch.de>
parent fc114e9f
...@@ -123,29 +123,6 @@ int cs4245_shadow_control(struct oxygen *chip, enum cs4245_shadow_operation op) ...@@ -123,29 +123,6 @@ int cs4245_shadow_control(struct oxygen *chip, enum cs4245_shadow_operation op)
return 0; return 0;
} }
void cs4245_write(struct oxygen *chip, unsigned int reg, u8 value)
{
struct dg *data = chip->model_data;
oxygen_write_spi(chip, OXYGEN_SPI_TRIGGER |
OXYGEN_SPI_DATA_LENGTH_3 |
OXYGEN_SPI_CLOCK_1280 |
(0 << OXYGEN_SPI_CODEC_SHIFT) |
OXYGEN_SPI_CEN_LATCH_CLOCK_HI,
CS4245_SPI_ADDRESS_S |
CS4245_SPI_WRITE_S |
(reg << 8) | value);
data->cs4245_shadow[reg] = value;
}
void cs4245_write_cached(struct oxygen *chip, unsigned int reg, u8 value)
{
struct dg *data = chip->model_data;
if (value != data->cs4245_shadow[reg])
cs4245_write(chip, reg, value);
}
static void cs4245_init(struct oxygen *chip) static void cs4245_init(struct oxygen *chip)
{ {
struct dg *data = chip->model_data; struct dg *data = chip->model_data;
...@@ -171,8 +148,8 @@ static void cs4245_init(struct oxygen *chip) ...@@ -171,8 +148,8 @@ static void cs4245_init(struct oxygen *chip)
CS4245_PGA_SOFT | CS4245_PGA_ZERO; CS4245_PGA_SOFT | CS4245_PGA_ZERO;
data->cs4245_shadow[CS4245_PGA_B_CTRL] = 0; data->cs4245_shadow[CS4245_PGA_B_CTRL] = 0;
data->cs4245_shadow[CS4245_PGA_A_CTRL] = 0; data->cs4245_shadow[CS4245_PGA_A_CTRL] = 0;
data->cs4245_shadow[CS4245_DAC_A_CTRL] = 4; data->cs4245_shadow[CS4245_DAC_A_CTRL] = 8;
data->cs4245_shadow[CS4245_DAC_B_CTRL] = 4; data->cs4245_shadow[CS4245_DAC_B_CTRL] = 8;
cs4245_shadow_control(chip, CS4245_LOAD_FROM_SHADOW); cs4245_shadow_control(chip, CS4245_LOAD_FROM_SHADOW);
snd_component_add(chip->card, "CS4245"); snd_component_add(chip->card, "CS4245");
...@@ -182,15 +159,14 @@ void dg_init(struct oxygen *chip) ...@@ -182,15 +159,14 @@ void dg_init(struct oxygen *chip)
{ {
struct dg *data = chip->model_data; struct dg *data = chip->model_data;
data->output_sel = 0; data->output_sel = PLAYBACK_DST_HP_FP;
data->input_sel = 3; data->input_sel = CAPTURE_SRC_MIC;
data->hp_vol_att = 2 * 16;
cs4245_init(chip); cs4245_init(chip);
oxygen_write16(chip, OXYGEN_GPIO_CONTROL, oxygen_write16(chip, OXYGEN_GPIO_CONTROL,
GPIO_OUTPUT_ENABLE | GPIO_HP_REAR | GPIO_INPUT_ROUTE); GPIO_OUTPUT_ENABLE | GPIO_HP_REAR | GPIO_INPUT_ROUTE);
oxygen_write16(chip, OXYGEN_GPIO_DATA, GPIO_INPUT_ROUTE); /* anti-pop delay, wait some time before enabling the output */
msleep(2500); /* anti-pop delay */ msleep(2500);
oxygen_write16(chip, OXYGEN_GPIO_DATA, oxygen_write16(chip, OXYGEN_GPIO_DATA,
GPIO_OUTPUT_ENABLE | GPIO_INPUT_ROUTE); GPIO_OUTPUT_ENABLE | GPIO_INPUT_ROUTE);
} }
......
...@@ -32,7 +32,6 @@ struct dg { ...@@ -32,7 +32,6 @@ struct dg {
char input_vol[4][2]; char input_vol[4][2];
/* input select: mic/fp mic/line/aux */ /* input select: mic/fp mic/line/aux */
unsigned char input_sel; unsigned char input_sel;
u8 hp_vol_att;
}; };
/* Xonar DG control routines */ /* Xonar DG control routines */
...@@ -51,8 +50,6 @@ void dump_cs4245_registers(struct oxygen *chip, ...@@ -51,8 +50,6 @@ void dump_cs4245_registers(struct oxygen *chip,
void dg_suspend(struct oxygen *chip); void dg_suspend(struct oxygen *chip);
void dg_resume(struct oxygen *chip); void dg_resume(struct oxygen *chip);
void dg_cleanup(struct oxygen *chip); void dg_cleanup(struct oxygen *chip);
void cs4245_write(struct oxygen *chip, unsigned int reg, u8 value);
void cs4245_write_cached(struct oxygen *chip, unsigned int reg, u8 value);
extern struct oxygen_model model_xonar_dg; extern struct oxygen_model model_xonar_dg;
......
...@@ -435,12 +435,17 @@ static int dg_mixer_init(struct oxygen *chip) ...@@ -435,12 +435,17 @@ static int dg_mixer_init(struct oxygen *chip)
unsigned int i; unsigned int i;
int err; int err;
output_select_apply(chip);
input_source_apply(chip);
oxygen_update_dac_routing(chip);
for (i = 0; i < ARRAY_SIZE(dg_controls); ++i) { for (i = 0; i < ARRAY_SIZE(dg_controls); ++i) {
err = snd_ctl_add(chip->card, err = snd_ctl_add(chip->card,
snd_ctl_new1(&dg_controls[i], chip)); snd_ctl_new1(&dg_controls[i], chip));
if (err < 0) if (err < 0)
return err; return err;
} }
return 0; return 0;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment