diff options
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
-rw-r--r-- | sound/pci/hda/hda_intel.c | 60 |
1 files changed, 22 insertions, 38 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index ff6da6f386d1..d5c93ad852ee 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -125,6 +125,7 @@ MODULE_SUPPORTED_DEVICE("{{Intel, ICH6}," | |||
125 | "{Intel, ICH9}," | 125 | "{Intel, ICH9}," |
126 | "{Intel, ICH10}," | 126 | "{Intel, ICH10}," |
127 | "{Intel, PCH}," | 127 | "{Intel, PCH}," |
128 | "{Intel, CPT}," | ||
128 | "{Intel, SCH}," | 129 | "{Intel, SCH}," |
129 | "{ATI, SB450}," | 130 | "{ATI, SB450}," |
130 | "{ATI, SB600}," | 131 | "{ATI, SB600}," |
@@ -259,8 +260,6 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 }; | |||
259 | #define AZX_MAX_FRAG 32 | 260 | #define AZX_MAX_FRAG 32 |
260 | /* max buffer size - no h/w limit, you can increase as you like */ | 261 | /* max buffer size - no h/w limit, you can increase as you like */ |
261 | #define AZX_MAX_BUF_SIZE (1024*1024*1024) | 262 | #define AZX_MAX_BUF_SIZE (1024*1024*1024) |
262 | /* max number of PCM devics per card */ | ||
263 | #define AZX_MAX_PCMS 8 | ||
264 | 263 | ||
265 | /* RIRB int mask: overrun[2], response[0] */ | 264 | /* RIRB int mask: overrun[2], response[0] */ |
266 | #define RIRB_INT_RESPONSE 0x01 | 265 | #define RIRB_INT_RESPONSE 0x01 |
@@ -408,7 +407,7 @@ struct azx { | |||
408 | struct azx_dev *azx_dev; | 407 | struct azx_dev *azx_dev; |
409 | 408 | ||
410 | /* PCM */ | 409 | /* PCM */ |
411 | struct snd_pcm *pcm[AZX_MAX_PCMS]; | 410 | struct snd_pcm *pcm[HDA_MAX_PCMS]; |
412 | 411 | ||
413 | /* HD codec */ | 412 | /* HD codec */ |
414 | unsigned short codec_mask; | 413 | unsigned short codec_mask; |
@@ -449,6 +448,7 @@ struct azx { | |||
449 | /* driver types */ | 448 | /* driver types */ |
450 | enum { | 449 | enum { |
451 | AZX_DRIVER_ICH, | 450 | AZX_DRIVER_ICH, |
451 | AZX_DRIVER_PCH, | ||
452 | AZX_DRIVER_SCH, | 452 | AZX_DRIVER_SCH, |
453 | AZX_DRIVER_ATI, | 453 | AZX_DRIVER_ATI, |
454 | AZX_DRIVER_ATIHDMI, | 454 | AZX_DRIVER_ATIHDMI, |
@@ -463,6 +463,7 @@ enum { | |||
463 | 463 | ||
464 | static char *driver_short_names[] __devinitdata = { | 464 | static char *driver_short_names[] __devinitdata = { |
465 | [AZX_DRIVER_ICH] = "HDA Intel", | 465 | [AZX_DRIVER_ICH] = "HDA Intel", |
466 | [AZX_DRIVER_PCH] = "HDA Intel PCH", | ||
466 | [AZX_DRIVER_SCH] = "HDA Intel MID", | 467 | [AZX_DRIVER_SCH] = "HDA Intel MID", |
467 | [AZX_DRIVER_ATI] = "HDA ATI SB", | 468 | [AZX_DRIVER_ATI] = "HDA ATI SB", |
468 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", | 469 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", |
@@ -968,8 +969,8 @@ static void azx_stream_start(struct azx *chip, struct azx_dev *azx_dev) | |||
968 | azx_dev->insufficient = 1; | 969 | azx_dev->insufficient = 1; |
969 | 970 | ||
970 | /* enable SIE */ | 971 | /* enable SIE */ |
971 | azx_writeb(chip, INTCTL, | 972 | azx_writel(chip, INTCTL, |
972 | azx_readb(chip, INTCTL) | (1 << azx_dev->index)); | 973 | azx_readl(chip, INTCTL) | (1 << azx_dev->index)); |
973 | /* set DMA start and interrupt mask */ | 974 | /* set DMA start and interrupt mask */ |
974 | azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) | | 975 | azx_sd_writeb(azx_dev, SD_CTL, azx_sd_readb(azx_dev, SD_CTL) | |
975 | SD_CTL_DMA_START | SD_INT_MASK); | 976 | SD_CTL_DMA_START | SD_INT_MASK); |
@@ -988,8 +989,8 @@ static void azx_stream_stop(struct azx *chip, struct azx_dev *azx_dev) | |||
988 | { | 989 | { |
989 | azx_stream_clear(chip, azx_dev); | 990 | azx_stream_clear(chip, azx_dev); |
990 | /* disable SIE */ | 991 | /* disable SIE */ |
991 | azx_writeb(chip, INTCTL, | 992 | azx_writel(chip, INTCTL, |
992 | azx_readb(chip, INTCTL) & ~(1 << azx_dev->index)); | 993 | azx_readl(chip, INTCTL) & ~(1 << azx_dev->index)); |
993 | } | 994 | } |
994 | 995 | ||
995 | 996 | ||
@@ -1065,6 +1066,7 @@ static void azx_init_pci(struct azx *chip) | |||
1065 | 0x01, NVIDIA_HDA_ENABLE_COHBIT); | 1066 | 0x01, NVIDIA_HDA_ENABLE_COHBIT); |
1066 | break; | 1067 | break; |
1067 | case AZX_DRIVER_SCH: | 1068 | case AZX_DRIVER_SCH: |
1069 | case AZX_DRIVER_PCH: | ||
1068 | pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop); | 1070 | pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop); |
1069 | if (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) { | 1071 | if (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) { |
1070 | pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, | 1072 | pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, |
@@ -1350,7 +1352,7 @@ static void azx_bus_reset(struct hda_bus *bus) | |||
1350 | if (chip->initialized) { | 1352 | if (chip->initialized) { |
1351 | int i; | 1353 | int i; |
1352 | 1354 | ||
1353 | for (i = 0; i < AZX_MAX_PCMS; i++) | 1355 | for (i = 0; i < HDA_MAX_PCMS; i++) |
1354 | snd_pcm_suspend_all(chip->pcm[i]); | 1356 | snd_pcm_suspend_all(chip->pcm[i]); |
1355 | snd_hda_suspend(chip->bus); | 1357 | snd_hda_suspend(chip->bus); |
1356 | snd_hda_resume(chip->bus); | 1358 | snd_hda_resume(chip->bus); |
@@ -1412,7 +1414,7 @@ static int __devinit azx_codec_create(struct azx *chip, const char *model) | |||
1412 | chip->codec_mask &= ~(1 << c); | 1414 | chip->codec_mask &= ~(1 << c); |
1413 | /* More badly, accessing to a non-existing | 1415 | /* More badly, accessing to a non-existing |
1414 | * codec often screws up the controller chip, | 1416 | * codec often screws up the controller chip, |
1415 | * and distrubs the further communications. | 1417 | * and disturbs the further communications. |
1416 | * Thus if an error occurs during probing, | 1418 | * Thus if an error occurs during probing, |
1417 | * better to reset the controller chip to | 1419 | * better to reset the controller chip to |
1418 | * get back to the sanity state. | 1420 | * get back to the sanity state. |
@@ -1983,7 +1985,7 @@ azx_attach_pcm_stream(struct hda_bus *bus, struct hda_codec *codec, | |||
1983 | int pcm_dev = cpcm->device; | 1985 | int pcm_dev = cpcm->device; |
1984 | int s, err; | 1986 | int s, err; |
1985 | 1987 | ||
1986 | if (pcm_dev >= AZX_MAX_PCMS) { | 1988 | if (pcm_dev >= HDA_MAX_PCMS) { |
1987 | snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n", | 1989 | snd_printk(KERN_ERR SFX "Invalid PCM device number %d\n", |
1988 | pcm_dev); | 1990 | pcm_dev); |
1989 | return -EINVAL; | 1991 | return -EINVAL; |
@@ -2139,7 +2141,7 @@ static int azx_suspend(struct pci_dev *pci, pm_message_t state) | |||
2139 | 2141 | ||
2140 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); | 2142 | snd_power_change_state(card, SNDRV_CTL_POWER_D3hot); |
2141 | azx_clear_irq_pending(chip); | 2143 | azx_clear_irq_pending(chip); |
2142 | for (i = 0; i < AZX_MAX_PCMS; i++) | 2144 | for (i = 0; i < HDA_MAX_PCMS; i++) |
2143 | snd_pcm_suspend_all(chip->pcm[i]); | 2145 | snd_pcm_suspend_all(chip->pcm[i]); |
2144 | if (chip->initialized) | 2146 | if (chip->initialized) |
2145 | snd_hda_suspend(chip->bus); | 2147 | snd_hda_suspend(chip->bus); |
@@ -2262,6 +2264,7 @@ static struct snd_pci_quirk position_fix_list[] __devinitdata = { | |||
2262 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), | 2264 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), |
2263 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), | 2265 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), |
2264 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), | 2266 | SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB), |
2267 | SND_PCI_QUIRK(0x1106, 0x3288, "ASUS M2V-MX SE", POS_FIX_LPIB), | ||
2265 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), | 2268 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), |
2266 | SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), | 2269 | SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB), |
2267 | {} | 2270 | {} |
@@ -2418,6 +2421,7 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
2418 | if (bdl_pos_adj[dev] < 0) { | 2421 | if (bdl_pos_adj[dev] < 0) { |
2419 | switch (chip->driver_type) { | 2422 | switch (chip->driver_type) { |
2420 | case AZX_DRIVER_ICH: | 2423 | case AZX_DRIVER_ICH: |
2424 | case AZX_DRIVER_PCH: | ||
2421 | bdl_pos_adj[dev] = 1; | 2425 | bdl_pos_adj[dev] = 1; |
2422 | break; | 2426 | break; |
2423 | default: | 2427 | default: |
@@ -2683,7 +2687,7 @@ static void __devexit azx_remove(struct pci_dev *pci) | |||
2683 | } | 2687 | } |
2684 | 2688 | ||
2685 | /* PCI IDs */ | 2689 | /* PCI IDs */ |
2686 | static struct pci_device_id azx_ids[] = { | 2690 | static DEFINE_PCI_DEVICE_TABLE(azx_ids) = { |
2687 | /* ICH 6..10 */ | 2691 | /* ICH 6..10 */ |
2688 | { PCI_DEVICE(0x8086, 0x2668), .driver_data = AZX_DRIVER_ICH }, | 2692 | { PCI_DEVICE(0x8086, 0x2668), .driver_data = AZX_DRIVER_ICH }, |
2689 | { PCI_DEVICE(0x8086, 0x27d8), .driver_data = AZX_DRIVER_ICH }, | 2693 | { PCI_DEVICE(0x8086, 0x27d8), .driver_data = AZX_DRIVER_ICH }, |
@@ -2696,6 +2700,8 @@ static struct pci_device_id azx_ids[] = { | |||
2696 | { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, | 2700 | { PCI_DEVICE(0x8086, 0x3a6e), .driver_data = AZX_DRIVER_ICH }, |
2697 | /* PCH */ | 2701 | /* PCH */ |
2698 | { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH }, | 2702 | { PCI_DEVICE(0x8086, 0x3b56), .driver_data = AZX_DRIVER_ICH }, |
2703 | /* CPT */ | ||
2704 | { PCI_DEVICE(0x8086, 0x1c20), .driver_data = AZX_DRIVER_PCH }, | ||
2699 | /* SCH */ | 2705 | /* SCH */ |
2700 | { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, | 2706 | { PCI_DEVICE(0x8086, 0x811b), .driver_data = AZX_DRIVER_SCH }, |
2701 | /* ATI SB 450/600 */ | 2707 | /* ATI SB 450/600 */ |
@@ -2723,32 +2729,10 @@ static struct pci_device_id azx_ids[] = { | |||
2723 | /* ULI M5461 */ | 2729 | /* ULI M5461 */ |
2724 | { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI }, | 2730 | { PCI_DEVICE(0x10b9, 0x5461), .driver_data = AZX_DRIVER_ULI }, |
2725 | /* NVIDIA MCP */ | 2731 | /* NVIDIA MCP */ |
2726 | { PCI_DEVICE(0x10de, 0x026c), .driver_data = AZX_DRIVER_NVIDIA }, | 2732 | { PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID), |
2727 | { PCI_DEVICE(0x10de, 0x0371), .driver_data = AZX_DRIVER_NVIDIA }, | 2733 | .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8, |
2728 | { PCI_DEVICE(0x10de, 0x03e4), .driver_data = AZX_DRIVER_NVIDIA }, | 2734 | .class_mask = 0xffffff, |
2729 | { PCI_DEVICE(0x10de, 0x03f0), .driver_data = AZX_DRIVER_NVIDIA }, | 2735 | .driver_data = AZX_DRIVER_NVIDIA }, |
2730 | { PCI_DEVICE(0x10de, 0x044a), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2731 | { PCI_DEVICE(0x10de, 0x044b), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2732 | { PCI_DEVICE(0x10de, 0x055c), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2733 | { PCI_DEVICE(0x10de, 0x055d), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2734 | { PCI_DEVICE(0x10de, 0x0590), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2735 | { PCI_DEVICE(0x10de, 0x0774), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2736 | { PCI_DEVICE(0x10de, 0x0775), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2737 | { PCI_DEVICE(0x10de, 0x0776), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2738 | { PCI_DEVICE(0x10de, 0x0777), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2739 | { PCI_DEVICE(0x10de, 0x07fc), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2740 | { PCI_DEVICE(0x10de, 0x07fd), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2741 | { PCI_DEVICE(0x10de, 0x0ac0), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2742 | { PCI_DEVICE(0x10de, 0x0ac1), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2743 | { PCI_DEVICE(0x10de, 0x0ac2), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2744 | { PCI_DEVICE(0x10de, 0x0ac3), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2745 | { PCI_DEVICE(0x10de, 0x0be2), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2746 | { PCI_DEVICE(0x10de, 0x0be3), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2747 | { PCI_DEVICE(0x10de, 0x0be4), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2748 | { PCI_DEVICE(0x10de, 0x0d94), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2749 | { PCI_DEVICE(0x10de, 0x0d95), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2750 | { PCI_DEVICE(0x10de, 0x0d96), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2751 | { PCI_DEVICE(0x10de, 0x0d97), .driver_data = AZX_DRIVER_NVIDIA }, | ||
2752 | /* Teradici */ | 2736 | /* Teradici */ |
2753 | { PCI_DEVICE(0x6549, 0x1200), .driver_data = AZX_DRIVER_TERA }, | 2737 | { PCI_DEVICE(0x6549, 0x1200), .driver_data = AZX_DRIVER_TERA }, |
2754 | /* Creative X-Fi (CA0110-IBG) */ | 2738 | /* Creative X-Fi (CA0110-IBG) */ |