diff options
-rw-r--r-- | Documentation/sound/alsa/ALSA-Configuration.txt | 2 | ||||
-rw-r--r-- | sound/pci/hda/hda_intel.c | 15 |
2 files changed, 7 insertions, 10 deletions
diff --git a/Documentation/sound/alsa/ALSA-Configuration.txt b/Documentation/sound/alsa/ALSA-Configuration.txt index 529073dea196..ab28f7b62f29 100644 --- a/Documentation/sound/alsa/ALSA-Configuration.txt +++ b/Documentation/sound/alsa/ALSA-Configuration.txt | |||
@@ -753,7 +753,7 @@ Prior to version 0.9.0rc4 options had a 'snd_' prefix. This was removed. | |||
753 | 753 | ||
754 | [Multiple options for each card instance] | 754 | [Multiple options for each card instance] |
755 | model - force the model name | 755 | model - force the model name |
756 | position_fix - Fix DMA pointer (0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size) | 756 | position_fix - Fix DMA pointer (0 = auto, 1 = use LPIB, 2 = POSBUF) |
757 | probe_mask - Bitmask to probe codecs (default = -1, meaning all slots) | 757 | probe_mask - Bitmask to probe codecs (default = -1, meaning all slots) |
758 | 758 | ||
759 | [Single (global) options] | 759 | [Single (global) options] |
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 1ec3fd4c8940..0ff8b9b9629e 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -70,7 +70,7 @@ module_param_array(model, charp, NULL, 0444); | |||
70 | MODULE_PARM_DESC(model, "Use the given board model."); | 70 | MODULE_PARM_DESC(model, "Use the given board model."); |
71 | module_param_array(position_fix, int, NULL, 0444); | 71 | module_param_array(position_fix, int, NULL, 0444); |
72 | MODULE_PARM_DESC(position_fix, "Fix DMA pointer " | 72 | MODULE_PARM_DESC(position_fix, "Fix DMA pointer " |
73 | "(0 = auto, 1 = none, 2 = POSBUF, 3 = FIFO size)."); | 73 | "(0 = auto, 1 = none, 2 = POSBUF)."); |
74 | module_param_array(probe_mask, int, NULL, 0444); | 74 | module_param_array(probe_mask, int, NULL, 0444); |
75 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); | 75 | MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1)."); |
76 | module_param(single_cmd, bool, 0444); | 76 | module_param(single_cmd, bool, 0444); |
@@ -266,9 +266,8 @@ enum { SDI0, SDI1, SDI2, SDI3, SDO0, SDO1, SDO2, SDO3 }; | |||
266 | /* position fix mode */ | 266 | /* position fix mode */ |
267 | enum { | 267 | enum { |
268 | POS_FIX_AUTO, | 268 | POS_FIX_AUTO, |
269 | POS_FIX_NONE, | 269 | POS_FIX_LPIB, |
270 | POS_FIX_POSBUF, | 270 | POS_FIX_POSBUF, |
271 | POS_FIX_FIFO, | ||
272 | }; | 271 | }; |
273 | 272 | ||
274 | /* Defines for ATI HD Audio support in SB450 south bridge */ | 273 | /* Defines for ATI HD Audio support in SB450 south bridge */ |
@@ -1506,8 +1505,6 @@ static unsigned int azx_get_position(struct azx *chip, | |||
1506 | } else { | 1505 | } else { |
1507 | /* read LPIB */ | 1506 | /* read LPIB */ |
1508 | pos = azx_sd_readl(azx_dev, SD_LPIB); | 1507 | pos = azx_sd_readl(azx_dev, SD_LPIB); |
1509 | if (chip->position_fix == POS_FIX_FIFO) | ||
1510 | pos += azx_dev->fifo_size; | ||
1511 | } | 1508 | } |
1512 | if (pos >= azx_dev->bufsize) | 1509 | if (pos >= azx_dev->bufsize) |
1513 | pos = 0; | 1510 | pos = 0; |
@@ -1542,7 +1539,7 @@ static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev) | |||
1542 | printk(KERN_WARNING | 1539 | printk(KERN_WARNING |
1543 | "hda-intel: Invalid position buffer, " | 1540 | "hda-intel: Invalid position buffer, " |
1544 | "using LPIB read method instead.\n"); | 1541 | "using LPIB read method instead.\n"); |
1545 | chip->position_fix = POS_FIX_NONE; | 1542 | chip->position_fix = POS_FIX_LPIB; |
1546 | pos = azx_get_position(chip, azx_dev); | 1543 | pos = azx_get_position(chip, azx_dev); |
1547 | } else | 1544 | } else |
1548 | chip->position_fix = POS_FIX_POSBUF; | 1545 | chip->position_fix = POS_FIX_POSBUF; |
@@ -1917,9 +1914,9 @@ static int azx_dev_free(struct snd_device *device) | |||
1917 | * white/black-listing for position_fix | 1914 | * white/black-listing for position_fix |
1918 | */ | 1915 | */ |
1919 | static struct snd_pci_quirk position_fix_list[] __devinitdata = { | 1916 | static struct snd_pci_quirk position_fix_list[] __devinitdata = { |
1920 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_NONE), | 1917 | SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB), |
1921 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_NONE), | 1918 | SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB), |
1922 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_NONE), | 1919 | SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB), |
1923 | {} | 1920 | {} |
1924 | }; | 1921 | }; |
1925 | 1922 | ||