@@ -556,6 +556,12 @@ enum {
556
556
#define AZX_DCAPS_ALIGN_BUFSIZE (1 << 22) /* buffer size alignment */
557
557
#define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23) /* BDLE in 4k boundary */
558
558
#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)
559
565
560
566
/* quirks for ATI SB / AMD Hudson */
561
567
#define AZX_DCAPS_PRESET_ATI_SB \
@@ -2433,6 +2439,9 @@ static void azx_power_notify(struct hda_bus *bus, bool power_up)
2433
2439
{
2434
2440
struct azx * chip = bus -> private_data ;
2435
2441
2442
+ if (!(chip -> driver_caps & AZX_DCAPS_PM_RUNTIME ))
2443
+ return ;
2444
+
2436
2445
if (power_up )
2437
2446
pm_runtime_get_sync (& chip -> pci -> dev );
2438
2447
else
@@ -2548,7 +2557,8 @@ static int azx_runtime_suspend(struct device *dev)
2548
2557
struct snd_card * card = dev_get_drvdata (dev );
2549
2558
struct azx * chip = card -> private_data ;
2550
2559
2551
- if (!power_save_controller )
2560
+ if (!power_save_controller ||
2561
+ !(chip -> driver_caps & AZX_DCAPS_PM_RUNTIME ))
2552
2562
return - EAGAIN ;
2553
2563
2554
2564
azx_stop_chip (chip );
@@ -3429,39 +3439,30 @@ static void __devexit azx_remove(struct pci_dev *pci)
3429
3439
static DEFINE_PCI_DEVICE_TABLE (azx_ids ) = {
3430
3440
/* CPT */
3431
3441
{ 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 },
3434
3443
/* PBG */
3435
3444
{ 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 },
3438
3446
/* Panther Point */
3439
3447
{ 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 },
3442
3449
/* Lynx Point */
3443
3450
{ 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 },
3446
3452
/* Lynx Point-LP */
3447
3453
{ 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 },
3450
3455
/* Lynx Point-LP */
3451
3456
{ 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 },
3454
3458
/* Haswell */
3455
3459
{ 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 },
3458
3461
{ 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 },
3461
3463
/* 5 Series/3400 */
3462
3464
{ 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 },
3465
3466
/* SCH */
3466
3467
{ PCI_DEVICE (0x8086 , 0x811b ),
3467
3468
.driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |
0 commit comments