aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/pci/oxygen/xonar_pcm179x.c28
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
233struct xonar_hdav { 234struct 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
985static 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
983static int add_pcm1796_controls(struct oxygen *chip) 993static 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;