diff options
author | Takashi Iwai <tiwai@suse.de> | 2009-12-21 05:21:15 -0500 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2009-12-21 05:21:15 -0500 |
commit | de8853bc38ceab1fa7e7f723b21430d4aad60fea (patch) | |
tree | 5084ef51866fd1767324f8dc8eb36e97c55350f5 /sound/pci | |
parent | f5de24b06aa46427500d0fdbe8616b73a71d8c28 (diff) | |
parent | 440b004cf953bec2bc8cd91c64ae707fd7e25327 (diff) |
Merge remote branch 'alsa/fixes' into fix/hda
Diffstat (limited to 'sound/pci')
-rw-r--r-- | sound/pci/Kconfig | 1 | ||||
-rw-r--r-- | sound/pci/ac97/ac97_codec.c | 2 | ||||
-rw-r--r-- | sound/pci/ca0106/ca0106_proc.c | 2 | ||||
-rw-r--r-- | sound/pci/cs46xx/imgs/cwcdma.asp | 9 | ||||
-rw-r--r-- | sound/pci/emu10k1/emu10k1x.c | 2 | ||||
-rw-r--r-- | sound/pci/fm801.c | 40 | ||||
-rw-r--r-- | sound/pci/hda/patch_cirrus.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_cmedia.c | 2 | ||||
-rw-r--r-- | sound/pci/hda/patch_realtek.c | 4 | ||||
-rw-r--r-- | sound/pci/ice1712/aureon.c | 31 | ||||
-rw-r--r-- | sound/pci/ice1712/ice1712.h | 4 | ||||
-rw-r--r-- | sound/pci/ice1712/juli.c | 34 | ||||
-rw-r--r-- | sound/pci/ice1712/prodigy_hifi.c | 2 | ||||
-rw-r--r-- | sound/pci/intel8x0.c | 12 | ||||
-rw-r--r-- | sound/pci/rme9652/hdspm.c | 4 |
15 files changed, 96 insertions, 55 deletions
diff --git a/sound/pci/Kconfig b/sound/pci/Kconfig index 75c602b5b132..351654cf7b09 100644 --- a/sound/pci/Kconfig +++ b/sound/pci/Kconfig | |||
@@ -570,6 +570,7 @@ config SND_ICE1712 | |||
570 | tristate "ICEnsemble ICE1712 (Envy24)" | 570 | tristate "ICEnsemble ICE1712 (Envy24)" |
571 | select SND_MPU401_UART | 571 | select SND_MPU401_UART |
572 | select SND_AC97_CODEC | 572 | select SND_AC97_CODEC |
573 | select BITREVERSE | ||
573 | help | 574 | help |
574 | Say Y here to include support for soundcards based on the | 575 | Say Y here to include support for soundcards based on the |
575 | ICE1712 (Envy24) chip. | 576 | ICE1712 (Envy24) chip. |
diff --git a/sound/pci/ac97/ac97_codec.c b/sound/pci/ac97/ac97_codec.c index 20cb60afb200..c11920623009 100644 --- a/sound/pci/ac97/ac97_codec.c +++ b/sound/pci/ac97/ac97_codec.c | |||
@@ -2122,7 +2122,7 @@ int snd_ac97_mixer(struct snd_ac97_bus *bus, struct snd_ac97_template *template, | |||
2122 | } | 2122 | } |
2123 | /* nothing should be in powerdown mode */ | 2123 | /* nothing should be in powerdown mode */ |
2124 | snd_ac97_write_cache(ac97, AC97_GENERAL_PURPOSE, 0); | 2124 | snd_ac97_write_cache(ac97, AC97_GENERAL_PURPOSE, 0); |
2125 | end_time = jiffies + msecs_to_jiffies(120); | 2125 | end_time = jiffies + msecs_to_jiffies(5000); |
2126 | do { | 2126 | do { |
2127 | if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f) | 2127 | if ((snd_ac97_read(ac97, AC97_POWERDOWN) & 0x0f) == 0x0f) |
2128 | goto __ready_ok; | 2128 | goto __ready_ok; |
diff --git a/sound/pci/ca0106/ca0106_proc.c b/sound/pci/ca0106/ca0106_proc.c index 15523e60351c..0470461cc03e 100644 --- a/sound/pci/ca0106/ca0106_proc.c +++ b/sound/pci/ca0106/ca0106_proc.c | |||
@@ -233,7 +233,7 @@ static void snd_ca0106_proc_dump_iec958( struct snd_info_buffer *buffer, u32 val | |||
233 | snd_iprintf(buffer, "user-defined\n"); | 233 | snd_iprintf(buffer, "user-defined\n"); |
234 | break; | 234 | break; |
235 | default: | 235 | default: |
236 | snd_iprintf(buffer, "unkown\n"); | 236 | snd_iprintf(buffer, "unknown\n"); |
237 | break; | 237 | break; |
238 | } | 238 | } |
239 | snd_iprintf(buffer, "Sample Bits: "); | 239 | snd_iprintf(buffer, "Sample Bits: "); |
diff --git a/sound/pci/cs46xx/imgs/cwcdma.asp b/sound/pci/cs46xx/imgs/cwcdma.asp index 09d24c76f034..a65e1193c89a 100644 --- a/sound/pci/cs46xx/imgs/cwcdma.asp +++ b/sound/pci/cs46xx/imgs/cwcdma.asp | |||
@@ -26,10 +26,11 @@ | |||
26 | // | 26 | // |
27 | // | 27 | // |
28 | // The purpose of this code is very simple: make it possible to tranfser | 28 | // The purpose of this code is very simple: make it possible to tranfser |
29 | // the samples 'as they are' with no alteration from a PCMreader SCB (DMA from host) | 29 | // the samples 'as they are' with no alteration from a PCMreader |
30 | // to any other SCB. This is useful for AC3 throug SPDIF. SRC (source rate converters) | 30 | // SCB (DMA from host) to any other SCB. This is useful for AC3 through SPDIF. |
31 | // task always alters the samples in some how, however it's from 48khz -> 48khz. The | 31 | // SRC (source rate converters) task always alters the samples in somehow, |
32 | // alterations are not audible, but AC3 wont work. | 32 | // however it's from 48khz -> 48khz. |
33 | // The alterations are not audible, but AC3 wont work. | ||
33 | // | 34 | // |
34 | // ... | 35 | // ... |
35 | // | | 36 | // | |
diff --git a/sound/pci/emu10k1/emu10k1x.c b/sound/pci/emu10k1/emu10k1x.c index 6b8ae7b5cd54..1d369ff73805 100644 --- a/sound/pci/emu10k1/emu10k1x.c +++ b/sound/pci/emu10k1/emu10k1x.c | |||
@@ -184,7 +184,7 @@ MODULE_PARM_DESC(enable, "Enable the EMU10K1X soundcard."); | |||
184 | * The hardware has 3 channels for playback and 1 for capture. | 184 | * The hardware has 3 channels for playback and 1 for capture. |
185 | * - channel 0 is the front channel | 185 | * - channel 0 is the front channel |
186 | * - channel 1 is the rear channel | 186 | * - channel 1 is the rear channel |
187 | * - channel 2 is the center/lfe chanel | 187 | * - channel 2 is the center/lfe channel |
188 | * Volume is controlled by the AC97 for the front and rear channels by | 188 | * Volume is controlled by the AC97 for the front and rear channels by |
189 | * the PCM Playback Volume, Sigmatel Surround Playback Volume and | 189 | * the PCM Playback Volume, Sigmatel Surround Playback Volume and |
190 | * Surround Playback Volume. The Sigmatel 4-Speaker Stereo switch affects | 190 | * Surround Playback Volume. The Sigmatel 4-Speaker Stereo switch affects |
diff --git a/sound/pci/fm801.c b/sound/pci/fm801.c index 60cdb9e0b68d..83508b3964fb 100644 --- a/sound/pci/fm801.c +++ b/sound/pci/fm801.c | |||
@@ -55,7 +55,7 @@ static int enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP; /* Enable this card * | |||
55 | * 1 = MediaForte 256-PCS | 55 | * 1 = MediaForte 256-PCS |
56 | * 2 = MediaForte 256-PCPR | 56 | * 2 = MediaForte 256-PCPR |
57 | * 3 = MediaForte 64-PCR | 57 | * 3 = MediaForte 64-PCR |
58 | * 16 = setup tuner only (this is additional bit), i.e. SF-64-PCR FM card | 58 | * 16 = setup tuner only (this is additional bit), i.e. SF64-PCR FM card |
59 | * High 16-bits are video (radio) device number + 1 | 59 | * High 16-bits are video (radio) device number + 1 |
60 | */ | 60 | */ |
61 | static int tea575x_tuner[SNDRV_CARDS]; | 61 | static int tea575x_tuner[SNDRV_CARDS]; |
@@ -67,7 +67,10 @@ MODULE_PARM_DESC(id, "ID string for the FM801 soundcard."); | |||
67 | module_param_array(enable, bool, NULL, 0444); | 67 | module_param_array(enable, bool, NULL, 0444); |
68 | MODULE_PARM_DESC(enable, "Enable FM801 soundcard."); | 68 | MODULE_PARM_DESC(enable, "Enable FM801 soundcard."); |
69 | module_param_array(tea575x_tuner, int, NULL, 0444); | 69 | module_param_array(tea575x_tuner, int, NULL, 0444); |
70 | MODULE_PARM_DESC(tea575x_tuner, "Enable TEA575x tuner."); | 70 | MODULE_PARM_DESC(tea575x_tuner, "TEA575x tuner access method (1 = SF256-PCS, 2=SF256-PCPR, 3=SF64-PCR, +16=tuner-only)."); |
71 | |||
72 | #define TUNER_ONLY (1<<4) | ||
73 | #define TUNER_TYPE_MASK (~TUNER_ONLY & 0xFFFF) | ||
71 | 74 | ||
72 | /* | 75 | /* |
73 | * Direct registers | 76 | * Direct registers |
@@ -160,7 +163,7 @@ struct fm801 { | |||
160 | unsigned int multichannel: 1, /* multichannel support */ | 163 | unsigned int multichannel: 1, /* multichannel support */ |
161 | secondary: 1; /* secondary codec */ | 164 | secondary: 1; /* secondary codec */ |
162 | unsigned char secondary_addr; /* address of the secondary codec */ | 165 | unsigned char secondary_addr; /* address of the secondary codec */ |
163 | unsigned int tea575x_tuner; /* tuner flags */ | 166 | unsigned int tea575x_tuner; /* tuner access method & flags */ |
164 | 167 | ||
165 | unsigned short ply_ctrl; /* playback control */ | 168 | unsigned short ply_ctrl; /* playback control */ |
166 | unsigned short cap_ctrl; /* capture control */ | 169 | unsigned short cap_ctrl; /* capture control */ |
@@ -1287,7 +1290,7 @@ static int snd_fm801_chip_init(struct fm801 *chip, int resume) | |||
1287 | { | 1290 | { |
1288 | unsigned short cmdw; | 1291 | unsigned short cmdw; |
1289 | 1292 | ||
1290 | if (chip->tea575x_tuner & 0x0010) | 1293 | if (chip->tea575x_tuner & TUNER_ONLY) |
1291 | goto __ac97_ok; | 1294 | goto __ac97_ok; |
1292 | 1295 | ||
1293 | /* codec cold reset + AC'97 warm reset */ | 1296 | /* codec cold reset + AC'97 warm reset */ |
@@ -1296,11 +1299,13 @@ static int snd_fm801_chip_init(struct fm801 *chip, int resume) | |||
1296 | udelay(100); | 1299 | udelay(100); |
1297 | outw(0, FM801_REG(chip, CODEC_CTRL)); | 1300 | outw(0, FM801_REG(chip, CODEC_CTRL)); |
1298 | 1301 | ||
1299 | if (wait_for_codec(chip, 0, AC97_RESET, msecs_to_jiffies(750)) < 0) { | 1302 | if (wait_for_codec(chip, 0, AC97_RESET, msecs_to_jiffies(750)) < 0) |
1300 | snd_printk(KERN_ERR "Primary AC'97 codec not found\n"); | 1303 | if (!resume) { |
1301 | if (! resume) | 1304 | snd_printk(KERN_INFO "Primary AC'97 codec not found, " |
1302 | return -EIO; | 1305 | "assume SF64-PCR (tuner-only)\n"); |
1303 | } | 1306 | chip->tea575x_tuner = 3 | TUNER_ONLY; |
1307 | goto __ac97_ok; | ||
1308 | } | ||
1304 | 1309 | ||
1305 | if (chip->multichannel) { | 1310 | if (chip->multichannel) { |
1306 | if (chip->secondary_addr) { | 1311 | if (chip->secondary_addr) { |
@@ -1414,7 +1419,7 @@ static int __devinit snd_fm801_create(struct snd_card *card, | |||
1414 | return err; | 1419 | return err; |
1415 | } | 1420 | } |
1416 | chip->port = pci_resource_start(pci, 0); | 1421 | chip->port = pci_resource_start(pci, 0); |
1417 | if ((tea575x_tuner & 0x0010) == 0) { | 1422 | if ((tea575x_tuner & TUNER_ONLY) == 0) { |
1418 | if (request_irq(pci->irq, snd_fm801_interrupt, IRQF_SHARED, | 1423 | if (request_irq(pci->irq, snd_fm801_interrupt, IRQF_SHARED, |
1419 | "FM801", chip)) { | 1424 | "FM801", chip)) { |
1420 | snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->irq); | 1425 | snd_printk(KERN_ERR "unable to grab IRQ %d\n", chip->irq); |
@@ -1429,6 +1434,14 @@ static int __devinit snd_fm801_create(struct snd_card *card, | |||
1429 | chip->multichannel = 1; | 1434 | chip->multichannel = 1; |
1430 | 1435 | ||
1431 | snd_fm801_chip_init(chip, 0); | 1436 | snd_fm801_chip_init(chip, 0); |
1437 | /* init might set tuner access method */ | ||
1438 | tea575x_tuner = chip->tea575x_tuner; | ||
1439 | |||
1440 | if (chip->irq >= 0 && (tea575x_tuner & TUNER_ONLY)) { | ||
1441 | pci_clear_master(pci); | ||
1442 | free_irq(chip->irq, chip); | ||
1443 | chip->irq = -1; | ||
1444 | } | ||
1432 | 1445 | ||
1433 | if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { | 1446 | if ((err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops)) < 0) { |
1434 | snd_fm801_free(chip); | 1447 | snd_fm801_free(chip); |
@@ -1438,12 +1451,13 @@ static int __devinit snd_fm801_create(struct snd_card *card, | |||
1438 | snd_card_set_dev(card, &pci->dev); | 1451 | snd_card_set_dev(card, &pci->dev); |
1439 | 1452 | ||
1440 | #ifdef TEA575X_RADIO | 1453 | #ifdef TEA575X_RADIO |
1441 | if (tea575x_tuner > 0 && (tea575x_tuner & 0x000f) < 4) { | 1454 | if ((tea575x_tuner & TUNER_TYPE_MASK) > 0 && |
1455 | (tea575x_tuner & TUNER_TYPE_MASK) < 4) { | ||
1442 | chip->tea.dev_nr = tea575x_tuner >> 16; | 1456 | chip->tea.dev_nr = tea575x_tuner >> 16; |
1443 | chip->tea.card = card; | 1457 | chip->tea.card = card; |
1444 | chip->tea.freq_fixup = 10700; | 1458 | chip->tea.freq_fixup = 10700; |
1445 | chip->tea.private_data = chip; | 1459 | chip->tea.private_data = chip; |
1446 | chip->tea.ops = &snd_fm801_tea_ops[(tea575x_tuner & 0x000f) - 1]; | 1460 | chip->tea.ops = &snd_fm801_tea_ops[(tea575x_tuner & TUNER_TYPE_MASK) - 1]; |
1447 | snd_tea575x_init(&chip->tea); | 1461 | snd_tea575x_init(&chip->tea); |
1448 | } | 1462 | } |
1449 | #endif | 1463 | #endif |
@@ -1483,7 +1497,7 @@ static int __devinit snd_card_fm801_probe(struct pci_dev *pci, | |||
1483 | sprintf(card->longname, "%s at 0x%lx, irq %i", | 1497 | sprintf(card->longname, "%s at 0x%lx, irq %i", |
1484 | card->shortname, chip->port, chip->irq); | 1498 | card->shortname, chip->port, chip->irq); |
1485 | 1499 | ||
1486 | if (tea575x_tuner[dev] & 0x0010) | 1500 | if (chip->tea575x_tuner & TUNER_ONLY) |
1487 | goto __fm801_tuner_only; | 1501 | goto __fm801_tuner_only; |
1488 | 1502 | ||
1489 | if ((err = snd_fm801_pcm(chip, 0, NULL)) < 0) { | 1503 | if ((err = snd_fm801_pcm(chip, 0, NULL)) < 0) { |
diff --git a/sound/pci/hda/patch_cirrus.c b/sound/pci/hda/patch_cirrus.c index 2439e84dcb21..4b200da1bd18 100644 --- a/sound/pci/hda/patch_cirrus.c +++ b/sound/pci/hda/patch_cirrus.c | |||
@@ -938,7 +938,7 @@ static void init_input(struct hda_codec *codec) | |||
938 | coef |= 0x0500; /* DMIC2 enable 2 channels, disable GPIO1 */ | 938 | coef |= 0x0500; /* DMIC2 enable 2 channels, disable GPIO1 */ |
939 | if (is_active_pin(codec, CS_DMIC1_PIN_NID)) | 939 | if (is_active_pin(codec, CS_DMIC1_PIN_NID)) |
940 | coef |= 0x1800; /* DMIC1 enable 2 channels, disable GPIO0 | 940 | coef |= 0x1800; /* DMIC1 enable 2 channels, disable GPIO0 |
941 | * No effect if SPDIF_OUT2 is slected in | 941 | * No effect if SPDIF_OUT2 is selected in |
942 | * IDX_SPDIF_CTL. | 942 | * IDX_SPDIF_CTL. |
943 | */ | 943 | */ |
944 | cs_vendor_coef_set(codec, IDX_ADC_CFG, coef); | 944 | cs_vendor_coef_set(codec, IDX_ADC_CFG, coef); |
diff --git a/sound/pci/hda/patch_cmedia.c b/sound/pci/hda/patch_cmedia.c index 85c81feb10cf..a45c1169762b 100644 --- a/sound/pci/hda/patch_cmedia.c +++ b/sound/pci/hda/patch_cmedia.c | |||
@@ -66,7 +66,7 @@ struct cmi_spec { | |||
66 | 66 | ||
67 | struct hda_pcm pcm_rec[2]; /* PCM information */ | 67 | struct hda_pcm pcm_rec[2]; /* PCM information */ |
68 | 68 | ||
69 | /* pin deafault configuration */ | 69 | /* pin default configuration */ |
70 | hda_nid_t pin_nid[NUM_PINS]; | 70 | hda_nid_t pin_nid[NUM_PINS]; |
71 | unsigned int def_conf[NUM_PINS]; | 71 | unsigned int def_conf[NUM_PINS]; |
72 | unsigned int pin_def_confs; | 72 | unsigned int pin_def_confs; |
diff --git a/sound/pci/hda/patch_realtek.c b/sound/pci/hda/patch_realtek.c index b3abe9ca826d..0877bae5dae1 100644 --- a/sound/pci/hda/patch_realtek.c +++ b/sound/pci/hda/patch_realtek.c | |||
@@ -6673,7 +6673,7 @@ static struct hda_input_mux alc889A_mb31_capture_source = { | |||
6673 | /* Front Mic (0x01) unused */ | 6673 | /* Front Mic (0x01) unused */ |
6674 | { "Line", 0x2 }, | 6674 | { "Line", 0x2 }, |
6675 | /* Line 2 (0x03) unused */ | 6675 | /* Line 2 (0x03) unused */ |
6676 | /* CD (0x04) unsused? */ | 6676 | /* CD (0x04) unused? */ |
6677 | }, | 6677 | }, |
6678 | }; | 6678 | }; |
6679 | 6679 | ||
@@ -9287,8 +9287,6 @@ static struct alc_config_preset alc882_presets[] = { | |||
9287 | .dac_nids = alc883_dac_nids, | 9287 | .dac_nids = alc883_dac_nids, |
9288 | .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), | 9288 | .num_adc_nids = ARRAY_SIZE(alc889_adc_nids), |
9289 | .adc_nids = alc889_adc_nids, | 9289 | .adc_nids = alc889_adc_nids, |
9290 | .capsrc_nids = alc889_capsrc_nids, | ||
9291 | .capsrc_nids = alc889_capsrc_nids, | ||
9292 | .dig_out_nid = ALC883_DIGOUT_NID, | 9290 | .dig_out_nid = ALC883_DIGOUT_NID, |
9293 | .dig_in_nid = ALC883_DIGIN_NID, | 9291 | .dig_in_nid = ALC883_DIGIN_NID, |
9294 | .slave_dig_outs = alc883_slave_dig_outs, | 9292 | .slave_dig_outs = alc883_slave_dig_outs, |
diff --git a/sound/pci/ice1712/aureon.c b/sound/pci/ice1712/aureon.c index 110d16e52733..765d7bd4c3d4 100644 --- a/sound/pci/ice1712/aureon.c +++ b/sound/pci/ice1712/aureon.c | |||
@@ -689,32 +689,14 @@ static int aureon_ac97_mmute_put(struct snd_kcontrol *kcontrol, struct snd_ctl_e | |||
689 | return change; | 689 | return change; |
690 | } | 690 | } |
691 | 691 | ||
692 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -12700, 100, 1); | 692 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_dac, -10000, 100, 1); |
693 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_pcm, -6400, 50, 1); | 693 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_pcm, -6400, 50, 1); |
694 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_adc, -1200, 100, 0); | 694 | static const DECLARE_TLV_DB_SCALE(db_scale_wm_adc, -1200, 100, 0); |
695 | static const DECLARE_TLV_DB_SCALE(db_scale_ac97_master, -4650, 150, 0); | 695 | static const DECLARE_TLV_DB_SCALE(db_scale_ac97_master, -4650, 150, 0); |
696 | static const DECLARE_TLV_DB_SCALE(db_scale_ac97_gain, -3450, 150, 0); | 696 | static const DECLARE_TLV_DB_SCALE(db_scale_ac97_gain, -3450, 150, 0); |
697 | 697 | ||
698 | /* | 698 | #define WM_VOL_MAX 100 |
699 | * Logarithmic volume values for WM8770 | 699 | #define WM_VOL_CNT 101 /* 0dB .. -100dB */ |
700 | * Computed as 20 * Log10(255 / x) | ||
701 | */ | ||
702 | static const unsigned char wm_vol[256] = { | ||
703 | 127, 48, 42, 39, 36, 34, 33, 31, 30, 29, 28, 27, 27, 26, 25, 25, 24, 24, 23, | ||
704 | 23, 22, 22, 21, 21, 21, 20, 20, 20, 19, 19, 19, 18, 18, 18, 18, 17, 17, 17, | ||
705 | 17, 16, 16, 16, 16, 15, 15, 15, 15, 15, 15, 14, 14, 14, 14, 14, 13, 13, 13, | ||
706 | 13, 13, 13, 13, 12, 12, 12, 12, 12, 12, 12, 11, 11, 11, 11, 11, 11, 11, 11, | ||
707 | 11, 10, 10, 10, 10, 10, 10, 10, 10, 10, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 8, 8, | ||
708 | 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 7, 6, 6, 6, | ||
709 | 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, | ||
710 | 5, 5, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 3, 3, 3, 3, 3, | ||
711 | 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, | ||
712 | 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, | ||
713 | 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, | ||
714 | 0, 0 | ||
715 | }; | ||
716 | |||
717 | #define WM_VOL_MAX (sizeof(wm_vol) - 1) | ||
718 | #define WM_VOL_MUTE 0x8000 | 700 | #define WM_VOL_MUTE 0x8000 |
719 | 701 | ||
720 | static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned short vol, unsigned short master) | 702 | static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned short vol, unsigned short master) |
@@ -724,7 +706,8 @@ static void wm_set_vol(struct snd_ice1712 *ice, unsigned int index, unsigned sho | |||
724 | if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE)) | 706 | if ((master & WM_VOL_MUTE) || (vol & WM_VOL_MUTE)) |
725 | nvol = 0; | 707 | nvol = 0; |
726 | else | 708 | else |
727 | nvol = 127 - wm_vol[(((vol & ~WM_VOL_MUTE) * (master & ~WM_VOL_MUTE)) / 127) & WM_VOL_MAX]; | 709 | nvol = ((vol % WM_VOL_CNT) * (master % WM_VOL_CNT)) / |
710 | WM_VOL_MAX; | ||
728 | 711 | ||
729 | wm_put(ice, index, nvol); | 712 | wm_put(ice, index, nvol); |
730 | wm_put_nocache(ice, index, 0x180 | nvol); | 713 | wm_put_nocache(ice, index, 0x180 | nvol); |
@@ -820,7 +803,7 @@ static int wm_vol_info(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_info * | |||
820 | uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; | 803 | uinfo->type = SNDRV_CTL_ELEM_TYPE_INTEGER; |
821 | uinfo->count = voices; | 804 | uinfo->count = voices; |
822 | uinfo->value.integer.min = 0; /* mute (-101dB) */ | 805 | uinfo->value.integer.min = 0; /* mute (-101dB) */ |
823 | uinfo->value.integer.max = 0x7F; /* 0dB */ | 806 | uinfo->value.integer.max = WM_VOL_MAX; /* 0dB */ |
824 | return 0; | 807 | return 0; |
825 | } | 808 | } |
826 | 809 | ||
@@ -850,7 +833,7 @@ static int wm_vol_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value * | |||
850 | snd_ice1712_save_gpio_status(ice); | 833 | snd_ice1712_save_gpio_status(ice); |
851 | for (i = 0; i < voices; i++) { | 834 | for (i = 0; i < voices; i++) { |
852 | unsigned int vol = ucontrol->value.integer.value[i]; | 835 | unsigned int vol = ucontrol->value.integer.value[i]; |
853 | if (vol > 0x7f) | 836 | if (vol > WM_VOL_MAX) |
854 | continue; | 837 | continue; |
855 | vol |= spec->vol[ofs+i]; | 838 | vol |= spec->vol[ofs+i]; |
856 | if (vol != spec->vol[ofs+i]) { | 839 | if (vol != spec->vol[ofs+i]) { |
diff --git a/sound/pci/ice1712/ice1712.h b/sound/pci/ice1712/ice1712.h index 4615bca39e18..0da778a69ef8 100644 --- a/sound/pci/ice1712/ice1712.h +++ b/sound/pci/ice1712/ice1712.h | |||
@@ -387,8 +387,8 @@ struct snd_ice1712 { | |||
387 | #ifdef CONFIG_PM | 387 | #ifdef CONFIG_PM |
388 | int (*pm_suspend)(struct snd_ice1712 *); | 388 | int (*pm_suspend)(struct snd_ice1712 *); |
389 | int (*pm_resume)(struct snd_ice1712 *); | 389 | int (*pm_resume)(struct snd_ice1712 *); |
390 | int pm_suspend_enabled:1; | 390 | unsigned int pm_suspend_enabled:1; |
391 | int pm_saved_is_spdif_master:1; | 391 | unsigned int pm_saved_is_spdif_master:1; |
392 | unsigned int pm_saved_spdif_ctrl; | 392 | unsigned int pm_saved_spdif_ctrl; |
393 | unsigned char pm_saved_spdif_cfg; | 393 | unsigned char pm_saved_spdif_cfg; |
394 | unsigned int pm_saved_route; | 394 | unsigned int pm_saved_route; |
diff --git a/sound/pci/ice1712/juli.c b/sound/pci/ice1712/juli.c index 4bed9633a4cd..98bc3b7681b5 100644 --- a/sound/pci/ice1712/juli.c +++ b/sound/pci/ice1712/juli.c | |||
@@ -380,7 +380,7 @@ static struct snd_kcontrol_new juli_mute_controls[] __devinitdata = { | |||
380 | * inputs) are fed from Xilinx. | 380 | * inputs) are fed from Xilinx. |
381 | * | 381 | * |
382 | * I even checked traces on board and coded a support in driver for | 382 | * I even checked traces on board and coded a support in driver for |
383 | * an alternative possiblity - the unused I2S ICE output channels | 383 | * an alternative possibility - the unused I2S ICE output channels |
384 | * switched to HW-IN/SPDIF-IN and providing the monitoring signal to | 384 | * switched to HW-IN/SPDIF-IN and providing the monitoring signal to |
385 | * the DAC - to no avail. The I2S outputs seem to be unconnected. | 385 | * the DAC - to no avail. The I2S outputs seem to be unconnected. |
386 | * | 386 | * |
@@ -483,6 +483,31 @@ static int __devinit juli_add_controls(struct snd_ice1712 *ice) | |||
483 | } | 483 | } |
484 | 484 | ||
485 | /* | 485 | /* |
486 | * suspend/resume | ||
487 | * */ | ||
488 | |||
489 | #ifdef CONFIG_PM | ||
490 | static int juli_resume(struct snd_ice1712 *ice) | ||
491 | { | ||
492 | struct snd_akm4xxx *ak = ice->akm; | ||
493 | struct juli_spec *spec = ice->spec; | ||
494 | /* akm4358 un-reset, un-mute */ | ||
495 | snd_akm4xxx_reset(ak, 0); | ||
496 | /* reinit ak4114 */ | ||
497 | snd_ak4114_reinit(spec->ak4114); | ||
498 | return 0; | ||
499 | } | ||
500 | |||
501 | static int juli_suspend(struct snd_ice1712 *ice) | ||
502 | { | ||
503 | struct snd_akm4xxx *ak = ice->akm; | ||
504 | /* akm4358 reset and soft-mute */ | ||
505 | snd_akm4xxx_reset(ak, 1); | ||
506 | return 0; | ||
507 | } | ||
508 | #endif | ||
509 | |||
510 | /* | ||
486 | * initialize the chip | 511 | * initialize the chip |
487 | */ | 512 | */ |
488 | 513 | ||
@@ -626,6 +651,13 @@ static int __devinit juli_init(struct snd_ice1712 *ice) | |||
626 | ice->set_spdif_clock = juli_set_spdif_clock; | 651 | ice->set_spdif_clock = juli_set_spdif_clock; |
627 | 652 | ||
628 | ice->spdif.ops.open = juli_spdif_in_open; | 653 | ice->spdif.ops.open = juli_spdif_in_open; |
654 | |||
655 | #ifdef CONFIG_PM | ||
656 | ice->pm_resume = juli_resume; | ||
657 | ice->pm_suspend = juli_suspend; | ||
658 | ice->pm_suspend_enabled = 1; | ||
659 | #endif | ||
660 | |||
629 | return 0; | 661 | return 0; |
630 | } | 662 | } |
631 | 663 | ||
diff --git a/sound/pci/ice1712/prodigy_hifi.c b/sound/pci/ice1712/prodigy_hifi.c index c75515f5be6f..6a9fee3ee78f 100644 --- a/sound/pci/ice1712/prodigy_hifi.c +++ b/sound/pci/ice1712/prodigy_hifi.c | |||
@@ -1100,7 +1100,7 @@ static void ak4396_init(struct snd_ice1712 *ice) | |||
1100 | } | 1100 | } |
1101 | 1101 | ||
1102 | #ifdef CONFIG_PM | 1102 | #ifdef CONFIG_PM |
1103 | static int __devinit prodigy_hd2_resume(struct snd_ice1712 *ice) | 1103 | static int prodigy_hd2_resume(struct snd_ice1712 *ice) |
1104 | { | 1104 | { |
1105 | /* initialize ak4396 codec and restore previous mixer volumes */ | 1105 | /* initialize ak4396 codec and restore previous mixer volumes */ |
1106 | struct prodigy_hifi_spec *spec = ice->spec; | 1106 | struct prodigy_hifi_spec *spec = ice->spec; |
diff --git a/sound/pci/intel8x0.c b/sound/pci/intel8x0.c index 754867ed4785..b990143636f1 100644 --- a/sound/pci/intel8x0.c +++ b/sound/pci/intel8x0.c | |||
@@ -1950,6 +1950,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = { | |||
1950 | }, | 1950 | }, |
1951 | { | 1951 | { |
1952 | .subvendor = 0x104d, | 1952 | .subvendor = 0x104d, |
1953 | .subdevice = 0x8144, | ||
1954 | .name = "Sony", | ||
1955 | .type = AC97_TUNE_INV_EAPD | ||
1956 | }, | ||
1957 | { | ||
1958 | .subvendor = 0x104d, | ||
1953 | .subdevice = 0x8197, | 1959 | .subdevice = 0x8197, |
1954 | .name = "Sony S1XP", | 1960 | .name = "Sony S1XP", |
1955 | .type = AC97_TUNE_INV_EAPD | 1961 | .type = AC97_TUNE_INV_EAPD |
@@ -2057,6 +2063,12 @@ static struct ac97_quirk ac97_quirks[] __devinitdata = { | |||
2057 | .type = AC97_TUNE_HP_ONLY | 2063 | .type = AC97_TUNE_HP_ONLY |
2058 | }, | 2064 | }, |
2059 | { | 2065 | { |
2066 | .subvendor = 0x161f, | ||
2067 | .subdevice = 0x203a, | ||
2068 | .name = "Gateway 4525GZ", /* AD1981B */ | ||
2069 | .type = AC97_TUNE_INV_EAPD | ||
2070 | }, | ||
2071 | { | ||
2060 | .subvendor = 0x1734, | 2072 | .subvendor = 0x1734, |
2061 | .subdevice = 0x0088, | 2073 | .subdevice = 0x0088, |
2062 | .name = "Fujitsu-Siemens D1522", /* AD1981 */ | 2074 | .name = "Fujitsu-Siemens D1522", /* AD1981 */ |
diff --git a/sound/pci/rme9652/hdspm.c b/sound/pci/rme9652/hdspm.c index 0dce331a2a3b..a1b10d1a384d 100644 --- a/sound/pci/rme9652/hdspm.c +++ b/sound/pci/rme9652/hdspm.c | |||
@@ -3017,7 +3017,7 @@ snd_hdspm_proc_read_madi(struct snd_info_entry * entry, | |||
3017 | insel = "Coaxial"; | 3017 | insel = "Coaxial"; |
3018 | break; | 3018 | break; |
3019 | default: | 3019 | default: |
3020 | insel = "Unkown"; | 3020 | insel = "Unknown"; |
3021 | } | 3021 | } |
3022 | 3022 | ||
3023 | switch (hdspm->control_register & HDSPM_SyncRefMask) { | 3023 | switch (hdspm->control_register & HDSPM_SyncRefMask) { |
@@ -3028,7 +3028,7 @@ snd_hdspm_proc_read_madi(struct snd_info_entry * entry, | |||
3028 | syncref = "MADI"; | 3028 | syncref = "MADI"; |
3029 | break; | 3029 | break; |
3030 | default: | 3030 | default: |
3031 | syncref = "Unkown"; | 3031 | syncref = "Unknown"; |
3032 | } | 3032 | } |
3033 | snd_iprintf(buffer, "Inputsel = %s, SyncRef = %s\n", insel, | 3033 | snd_iprintf(buffer, "Inputsel = %s, SyncRef = %s\n", insel, |
3034 | syncref); | 3034 | syncref); |