diff options
Diffstat (limited to 'sound/pci/oxygen')
-rw-r--r-- | sound/pci/oxygen/hifier.c | 4 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen.c | 4 | ||||
-rw-r--r-- | sound/pci/oxygen/oxygen_mixer.c | 5 |
3 files changed, 12 insertions, 1 deletions
diff --git a/sound/pci/oxygen/hifier.c b/sound/pci/oxygen/hifier.c index 7442460583dd..dad393ae040a 100644 --- a/sound/pci/oxygen/hifier.c +++ b/sound/pci/oxygen/hifier.c | |||
@@ -17,6 +17,7 @@ | |||
17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA | 17 | * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA |
18 | */ | 18 | */ |
19 | 19 | ||
20 | #include <linux/delay.h> | ||
20 | #include <linux/pci.h> | 21 | #include <linux/pci.h> |
21 | #include <sound/control.h> | 22 | #include <sound/control.h> |
22 | #include <sound/core.h> | 23 | #include <sound/core.h> |
@@ -107,6 +108,9 @@ static void set_ak4396_params(struct oxygen *chip, | |||
107 | else | 108 | else |
108 | value |= AK4396_DFS_QUAD; | 109 | value |= AK4396_DFS_QUAD; |
109 | data->ak4396_ctl2 = value; | 110 | data->ak4396_ctl2 = value; |
111 | |||
112 | msleep(1); /* wait for the new MCLK to become stable */ | ||
113 | |||
110 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB); | 114 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB); |
111 | ak4396_write(chip, AK4396_CONTROL_2, value); | 115 | ak4396_write(chip, AK4396_CONTROL_2, value); |
112 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); | 116 | ak4396_write(chip, AK4396_CONTROL_1, AK4396_DIF_24_MSB | AK4396_RSTN); |
diff --git a/sound/pci/oxygen/oxygen.c b/sound/pci/oxygen/oxygen.c index 7c8ae31eb468..c5829d30ef86 100644 --- a/sound/pci/oxygen/oxygen.c +++ b/sound/pci/oxygen/oxygen.c | |||
@@ -28,6 +28,7 @@ | |||
28 | * GPIO 1 -> DFS1 of AK5385 | 28 | * GPIO 1 -> DFS1 of AK5385 |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/delay.h> | ||
31 | #include <linux/mutex.h> | 32 | #include <linux/mutex.h> |
32 | #include <linux/pci.h> | 33 | #include <linux/pci.h> |
33 | #include <sound/ac97_codec.h> | 34 | #include <sound/ac97_codec.h> |
@@ -213,6 +214,9 @@ static void set_ak4396_params(struct oxygen *chip, | |||
213 | else | 214 | else |
214 | value |= AK4396_DFS_QUAD; | 215 | value |= AK4396_DFS_QUAD; |
215 | data->ak4396_ctl2 = value; | 216 | data->ak4396_ctl2 = value; |
217 | |||
218 | msleep(1); /* wait for the new MCLK to become stable */ | ||
219 | |||
216 | for (i = 0; i < 4; ++i) { | 220 | for (i = 0; i < 4; ++i) { |
217 | ak4396_write(chip, i, | 221 | ak4396_write(chip, i, |
218 | AK4396_CONTROL_1, AK4396_DIF_24_MSB); | 222 | AK4396_CONTROL_1, AK4396_DIF_24_MSB); |
diff --git a/sound/pci/oxygen/oxygen_mixer.c b/sound/pci/oxygen/oxygen_mixer.c index 6facac5aed90..05eb8994c141 100644 --- a/sound/pci/oxygen/oxygen_mixer.c +++ b/sound/pci/oxygen/oxygen_mixer.c | |||
@@ -512,9 +512,12 @@ static int ac97_switch_get(struct snd_kcontrol *ctl, | |||
512 | 512 | ||
513 | static void mute_ac97_ctl(struct oxygen *chip, unsigned int control) | 513 | static void mute_ac97_ctl(struct oxygen *chip, unsigned int control) |
514 | { | 514 | { |
515 | unsigned int priv_idx = chip->controls[control]->private_value & 0xff; | 515 | unsigned int priv_idx; |
516 | u16 value; | 516 | u16 value; |
517 | 517 | ||
518 | if (!chip->controls[control]) | ||
519 | return; | ||
520 | priv_idx = chip->controls[control]->private_value & 0xff; | ||
518 | value = oxygen_read_ac97(chip, 0, priv_idx); | 521 | value = oxygen_read_ac97(chip, 0, priv_idx); |
519 | if (!(value & 0x8000)) { | 522 | if (!(value & 0x8000)) { |
520 | oxygen_write_ac97(chip, 0, priv_idx, value | 0x8000); | 523 | oxygen_write_ac97(chip, 0, priv_idx, value | 0x8000); |