Skip to content

Commit 2ea3c6a

Browse files
committed
ALSA: hda - Limit runtime PM support only to known Intel chips
We've got a report that the runtime PM may make the codec the unresponsive on AMD platforms. Since the feature has been tested only on the recent Intel platforms, it's safer to limit the support to such devices for now. This patch adds a new DCAPS bit flag indicating the runtime PM support, and mark it for Intel controllers. Reported-and-tested-by: Julian Wollrath <jwollrath@web.de> Signed-off-by: Takashi Iwai <tiwai@suse.de>
1 parent 989c318 commit 2ea3c6a

File tree

1 file changed

+20
-19
lines changed

1 file changed

+20
-19
lines changed

sound/pci/hda/hda_intel.c

Lines changed: 20 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -556,6 +556,12 @@ enum {
556556
#define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
557557
#define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
558558
#define AZX_DCAPS_COUNT_LPIB_DELAY (1 << 25) /* Take LPIB as delay */
559+
#define AZX_DCAPS_PM_RUNTIME (1 << 26) /* runtime PM support */
560+
561+
/* quirks for Intel PCH */
562+
#define AZX_DCAPS_INTEL_PCH \
563+
(AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \
564+
AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME)
559565

560566
/* quirks for ATI SB / AMD Hudson */
561567
#define AZX_DCAPS_PRESET_ATI_SB \
@@ -2433,6 +2439,9 @@ static void azx_power_notify(struct hda_bus *bus, bool power_up)
24332439
{
24342440
struct azx *chip = bus->private_data;
24352441

2442+
if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
2443+
return;
2444+
24362445
if (power_up)
24372446
pm_runtime_get_sync(&chip->pci->dev);
24382447
else
@@ -2548,7 +2557,8 @@ static int azx_runtime_suspend(struct device *dev)
25482557
struct snd_card *card = dev_get_drvdata(dev);
25492558
struct azx *chip = card->private_data;
25502559

2551-
if (!power_save_controller)
2560+
if (!power_save_controller ||
2561+
!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))
25522562
return -EAGAIN;
25532563

25542564
azx_stop_chip(chip);
@@ -3429,39 +3439,30 @@ static void __devexit azx_remove(struct pci_dev *pci)
34293439
static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {
34303440
/* CPT */
34313441
{ PCI_DEVICE(0x8086, 0x1c20),
3432-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3433-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3442+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34343443
/* PBG */
34353444
{ PCI_DEVICE(0x8086, 0x1d20),
3436-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3437-
AZX_DCAPS_BUFSIZE},
3445+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34383446
/* Panther Point */
34393447
{ PCI_DEVICE(0x8086, 0x1e20),
3440-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3441-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3448+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34423449
/* Lynx Point */
34433450
{ PCI_DEVICE(0x8086, 0x8c20),
3444-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3445-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3451+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34463452
/* Lynx Point-LP */
34473453
{ PCI_DEVICE(0x8086, 0x9c20),
3448-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3449-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3454+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34503455
/* Lynx Point-LP */
34513456
{ PCI_DEVICE(0x8086, 0x9c21),
3452-
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP |
3453-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3457+
.driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },
34543458
/* Haswell */
34553459
{ PCI_DEVICE(0x8086, 0x0c0c),
3456-
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3457-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3460+
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
34583461
{ PCI_DEVICE(0x8086, 0x0d0c),
3459-
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3460-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3462+
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
34613463
/* 5 Series/3400 */
34623464
{ PCI_DEVICE(0x8086, 0x3b56),
3463-
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
3464-
AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY },
3465+
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },
34653466
/* SCH */
34663467
{ PCI_DEVICE(0x8086, 0x811b),
34673468
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |

0 commit comments

Comments
 (0)