diff options
Diffstat (limited to 'sound/pci/hda/hda_intel.c')
| -rw-r--r-- | sound/pci/hda/hda_intel.c | 39 | 
1 files changed, 20 insertions, 19 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index cd2dbaf1be7..f9d870e554d 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c @@ -556,6 +556,12 @@ enum {  #define AZX_DCAPS_ALIGN_BUFSIZE	(1 << 22)	/* buffer size alignment */  #define AZX_DCAPS_4K_BDLE_BOUNDARY (1 << 23)	/* BDLE in 4k boundary */  #define AZX_DCAPS_COUNT_LPIB_DELAY  (1 << 25)	/* Take LPIB as delay */ +#define AZX_DCAPS_PM_RUNTIME	(1 << 26)	/* runtime PM support */ + +/* quirks for Intel PCH */ +#define AZX_DCAPS_INTEL_PCH \ +	(AZX_DCAPS_SCH_SNOOP | AZX_DCAPS_BUFSIZE | \ +	 AZX_DCAPS_COUNT_LPIB_DELAY | AZX_DCAPS_PM_RUNTIME)  /* quirks for ATI SB / AMD Hudson */  #define AZX_DCAPS_PRESET_ATI_SB \ @@ -2433,6 +2439,9 @@ static void azx_power_notify(struct hda_bus *bus, bool power_up)  {  	struct azx *chip = bus->private_data; +	if (!(chip->driver_caps & AZX_DCAPS_PM_RUNTIME)) +		return; +  	if (power_up)  		pm_runtime_get_sync(&chip->pci->dev);  	else @@ -2548,7 +2557,8 @@ static int azx_runtime_suspend(struct device *dev)  	struct snd_card *card = dev_get_drvdata(dev);  	struct azx *chip = card->private_data; -	if (!power_save_controller) +	if (!power_save_controller || +	    !(chip->driver_caps & AZX_DCAPS_PM_RUNTIME))  		return -EAGAIN;  	azx_stop_chip(chip); @@ -3429,39 +3439,30 @@ static void __devexit azx_remove(struct pci_dev *pci)  static DEFINE_PCI_DEVICE_TABLE(azx_ids) = {  	/* CPT */  	{ PCI_DEVICE(0x8086, 0x1c20), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* PBG */  	{ PCI_DEVICE(0x8086, 0x1d20), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE}, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* Panther Point */  	{ PCI_DEVICE(0x8086, 0x1e20), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* Lynx Point */  	{ PCI_DEVICE(0x8086, 0x8c20), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* Lynx Point-LP */  	{ PCI_DEVICE(0x8086, 0x9c20), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* Lynx Point-LP */  	{ PCI_DEVICE(0x8086, 0x9c21), -	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH },  	/* Haswell */  	{ PCI_DEVICE(0x8086, 0x0c0c), -	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },  	{ PCI_DEVICE(0x8086, 0x0d0c), -	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },  	/* 5 Series/3400 */  	{ PCI_DEVICE(0x8086, 0x3b56), -	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP | -	  AZX_DCAPS_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY }, +	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH },  	/* SCH */  	{ PCI_DEVICE(0x8086, 0x811b),  	  .driver_data = AZX_DRIVER_SCH | AZX_DCAPS_SCH_SNOOP |  |