ALSA: oxygen: Xonar DG(X): cleanup and minor changes
authorRoman Volkov <v1ron@mail.ru>
Fri, 24 Jan 2014 12:18:20 +0000 (16:18 +0400)
committerClemens Ladisch <clemens@ladisch.de>
Wed, 29 Jan 2014 19:45:53 +0000 (20:45 +0100)
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: Roman Volkov <v1ron@mail.ru>
Signed-off-by: Clemens Ladisch <clemens@ladisch.de>
sound/pci/oxygen/xonar_dg.c
sound/pci/oxygen/xonar_dg.h
sound/pci/oxygen/xonar_dg_mixer.c

index 6cec934e66287f73ec2cc45996131823ee4acea1..ed6f199f8a38ac3d1412fc8efa4010ba23ecee4d 100644 (file)
@@ -123,29 +123,6 @@ int cs4245_shadow_control(struct oxygen *chip, enum cs4245_shadow_operation op)
        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)
 {
        struct dg *data = chip->model_data;
@@ -171,8 +148,8 @@ static void cs4245_init(struct oxygen *chip)
                CS4245_PGA_SOFT | CS4245_PGA_ZERO;
        data->cs4245_shadow[CS4245_PGA_B_CTRL] = 0;
        data->cs4245_shadow[CS4245_PGA_A_CTRL] = 0;
-       data->cs4245_shadow[CS4245_DAC_A_CTRL] = 4;
-       data->cs4245_shadow[CS4245_DAC_B_CTRL] = 4;
+       data->cs4245_shadow[CS4245_DAC_A_CTRL] = 8;
+       data->cs4245_shadow[CS4245_DAC_B_CTRL] = 8;
 
        cs4245_shadow_control(chip, CS4245_LOAD_FROM_SHADOW);
        snd_component_add(chip->card, "CS4245");
@@ -182,15 +159,14 @@ void dg_init(struct oxygen *chip)
 {
        struct dg *data = chip->model_data;
 
-       data->output_sel = 0;
-       data->input_sel = 3;
-       data->hp_vol_att = 2 * 16;
+       data->output_sel = PLAYBACK_DST_HP_FP;
+       data->input_sel = CAPTURE_SRC_MIC;
 
        cs4245_init(chip);
        oxygen_write16(chip, OXYGEN_GPIO_CONTROL,
                       GPIO_OUTPUT_ENABLE | GPIO_HP_REAR | GPIO_INPUT_ROUTE);
-       oxygen_write16(chip, OXYGEN_GPIO_DATA, GPIO_INPUT_ROUTE);
-       msleep(2500); /* anti-pop delay */
+       /* anti-pop delay, wait some time before enabling the output */
+       msleep(2500);
        oxygen_write16(chip, OXYGEN_GPIO_DATA,
                       GPIO_OUTPUT_ENABLE | GPIO_INPUT_ROUTE);
 }
index d900323f73d0defaddf073cb0df17d61a5560c9f..d461df357aa15f203b2b60e5de98d5da864d79ea 100644 (file)
@@ -32,7 +32,6 @@ struct dg {
        char input_vol[4][2];
        /* input select: mic/fp mic/line/aux */
        unsigned char input_sel;
-       u8 hp_vol_att;
 };
 
 /* Xonar DG control routines */
@@ -51,8 +50,6 @@ void dump_cs4245_registers(struct oxygen *chip,
 void dg_suspend(struct oxygen *chip);
 void dg_resume(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;
 
index dfdfc991f8e64967f2f1c468d0569216e22d8bf6..b885dac28a09d164a7ce9b51e52ef26e1a9cf479 100644 (file)
@@ -435,12 +435,17 @@ static int dg_mixer_init(struct oxygen *chip)
        unsigned int i;
        int err;
 
+       output_select_apply(chip);
+       input_source_apply(chip);
+       oxygen_update_dac_routing(chip);
+
        for (i = 0; i < ARRAY_SIZE(dg_controls); ++i) {
                err = snd_ctl_add(chip->card,
                                  snd_ctl_new1(&dg_controls[i], chip));
                if (err < 0)
                        return err;
        }
+
        return 0;
 }