diff options
-rw-r--r-- | sound/pci/oxygen/xonar_pcm179x.c | 28 |
1 files changed, 22 insertions, 6 deletions
diff --git a/sound/pci/oxygen/xonar_pcm179x.c b/sound/pci/oxygen/xonar_pcm179x.c index 051554e2f92..2e31b81fc49 100644 --- a/sound/pci/oxygen/xonar_pcm179x.c +++ b/sound/pci/oxygen/xonar_pcm179x.c | |||
@@ -228,6 +228,7 @@ struct xonar_pcm179x { | |||
228 | s8 hp_gain_offset; | 228 | s8 hp_gain_offset; |
229 | bool has_cs2000; | 229 | bool has_cs2000; |
230 | u8 cs2000_regs[0x1f]; | 230 | u8 cs2000_regs[0x1f]; |
231 | bool broken_i2c; | ||
231 | }; | 232 | }; |
232 | 233 | ||
233 | struct xonar_hdav { | 234 | struct xonar_hdav { |
@@ -462,6 +463,7 @@ static void xonar_st_init(struct oxygen *chip) | |||
462 | data->generic.anti_pop_delay = 100; | 463 | data->generic.anti_pop_delay = 100; |
463 | data->has_cs2000 = 1; | 464 | data->has_cs2000 = 1; |
464 | data->cs2000_regs[CS2000_FUN_CFG_1] = CS2000_REF_CLK_DIV_1; | 465 | data->cs2000_regs[CS2000_FUN_CFG_1] = CS2000_REF_CLK_DIV_1; |
466 | data->broken_i2c = true; | ||
465 | 467 | ||
466 | oxygen_write16(chip, OXYGEN_I2S_A_FORMAT, | 468 | oxygen_write16(chip, OXYGEN_I2S_A_FORMAT, |
467 | OXYGEN_RATE_48000 | OXYGEN_I2S_FORMAT_I2S | | 469 | OXYGEN_RATE_48000 | OXYGEN_I2S_FORMAT_I2S | |
@@ -980,16 +982,29 @@ static int xonar_d2_control_filter(struct snd_kcontrol_new *template) | |||
980 | return 0; | 982 | return 0; |
981 | } | 983 | } |
982 | 984 | ||
985 | static int xonar_st_h6_control_filter(struct snd_kcontrol_new *template) | ||
986 | { | ||
987 | if (!strncmp(template->name, "Master Playback ", 16)) | ||
988 | /* no volume/mute, as I²C to the third DAC does not work */ | ||
989 | return 1; | ||
990 | return 0; | ||
991 | } | ||
992 | |||
983 | static int add_pcm1796_controls(struct oxygen *chip) | 993 | static int add_pcm1796_controls(struct oxygen *chip) |
984 | { | 994 | { |
995 | struct xonar_pcm179x *data = chip->model_data; | ||
985 | int err; | 996 | int err; |
986 | 997 | ||
987 | err = snd_ctl_add(chip->card, snd_ctl_new1(&rolloff_control, chip)); | 998 | if (!data->broken_i2c) { |
988 | if (err < 0) | 999 | err = snd_ctl_add(chip->card, |
989 | return err; | 1000 | snd_ctl_new1(&rolloff_control, chip)); |
990 | err = snd_ctl_add(chip->card, snd_ctl_new1(&os_128_control, chip)); | 1001 | if (err < 0) |
991 | if (err < 0) | 1002 | return err; |
992 | return err; | 1003 | err = snd_ctl_add(chip->card, |
1004 | snd_ctl_new1(&os_128_control, chip)); | ||
1005 | if (err < 0) | ||
1006 | return err; | ||
1007 | } | ||
993 | return 0; | 1008 | return 0; |
994 | } | 1009 | } |
995 | 1010 | ||
@@ -1208,6 +1223,7 @@ int __devinit get_xonar_pcm179x_model(struct oxygen *chip, | |||
1208 | break; | 1223 | break; |
1209 | case GPIO_DB_H6: | 1224 | case GPIO_DB_H6: |
1210 | chip->model.shortname = "Xonar ST+H6"; | 1225 | chip->model.shortname = "Xonar ST+H6"; |
1226 | chip->model.control_filter = xonar_st_h6_control_filter; | ||
1211 | chip->model.dac_channels_pcm = 8; | 1227 | chip->model.dac_channels_pcm = 8; |
1212 | chip->model.dac_channels_mixer = 8; | 1228 | chip->model.dac_channels_mixer = 8; |
1213 | break; | 1229 | break; |