diff options
| author | Takashi Iwai <tiwai@suse.de> | 2012-02-28 05:58:40 -0500 |
|---|---|---|
| committer | Takashi Iwai <tiwai@suse.de> | 2012-02-28 06:18:15 -0500 |
| commit | a6f2fd557f993aecc93d51afd9e339524107937f (patch) | |
| tree | 052ca4166b132a4228d3f6694aba24235660b4b1 | |
| parent | 5556e147083fb4d473d5c1a82f73205b8b145cd9 (diff) | |
ALSA: hda - Add position_fix=4 (COMBO) option
This patch adds a new position_fix option value, 4, as a combo mode
to use LPIB for playbacks and POSBUF for captures. It's the way
recommended by Intel hardware guys.
Signed-off-by: Takashi Iwai <tiwai@suse.de>
| -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; |
