aboutsummaryrefslogtreecommitdiffstats
path: root/sound/pci/oxygen
diff options
context:
space:
mode:
authorClemens Ladisch <clemens@ladisch.de>2011-01-10 10:05:38 -0500
committerTakashi Iwai <tiwai@suse.de>2011-01-10 10:46:14 -0500
commitdd203fa97bd5df18dbb0af5acf3e9a8beea33f74 (patch)
tree7b4d60fed6c2fe2e2041932197d599b12ffc05eb /sound/pci/oxygen
parent03ff959dd4e290ed909fd57dec79ccd0262c4095 (diff)
ALSA: virtuoso: remove non-working controls on Essence ST Deluxe
On the Xonar Essence ST Deluxe, remove all mixer controls that would require I2C communication with the third DAC, which does not work because of an addressing conflict with the CS2000 chip. Signed-off-by: Clemens Ladisch <clemens@ladisch.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
Diffstat (limited to 'sound/pci/oxygen')
-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;