diff options
-rw-r--r-- | Documentation/sound/alsa/ALSA-Configuration.txt | 8 | ||||
-rw-r--r-- | Documentation/sound/alsa/HD-Audio.txt | 7 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 10 |
3 files changed, 22 insertions, 3 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 936699e4f04b..9af64c508ab4 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
@@ -860,7 +860,8 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
860 | 860 | ||
861 | [Multiple options for each card instance] | 861 | [Multiple options for each card instance] |
862 | model - force the model name | 862 | model - force the model name |
863 | position_fix - Fix DMA pointer (0 = auto, 1 = use LPIB, 2 = POSBUF) | 863 | position_fix - Fix DMA pointer (0 = auto, 1 = use LPIB, 2 = POSBUF, |
864 | 3 = VIACOMBO, 4 = COMBO) | ||
864 | probe_mask - Bitmask to probe codecs (default = -1, meaning all slots) | 865 | probe_mask - Bitmask to probe codecs (default = -1, meaning all slots) |
865 | When the bit 8 (0x100) is set, the lower 8 bits are used | 866 | When the bit 8 (0x100) is set, the lower 8 bits are used |
866 | as the "fixed" codec slots; i.e. the driver probes the | 867 | as the "fixed" codec slots; i.e. the driver probes the |
@@ -925,6 +926,11 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
925 | (Usually SD_LPIB register is more accurate than the | 926 | (Usually SD_LPIB register is more accurate than the |
926 | position buffer.) | 927 | position buffer.) |
927 | 928 | ||
929 | position_fix=3 is specific to VIA devices. The position | ||
930 | of the capture stream is checked from both LPIB and POSBUF | ||
931 | values. position_fix=4 is a combination mode, using LPIB | ||
932 | for playback and POSBUF for capture. | ||
933 | |||
928 | NB: If you get many "azx_get_response timeout" messages at | 934 | NB: If you get many "azx_get_response timeout" messages at |
929 | loading, it's likely a problem of interrupts (e.g. ACPI irq | 935 | loading, it's likely a problem of interrupts (e.g. ACPI irq |
930 | routing). Try to boot with options like "pci=noacpi". Also, you | 936 | routing). Try to boot with options like "pci=noacpi". Also, you |
diff --git a/Documentation/sound/alsa/HD-Audio.txt b/Documentation/sound/alsa/HD-Audio.txt index 91fee3b45fb8..7813c06a5c71 100644 --- a/Documentation/sound/alsa/HD-Audio.txt +++ b/Documentation/sound/alsa/HD-Audio.txt | |||
@@ -59,7 +59,12 @@ a case, you can change the default method via `position_fix` option. | |||
59 | `position_fix=1` means to use LPIB method explicitly. | 59 | `position_fix=1` means to use LPIB method explicitly. |
60 | `position_fix=2` means to use the position-buffer. | 60 | `position_fix=2` means to use the position-buffer. |
61 | `position_fix=3` means to use a combination of both methods, needed | 61 | `position_fix=3` means to use a combination of both methods, needed |
62 | for some VIA and ATI controllers. 0 is the default value for all other | 62 | for some VIA controllers. The capture stream position is corrected |
63 | by comparing both LPIB and position-buffer values. | ||
64 | `position_fix=4` is another combination available for all controllers, | ||
65 | and uses LPIB for the playback and the position-buffer for the capture | ||
66 | streams. | ||
67 | 0 is the default value for all other | ||
63 | controllers, the automatic check and fallback to LPIB as described in | 68 | controllers, the automatic check and fallback to LPIB as described in |
64 | the above. If you get a problem of repeated sounds, this option might | 69 | the above. If you get a problem of repeated sounds, this option might |
65 | help. | 70 | help. |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index e354c1616541..6e958bf94191 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -84,7 +84,7 @@ module_param_array(model, charp, NULL, 0444); | |||
84 | MODULE_PARM_DESC(model, "Use the given board model."); | 84 | MODULE_PARM_DESC(model, "Use the given board model."); |
85 | module_param_array(position_fix, int, NULL, 0444); | 85 | module_param_array(position_fix, int, NULL, 0444); |
86 | MODULE_PARM_DESC(position_fix, "DMA pointer read method." | 86 | MODULE_PARM_DESC(position_fix, "DMA pointer read method." |
87 | "(0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO)."); | 87 | "(0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO)."); |
88 | module_param_array(bdl_pos_adj, int, NULL, 0644); | 88 | module_param_array(bdl_pos_adj, int, NULL, 0644); |
89 | MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset."); | 89 | MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset."); |
90 | module_param_array(probe_mask, int, NULL, 0444); | 90 | module_param_array(probe_mask, int, NULL, 0444); |
@@ -330,6 +330,7 @@ enum { | |||
330 | POS_FIX_LPIB, | 330 | POS_FIX_LPIB, |
331 | POS_FIX_POSBUF, | 331 | POS_FIX_POSBUF, |
332 | POS_FIX_VIACOMBO, | 332 | POS_FIX_VIACOMBO, |
333 | POS_FIX_COMBO, | ||
333 | }; | 334 | }; |
334 | 335 | ||
335 | /* Defines for ATI HD Audio support in SB450 south bridge */ | 336 | /* Defines for ATI HD Audio support in SB450 south bridge */ |
@@ -2520,6 +2521,7 @@ static int __devinit check_position_fix(struct azx *chip, int fix) | |||
2520 | case POS_FIX_LPIB: | 2521 | case POS_FIX_LPIB: |
2521 | case POS_FIX_POSBUF: | 2522 | case POS_FIX_POSBUF: |
2522 | case POS_FIX_VIACOMBO: | 2523 | case POS_FIX_VIACOMBO: |
2524 | case POS_FIX_COMBO: | ||
2523 | return fix; | 2525 | return fix; |
2524 | } | 2526 | } |
2525 | 2527 | ||
@@ -2699,6 +2701,12 @@ static int __devinit azx_create(struct snd_card *card, struct pci_dev *pci, | |||
2699 | 2701 | ||
2700 | chip->position_fix[0] = chip->position_fix[1] = | 2702 | chip->position_fix[0] = chip->position_fix[1] = |
2701 | check_position_fix(chip, position_fix[dev]); | 2703 | check_position_fix(chip, position_fix[dev]); |
2704 | /* combo mode uses LPIB for playback */ | ||
2705 | if (chip->position_fix[0] == POS_FIX_COMBO) { | ||
2706 | chip->position_fix[0] = POS_FIX_LPIB; | ||
2707 | chip->position_fix[1] = POS_FIX_AUTO; | ||
2708 | } | ||
2709 | |||
2702 | check_probe_mask(chip, dev); | 2710 | check_probe_mask(chip, dev); |
2703 | 2711 | ||
2704 | chip->single_cmd = single_cmd; | 2712 | chip->single_cmd = single_cmd; |