brintos

brintos / linux-shallow public Read only

0
0
Text · 81.6 KiB · b4540c5 Raw
2771 lines · c
1// SPDX-License-Identifier: GPL-2.0-or-later2/*3 *4 *  hda_intel.c - Implementation of primary alsa driver code base5 *                for Intel HD Audio.6 *7 *  Copyright(c) 2004 Intel Corporation8 *9 *  Copyright (c) 2004 Takashi Iwai <tiwai@suse.de>10 *                     PeiSen Hou <pshou@realtek.com.tw>11 *12 *  CONTACTS:13 *14 *  Matt Jared		matt.jared@intel.com15 *  Andy Kopp		andy.kopp@intel.com16 *  Dan Kogan		dan.d.kogan@intel.com17 *18 *  CHANGES:19 *20 *  2004.12.01	Major rewrite by tiwai, merged the work of pshou21 */22 23#include <linux/delay.h>24#include <linux/interrupt.h>25#include <linux/kernel.h>26#include <linux/module.h>27#include <linux/dma-mapping.h>28#include <linux/moduleparam.h>29#include <linux/init.h>30#include <linux/slab.h>31#include <linux/pci.h>32#include <linux/mutex.h>33#include <linux/io.h>34#include <linux/pm_runtime.h>35#include <linux/clocksource.h>36#include <linux/time.h>37#include <linux/completion.h>38#include <linux/acpi.h>39#include <linux/pgtable.h>40 41#ifdef CONFIG_X8642/* for snoop control */43#include <asm/set_memory.h>44#include <asm/cpufeature.h>45#endif46#include <sound/core.h>47#include <sound/initval.h>48#include <sound/hdaudio.h>49#include <sound/hda_i915.h>50#include <sound/intel-dsp-config.h>51#include <linux/vgaarb.h>52#include <linux/vga_switcheroo.h>53#include <linux/apple-gmux.h>54#include <linux/firmware.h>55#include <sound/hda_codec.h>56#include "hda_controller.h"57#include "hda_intel.h"58 59#define CREATE_TRACE_POINTS60#include "hda_intel_trace.h"61 62/* position fix mode */63enum {64	POS_FIX_AUTO,65	POS_FIX_LPIB,66	POS_FIX_POSBUF,67	POS_FIX_VIACOMBO,68	POS_FIX_COMBO,69	POS_FIX_SKL,70	POS_FIX_FIFO,71};72 73/* Defines for ATI HD Audio support in SB450 south bridge */74#define ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR   0x4275#define ATI_SB450_HDAUDIO_ENABLE_SNOOP      0x0276 77/* Defines for Nvidia HDA support */78#define NVIDIA_HDA_TRANSREG_ADDR      0x4e79#define NVIDIA_HDA_ENABLE_COHBITS     0x0f80#define NVIDIA_HDA_ISTRM_COH          0x4d81#define NVIDIA_HDA_OSTRM_COH          0x4c82#define NVIDIA_HDA_ENABLE_COHBIT      0x0183 84/* Defines for Intel SCH HDA snoop control */85#define INTEL_HDA_CGCTL	 0x4886#define INTEL_HDA_CGCTL_MISCBDCGE        (0x1 << 6)87#define INTEL_SCH_HDA_DEVC      0x7888#define INTEL_SCH_HDA_DEVC_NOSNOOP       (0x1<<11)89 90/* max number of SDs */91/* ICH, ATI and VIA have 4 playback and 4 capture */92#define ICH6_NUM_CAPTURE	493#define ICH6_NUM_PLAYBACK	494 95/* ULI has 6 playback and 5 capture */96#define ULI_NUM_CAPTURE		597#define ULI_NUM_PLAYBACK	698 99/* ATI HDMI may have up to 8 playbacks and 0 capture */100#define ATIHDMI_NUM_CAPTURE	0101#define ATIHDMI_NUM_PLAYBACK	8102 103 104static int index[SNDRV_CARDS] = SNDRV_DEFAULT_IDX;105static char *id[SNDRV_CARDS] = SNDRV_DEFAULT_STR;106static bool enable[SNDRV_CARDS] = SNDRV_DEFAULT_ENABLE_PNP;107static char *model[SNDRV_CARDS];108static int position_fix[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};109static int bdl_pos_adj[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};110static int probe_mask[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] = -1};111static int probe_only[SNDRV_CARDS];112static int jackpoll_ms[SNDRV_CARDS];113static int single_cmd = -1;114static int enable_msi = -1;115#ifdef CONFIG_SND_HDA_PATCH_LOADER116static char *patch[SNDRV_CARDS];117#endif118#ifdef CONFIG_SND_HDA_INPUT_BEEP119static bool beep_mode[SNDRV_CARDS] = {[0 ... (SNDRV_CARDS-1)] =120					CONFIG_SND_HDA_INPUT_BEEP_MODE};121#endif122static bool dmic_detect = 1;123static bool ctl_dev_id = IS_ENABLED(CONFIG_SND_HDA_CTL_DEV_ID) ? 1 : 0;124 125module_param_array(index, int, NULL, 0444);126MODULE_PARM_DESC(index, "Index value for Intel HD audio interface.");127module_param_array(id, charp, NULL, 0444);128MODULE_PARM_DESC(id, "ID string for Intel HD audio interface.");129module_param_array(enable, bool, NULL, 0444);130MODULE_PARM_DESC(enable, "Enable Intel HD audio interface.");131module_param_array(model, charp, NULL, 0444);132MODULE_PARM_DESC(model, "Use the given board model.");133module_param_array(position_fix, int, NULL, 0444);134MODULE_PARM_DESC(position_fix, "DMA pointer read method."135		 "(-1 = system default, 0 = auto, 1 = LPIB, 2 = POSBUF, 3 = VIACOMBO, 4 = COMBO, 5 = SKL+, 6 = FIFO).");136module_param_array(bdl_pos_adj, int, NULL, 0644);137MODULE_PARM_DESC(bdl_pos_adj, "BDL position adjustment offset.");138module_param_array(probe_mask, int, NULL, 0444);139MODULE_PARM_DESC(probe_mask, "Bitmask to probe codecs (default = -1).");140module_param_array(probe_only, int, NULL, 0444);141MODULE_PARM_DESC(probe_only, "Only probing and no codec initialization.");142module_param_array(jackpoll_ms, int, NULL, 0444);143MODULE_PARM_DESC(jackpoll_ms, "Ms between polling for jack events (default = 0, using unsol events only)");144module_param(single_cmd, bint, 0444);145MODULE_PARM_DESC(single_cmd, "Use single command to communicate with codecs "146		 "(for debugging only).");147module_param(enable_msi, bint, 0444);148MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");149#ifdef CONFIG_SND_HDA_PATCH_LOADER150module_param_array(patch, charp, NULL, 0444);151MODULE_PARM_DESC(patch, "Patch file for Intel HD audio interface.");152#endif153#ifdef CONFIG_SND_HDA_INPUT_BEEP154module_param_array(beep_mode, bool, NULL, 0444);155MODULE_PARM_DESC(beep_mode, "Select HDA Beep registration mode "156			    "(0=off, 1=on) (default=1).");157#endif158module_param(dmic_detect, bool, 0444);159MODULE_PARM_DESC(dmic_detect, "Allow DSP driver selection (bypass this driver) "160			     "(0=off, 1=on) (default=1); "161		 "deprecated, use snd-intel-dspcfg.dsp_driver option instead");162module_param(ctl_dev_id, bool, 0444);163MODULE_PARM_DESC(ctl_dev_id, "Use control device identifier (based on codec address).");164 165#ifdef CONFIG_PM166static int param_set_xint(const char *val, const struct kernel_param *kp);167static const struct kernel_param_ops param_ops_xint = {168	.set = param_set_xint,169	.get = param_get_int,170};171#define param_check_xint param_check_int172 173static int power_save = CONFIG_SND_HDA_POWER_SAVE_DEFAULT;174module_param(power_save, xint, 0644);175MODULE_PARM_DESC(power_save, "Automatic power-saving timeout "176		 "(in second, 0 = disable).");177 178static int pm_blacklist = -1;179module_param(pm_blacklist, bint, 0644);180MODULE_PARM_DESC(pm_blacklist, "Enable power-management denylist");181 182/* reset the HD-audio controller in power save mode.183 * this may give more power-saving, but will take longer time to184 * wake up.185 */186static bool power_save_controller = 1;187module_param(power_save_controller, bool, 0644);188MODULE_PARM_DESC(power_save_controller, "Reset controller in power save mode.");189#else /* CONFIG_PM */190#define power_save	0191#define pm_blacklist	0192#define power_save_controller	false193#endif /* CONFIG_PM */194 195static int align_buffer_size = -1;196module_param(align_buffer_size, bint, 0644);197MODULE_PARM_DESC(align_buffer_size,198		"Force buffer and period sizes to be multiple of 128 bytes.");199 200#ifdef CONFIG_X86201static int hda_snoop = -1;202module_param_named(snoop, hda_snoop, bint, 0444);203MODULE_PARM_DESC(snoop, "Enable/disable snooping");204#else205#define hda_snoop		true206#endif207 208 209MODULE_LICENSE("GPL");210MODULE_DESCRIPTION("Intel HDA driver");211 212#if defined(CONFIG_PM) && defined(CONFIG_VGA_SWITCHEROO)213#if IS_ENABLED(CONFIG_SND_HDA_CODEC_HDMI)214#define SUPPORT_VGA_SWITCHEROO215#endif216#endif217 218 219/*220 */221 222/* driver types */223enum {224	AZX_DRIVER_ICH,225	AZX_DRIVER_PCH,226	AZX_DRIVER_SCH,227	AZX_DRIVER_SKL,228	AZX_DRIVER_HDMI,229	AZX_DRIVER_ATI,230	AZX_DRIVER_ATIHDMI,231	AZX_DRIVER_ATIHDMI_NS,232	AZX_DRIVER_GFHDMI,233	AZX_DRIVER_VIA,234	AZX_DRIVER_SIS,235	AZX_DRIVER_ULI,236	AZX_DRIVER_NVIDIA,237	AZX_DRIVER_TERA,238	AZX_DRIVER_CTX,239	AZX_DRIVER_CTHDA,240	AZX_DRIVER_CMEDIA,241	AZX_DRIVER_ZHAOXIN,242	AZX_DRIVER_LOONGSON,243	AZX_DRIVER_GENERIC,244	AZX_NUM_DRIVERS, /* keep this as last entry */245};246 247#define azx_get_snoop_type(chip) \248	(((chip)->driver_caps & AZX_DCAPS_SNOOP_MASK) >> 10)249#define AZX_DCAPS_SNOOP_TYPE(type) ((AZX_SNOOP_TYPE_ ## type) << 10)250 251/* quirks for old Intel chipsets */252#define AZX_DCAPS_INTEL_ICH \253	(AZX_DCAPS_OLD_SSYNC | AZX_DCAPS_NO_ALIGN_BUFSIZE)254 255/* quirks for Intel PCH */256#define AZX_DCAPS_INTEL_PCH_BASE \257	(AZX_DCAPS_NO_ALIGN_BUFSIZE | AZX_DCAPS_COUNT_LPIB_DELAY |\258	 AZX_DCAPS_SNOOP_TYPE(SCH))259 260/* PCH up to IVB; no runtime PM; bind with i915 gfx */261#define AZX_DCAPS_INTEL_PCH_NOPM \262	(AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_I915_COMPONENT)263 264/* PCH for HSW/BDW; with runtime PM */265/* no i915 binding for this as HSW/BDW has another controller for HDMI */266#define AZX_DCAPS_INTEL_PCH \267	(AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_PM_RUNTIME)268 269/* HSW HDMI */270#define AZX_DCAPS_INTEL_HASWELL \271	(/*AZX_DCAPS_ALIGN_BUFSIZE |*/ AZX_DCAPS_COUNT_LPIB_DELAY |\272	 AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_COMPONENT |\273	 AZX_DCAPS_SNOOP_TYPE(SCH))274 275/* Broadwell HDMI can't use position buffer reliably, force to use LPIB */276#define AZX_DCAPS_INTEL_BROADWELL \277	(/*AZX_DCAPS_ALIGN_BUFSIZE |*/ AZX_DCAPS_POSFIX_LPIB |\278	 AZX_DCAPS_PM_RUNTIME | AZX_DCAPS_I915_COMPONENT |\279	 AZX_DCAPS_SNOOP_TYPE(SCH))280 281#define AZX_DCAPS_INTEL_BAYTRAIL \282	(AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_I915_COMPONENT)283 284#define AZX_DCAPS_INTEL_BRASWELL \285	(AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_PM_RUNTIME |\286	 AZX_DCAPS_I915_COMPONENT)287 288#define AZX_DCAPS_INTEL_SKYLAKE \289	(AZX_DCAPS_INTEL_PCH_BASE | AZX_DCAPS_PM_RUNTIME |\290	 AZX_DCAPS_SEPARATE_STREAM_TAG | AZX_DCAPS_I915_COMPONENT)291 292#define AZX_DCAPS_INTEL_BROXTON		AZX_DCAPS_INTEL_SKYLAKE293 294#define AZX_DCAPS_INTEL_LNL \295	(AZX_DCAPS_INTEL_SKYLAKE | AZX_DCAPS_PIO_COMMANDS)296 297/* quirks for ATI SB / AMD Hudson */298#define AZX_DCAPS_PRESET_ATI_SB \299	(AZX_DCAPS_NO_TCSEL | AZX_DCAPS_POSFIX_LPIB |\300	 AZX_DCAPS_SNOOP_TYPE(ATI))301 302/* quirks for ATI/AMD HDMI */303#define AZX_DCAPS_PRESET_ATI_HDMI \304	(AZX_DCAPS_NO_TCSEL | AZX_DCAPS_POSFIX_LPIB|\305	 AZX_DCAPS_NO_MSI64)306 307/* quirks for ATI HDMI with snoop off */308#define AZX_DCAPS_PRESET_ATI_HDMI_NS \309	(AZX_DCAPS_PRESET_ATI_HDMI | AZX_DCAPS_SNOOP_OFF)310 311/* quirks for AMD SB */312#define AZX_DCAPS_PRESET_AMD_SB \313	(AZX_DCAPS_NO_TCSEL | AZX_DCAPS_AMD_WORKAROUND |\314	 AZX_DCAPS_SNOOP_TYPE(ATI) | AZX_DCAPS_PM_RUNTIME |\315	 AZX_DCAPS_RETRY_PROBE)316 317/* quirks for Nvidia */318#define AZX_DCAPS_PRESET_NVIDIA \319	(AZX_DCAPS_NO_MSI | AZX_DCAPS_CORBRP_SELF_CLEAR |\320	 AZX_DCAPS_SNOOP_TYPE(NVIDIA))321 322#define AZX_DCAPS_PRESET_CTHDA \323	(AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB |\324	 AZX_DCAPS_NO_64BIT |\325	 AZX_DCAPS_4K_BDLE_BOUNDARY | AZX_DCAPS_SNOOP_OFF)326 327/*328 * vga_switcheroo support329 */330#ifdef SUPPORT_VGA_SWITCHEROO331#define use_vga_switcheroo(chip)	((chip)->use_vga_switcheroo)332#define needs_eld_notify_link(chip)	((chip)->bus.keep_power)333#else334#define use_vga_switcheroo(chip)	0335#define needs_eld_notify_link(chip)	false336#endif337 338static const char * const driver_short_names[] = {339	[AZX_DRIVER_ICH] = "HDA Intel",340	[AZX_DRIVER_PCH] = "HDA Intel PCH",341	[AZX_DRIVER_SCH] = "HDA Intel MID",342	[AZX_DRIVER_SKL] = "HDA Intel PCH", /* kept old name for compatibility */343	[AZX_DRIVER_HDMI] = "HDA Intel HDMI",344	[AZX_DRIVER_ATI] = "HDA ATI SB",345	[AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI",346	[AZX_DRIVER_ATIHDMI_NS] = "HDA ATI HDMI",347	[AZX_DRIVER_GFHDMI] = "HDA GF HDMI",348	[AZX_DRIVER_VIA] = "HDA VIA VT82xx",349	[AZX_DRIVER_SIS] = "HDA SIS966",350	[AZX_DRIVER_ULI] = "HDA ULI M5461",351	[AZX_DRIVER_NVIDIA] = "HDA NVidia",352	[AZX_DRIVER_TERA] = "HDA Teradici", 353	[AZX_DRIVER_CTX] = "HDA Creative", 354	[AZX_DRIVER_CTHDA] = "HDA Creative",355	[AZX_DRIVER_CMEDIA] = "HDA C-Media",356	[AZX_DRIVER_ZHAOXIN] = "HDA Zhaoxin",357	[AZX_DRIVER_LOONGSON] = "HDA Loongson",358	[AZX_DRIVER_GENERIC] = "HD-Audio Generic",359};360 361static int azx_acquire_irq(struct azx *chip, int do_disconnect);362static void set_default_power_save(struct azx *chip);363 364/*365 * initialize the PCI registers366 */367/* update bits in a PCI register byte */368static void update_pci_byte(struct pci_dev *pci, unsigned int reg,369			    unsigned char mask, unsigned char val)370{371	unsigned char data;372 373	pci_read_config_byte(pci, reg, &data);374	data &= ~mask;375	data |= (val & mask);376	pci_write_config_byte(pci, reg, data);377}378 379static void azx_init_pci(struct azx *chip)380{381	int snoop_type = azx_get_snoop_type(chip);382 383	/* Clear bits 0-2 of PCI register TCSEL (at offset 0x44)384	 * TCSEL == Traffic Class Select Register, which sets PCI express QOS385	 * Ensuring these bits are 0 clears playback static on some HD Audio386	 * codecs.387	 * The PCI register TCSEL is defined in the Intel manuals.388	 */389	if (!(chip->driver_caps & AZX_DCAPS_NO_TCSEL)) {390		dev_dbg(chip->card->dev, "Clearing TCSEL\n");391		update_pci_byte(chip->pci, AZX_PCIREG_TCSEL, 0x07, 0);392	}393 394	/* For ATI SB450/600/700/800/900 and AMD Hudson azalia HD audio,395	 * we need to enable snoop.396	 */397	if (snoop_type == AZX_SNOOP_TYPE_ATI) {398		dev_dbg(chip->card->dev, "Setting ATI snoop: %d\n",399			azx_snoop(chip));400		update_pci_byte(chip->pci,401				ATI_SB450_HDAUDIO_MISC_CNTR2_ADDR, 0x07,402				azx_snoop(chip) ? ATI_SB450_HDAUDIO_ENABLE_SNOOP : 0);403	}404 405	/* For NVIDIA HDA, enable snoop */406	if (snoop_type == AZX_SNOOP_TYPE_NVIDIA) {407		dev_dbg(chip->card->dev, "Setting Nvidia snoop: %d\n",408			azx_snoop(chip));409		update_pci_byte(chip->pci,410				NVIDIA_HDA_TRANSREG_ADDR,411				0x0f, NVIDIA_HDA_ENABLE_COHBITS);412		update_pci_byte(chip->pci,413				NVIDIA_HDA_ISTRM_COH,414				0x01, NVIDIA_HDA_ENABLE_COHBIT);415		update_pci_byte(chip->pci,416				NVIDIA_HDA_OSTRM_COH,417				0x01, NVIDIA_HDA_ENABLE_COHBIT);418	}419 420	/* Enable SCH/PCH snoop if needed */421	if (snoop_type == AZX_SNOOP_TYPE_SCH) {422		unsigned short snoop;423		pci_read_config_word(chip->pci, INTEL_SCH_HDA_DEVC, &snoop);424		if ((!azx_snoop(chip) && !(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP)) ||425		    (azx_snoop(chip) && (snoop & INTEL_SCH_HDA_DEVC_NOSNOOP))) {426			snoop &= ~INTEL_SCH_HDA_DEVC_NOSNOOP;427			if (!azx_snoop(chip))428				snoop |= INTEL_SCH_HDA_DEVC_NOSNOOP;429			pci_write_config_word(chip->pci, INTEL_SCH_HDA_DEVC, snoop);430			pci_read_config_word(chip->pci,431				INTEL_SCH_HDA_DEVC, &snoop);432		}433		dev_dbg(chip->card->dev, "SCH snoop: %s\n",434			(snoop & INTEL_SCH_HDA_DEVC_NOSNOOP) ?435			"Disabled" : "Enabled");436        }437}438 439/*440 * In BXT-P A0, HD-Audio DMA requests is later than expected,441 * and makes an audio stream sensitive to system latencies when442 * 24/32 bits are playing.443 * Adjusting threshold of DMA fifo to force the DMA request444 * sooner to improve latency tolerance at the expense of power.445 */446static void bxt_reduce_dma_latency(struct azx *chip)447{448	u32 val;449 450	val = azx_readl(chip, VS_EM4L);451	val &= (0x3 << 20);452	azx_writel(chip, VS_EM4L, val);453}454 455/*456 * ML_LCAP bits:457 *  bit 0: 6 MHz Supported458 *  bit 1: 12 MHz Supported459 *  bit 2: 24 MHz Supported460 *  bit 3: 48 MHz Supported461 *  bit 4: 96 MHz Supported462 *  bit 5: 192 MHz Supported463 */464static int intel_get_lctl_scf(struct azx *chip)465{466	struct hdac_bus *bus = azx_bus(chip);467	static const int preferred_bits[] = { 2, 3, 1, 4, 5 };468	u32 val, t;469	int i;470 471	val = readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCAP);472 473	for (i = 0; i < ARRAY_SIZE(preferred_bits); i++) {474		t = preferred_bits[i];475		if (val & (1 << t))476			return t;477	}478 479	dev_warn(chip->card->dev, "set audio clock frequency to 6MHz");480	return 0;481}482 483static int intel_ml_lctl_set_power(struct azx *chip, int state)484{485	struct hdac_bus *bus = azx_bus(chip);486	u32 val;487	int timeout;488 489	/*490	 * Changes to LCTL.SCF are only needed for the first multi-link dealing491	 * with external codecs492	 */493	val = readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL);494	val &= ~AZX_ML_LCTL_SPA;495	val |= state << AZX_ML_LCTL_SPA_SHIFT;496	writel(val, bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL);497	/* wait for CPA */498	timeout = 50;499	while (timeout) {500		if (((readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL)) &501		    AZX_ML_LCTL_CPA) == (state << AZX_ML_LCTL_CPA_SHIFT))502			return 0;503		timeout--;504		udelay(10);505	}506 507	return -1;508}509 510static void intel_init_lctl(struct azx *chip)511{512	struct hdac_bus *bus = azx_bus(chip);513	u32 val;514	int ret;515 516	/* 0. check lctl register value is correct or not */517	val = readl(bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL);518	/* only perform additional configurations if the SCF is initially based on 6MHz */519	if ((val & AZX_ML_LCTL_SCF) != 0)520		return;521 522	/*523	 * Before operating on SPA, CPA must match SPA.524	 * Any deviation may result in undefined behavior.525	 */526	if (((val & AZX_ML_LCTL_SPA) >> AZX_ML_LCTL_SPA_SHIFT) !=527		((val & AZX_ML_LCTL_CPA) >> AZX_ML_LCTL_CPA_SHIFT))528		return;529 530	/* 1. turn link down: set SPA to 0 and wait CPA to 0 */531	ret = intel_ml_lctl_set_power(chip, 0);532	udelay(100);533	if (ret)534		goto set_spa;535 536	/* 2. update SCF to select an audio clock different from 6MHz */537	val &= ~AZX_ML_LCTL_SCF;538	val |= intel_get_lctl_scf(chip);539	writel(val, bus->mlcap + AZX_ML_BASE + AZX_REG_ML_LCTL);540 541set_spa:542	/* 4. turn link up: set SPA to 1 and wait CPA to 1 */543	intel_ml_lctl_set_power(chip, 1);544	udelay(100);545}546 547static void hda_intel_init_chip(struct azx *chip, bool full_reset)548{549	struct hdac_bus *bus = azx_bus(chip);550	struct pci_dev *pci = chip->pci;551	u32 val;552 553	snd_hdac_set_codec_wakeup(bus, true);554	if (chip->driver_type == AZX_DRIVER_SKL) {555		pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);556		val = val & ~INTEL_HDA_CGCTL_MISCBDCGE;557		pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);558	}559	azx_init_chip(chip, full_reset);560	if (chip->driver_type == AZX_DRIVER_SKL) {561		pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val);562		val = val | INTEL_HDA_CGCTL_MISCBDCGE;563		pci_write_config_dword(pci, INTEL_HDA_CGCTL, val);564	}565 566	snd_hdac_set_codec_wakeup(bus, false);567 568	/* reduce dma latency to avoid noise */569	if (HDA_CONTROLLER_IS_APL(pci))570		bxt_reduce_dma_latency(chip);571 572	if (bus->mlcap != NULL)573		intel_init_lctl(chip);574}575 576/* calculate runtime delay from LPIB */577static int azx_get_delay_from_lpib(struct azx *chip, struct azx_dev *azx_dev,578				   unsigned int pos)579{580	struct snd_pcm_substream *substream = azx_dev->core.substream;581	int stream = substream->stream;582	unsigned int lpib_pos = azx_get_pos_lpib(chip, azx_dev);583	int delay;584 585	if (stream == SNDRV_PCM_STREAM_PLAYBACK)586		delay = pos - lpib_pos;587	else588		delay = lpib_pos - pos;589	if (delay < 0) {590		if (delay >= azx_dev->core.delay_negative_threshold)591			delay = 0;592		else593			delay += azx_dev->core.bufsize;594	}595 596	if (delay >= azx_dev->core.period_bytes) {597		dev_info(chip->card->dev,598			 "Unstable LPIB (%d >= %d); disabling LPIB delay counting\n",599			 delay, azx_dev->core.period_bytes);600		delay = 0;601		chip->driver_caps &= ~AZX_DCAPS_COUNT_LPIB_DELAY;602		chip->get_delay[stream] = NULL;603	}604 605	return bytes_to_frames(substream->runtime, delay);606}607 608static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev);609 610/* called from IRQ */611static int azx_position_check(struct azx *chip, struct azx_dev *azx_dev)612{613	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);614	int ok;615 616	ok = azx_position_ok(chip, azx_dev);617	if (ok == 1) {618		azx_dev->irq_pending = 0;619		return ok;620	} else if (ok == 0) {621		/* bogus IRQ, process it later */622		azx_dev->irq_pending = 1;623		schedule_work(&hda->irq_pending_work);624	}625	return 0;626}627 628#define display_power(chip, enable) \629	snd_hdac_display_power(azx_bus(chip), HDA_CODEC_IDX_CONTROLLER, enable)630 631/*632 * Check whether the current DMA position is acceptable for updating633 * periods.  Returns non-zero if it's OK.634 *635 * Many HD-audio controllers appear pretty inaccurate about636 * the update-IRQ timing.  The IRQ is issued before actually the637 * data is processed.  So, we need to process it afterwords in a638 * workqueue.639 *640 * Returns 1 if OK to proceed, 0 for delay handling, -1 for skipping update641 */642static int azx_position_ok(struct azx *chip, struct azx_dev *azx_dev)643{644	struct snd_pcm_substream *substream = azx_dev->core.substream;645	struct snd_pcm_runtime *runtime = substream->runtime;646	int stream = substream->stream;647	u32 wallclk;648	unsigned int pos;649	snd_pcm_uframes_t hwptr, target;650 651	/*652	 * The value of the WALLCLK register is always 0653	 * on the Loongson controller, so we return directly.654	 */655	if (chip->driver_type == AZX_DRIVER_LOONGSON)656		return 1;657 658	wallclk = azx_readl(chip, WALLCLK) - azx_dev->core.start_wallclk;659	if (wallclk < (azx_dev->core.period_wallclk * 2) / 3)660		return -1;	/* bogus (too early) interrupt */661 662	if (chip->get_position[stream])663		pos = chip->get_position[stream](chip, azx_dev);664	else { /* use the position buffer as default */665		pos = azx_get_pos_posbuf(chip, azx_dev);666		if (!pos || pos == (u32)-1) {667			dev_info(chip->card->dev,668				 "Invalid position buffer, using LPIB read method instead.\n");669			chip->get_position[stream] = azx_get_pos_lpib;670			if (chip->get_position[0] == azx_get_pos_lpib &&671			    chip->get_position[1] == azx_get_pos_lpib)672				azx_bus(chip)->use_posbuf = false;673			pos = azx_get_pos_lpib(chip, azx_dev);674			chip->get_delay[stream] = NULL;675		} else {676			chip->get_position[stream] = azx_get_pos_posbuf;677			if (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)678				chip->get_delay[stream] = azx_get_delay_from_lpib;679		}680	}681 682	if (pos >= azx_dev->core.bufsize)683		pos = 0;684 685	if (WARN_ONCE(!azx_dev->core.period_bytes,686		      "hda-intel: zero azx_dev->period_bytes"))687		return -1; /* this shouldn't happen! */688	if (wallclk < (azx_dev->core.period_wallclk * 5) / 4 &&689	    pos % azx_dev->core.period_bytes > azx_dev->core.period_bytes / 2)690		/* NG - it's below the first next period boundary */691		return chip->bdl_pos_adj ? 0 : -1;692	azx_dev->core.start_wallclk += wallclk;693 694	if (azx_dev->core.no_period_wakeup)695		return 1; /* OK, no need to check period boundary */696 697	if (runtime->hw_ptr_base != runtime->hw_ptr_interrupt)698		return 1; /* OK, already in hwptr updating process */699 700	/* check whether the period gets really elapsed */701	pos = bytes_to_frames(runtime, pos);702	hwptr = runtime->hw_ptr_base + pos;703	if (hwptr < runtime->status->hw_ptr)704		hwptr += runtime->buffer_size;705	target = runtime->hw_ptr_interrupt + runtime->period_size;706	if (hwptr < target) {707		/* too early wakeup, process it later */708		return chip->bdl_pos_adj ? 0 : -1;709	}710 711	return 1; /* OK, it's fine */712}713 714/*715 * The work for pending PCM period updates.716 */717static void azx_irq_pending_work(struct work_struct *work)718{719	struct hda_intel *hda = container_of(work, struct hda_intel, irq_pending_work);720	struct azx *chip = &hda->chip;721	struct hdac_bus *bus = azx_bus(chip);722	struct hdac_stream *s;723	int pending, ok;724 725	if (!hda->irq_pending_warned) {726		dev_info(chip->card->dev,727			 "IRQ timing workaround is activated for card #%d. Suggest a bigger bdl_pos_adj.\n",728			 chip->card->number);729		hda->irq_pending_warned = 1;730	}731 732	for (;;) {733		pending = 0;734		spin_lock_irq(&bus->reg_lock);735		list_for_each_entry(s, &bus->stream_list, list) {736			struct azx_dev *azx_dev = stream_to_azx_dev(s);737			if (!azx_dev->irq_pending ||738			    !s->substream ||739			    !s->running)740				continue;741			ok = azx_position_ok(chip, azx_dev);742			if (ok > 0) {743				azx_dev->irq_pending = 0;744				spin_unlock(&bus->reg_lock);745				snd_pcm_period_elapsed(s->substream);746				spin_lock(&bus->reg_lock);747			} else if (ok < 0) {748				pending = 0;	/* too early */749			} else750				pending++;751		}752		spin_unlock_irq(&bus->reg_lock);753		if (!pending)754			return;755		msleep(1);756	}757}758 759/* clear irq_pending flags and assure no on-going workq */760static void azx_clear_irq_pending(struct azx *chip)761{762	struct hdac_bus *bus = azx_bus(chip);763	struct hdac_stream *s;764 765	spin_lock_irq(&bus->reg_lock);766	list_for_each_entry(s, &bus->stream_list, list) {767		struct azx_dev *azx_dev = stream_to_azx_dev(s);768		azx_dev->irq_pending = 0;769	}770	spin_unlock_irq(&bus->reg_lock);771}772 773static int azx_acquire_irq(struct azx *chip, int do_disconnect)774{775	struct hdac_bus *bus = azx_bus(chip);776 777	if (request_irq(chip->pci->irq, azx_interrupt,778			chip->msi ? 0 : IRQF_SHARED,779			chip->card->irq_descr, chip)) {780		dev_err(chip->card->dev,781			"unable to grab IRQ %d, disabling device\n",782			chip->pci->irq);783		if (do_disconnect)784			snd_card_disconnect(chip->card);785		return -1;786	}787	bus->irq = chip->pci->irq;788	chip->card->sync_irq = bus->irq;789	pci_intx(chip->pci, !chip->msi);790	return 0;791}792 793/* get the current DMA position with correction on VIA chips */794static unsigned int azx_via_get_position(struct azx *chip,795					 struct azx_dev *azx_dev)796{797	unsigned int link_pos, mini_pos, bound_pos;798	unsigned int mod_link_pos, mod_dma_pos, mod_mini_pos;799	unsigned int fifo_size;800 801	link_pos = snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev));802	if (azx_dev->core.substream->stream == SNDRV_PCM_STREAM_PLAYBACK) {803		/* Playback, no problem using link position */804		return link_pos;805	}806 807	/* Capture */808	/* For new chipset,809	 * use mod to get the DMA position just like old chipset810	 */811	mod_dma_pos = le32_to_cpu(*azx_dev->core.posbuf);812	mod_dma_pos %= azx_dev->core.period_bytes;813 814	fifo_size = azx_stream(azx_dev)->fifo_size;815 816	if (azx_dev->insufficient) {817		/* Link position never gather than FIFO size */818		if (link_pos <= fifo_size)819			return 0;820 821		azx_dev->insufficient = 0;822	}823 824	if (link_pos <= fifo_size)825		mini_pos = azx_dev->core.bufsize + link_pos - fifo_size;826	else827		mini_pos = link_pos - fifo_size;828 829	/* Find nearest previous boudary */830	mod_mini_pos = mini_pos % azx_dev->core.period_bytes;831	mod_link_pos = link_pos % azx_dev->core.period_bytes;832	if (mod_link_pos >= fifo_size)833		bound_pos = link_pos - mod_link_pos;834	else if (mod_dma_pos >= mod_mini_pos)835		bound_pos = mini_pos - mod_mini_pos;836	else {837		bound_pos = mini_pos - mod_mini_pos + azx_dev->core.period_bytes;838		if (bound_pos >= azx_dev->core.bufsize)839			bound_pos = 0;840	}841 842	/* Calculate real DMA position we want */843	return bound_pos + mod_dma_pos;844}845 846#define AMD_FIFO_SIZE	32847 848/* get the current DMA position with FIFO size correction */849static unsigned int azx_get_pos_fifo(struct azx *chip, struct azx_dev *azx_dev)850{851	struct snd_pcm_substream *substream = azx_dev->core.substream;852	struct snd_pcm_runtime *runtime = substream->runtime;853	unsigned int pos, delay;854 855	pos = snd_hdac_stream_get_pos_lpib(azx_stream(azx_dev));856	if (!runtime)857		return pos;858 859	runtime->delay = AMD_FIFO_SIZE;860	delay = frames_to_bytes(runtime, AMD_FIFO_SIZE);861	if (azx_dev->insufficient) {862		if (pos < delay) {863			delay = pos;864			runtime->delay = bytes_to_frames(runtime, pos);865		} else {866			azx_dev->insufficient = 0;867		}868	}869 870	/* correct the DMA position for capture stream */871	if (substream->stream == SNDRV_PCM_STREAM_CAPTURE) {872		if (pos < delay)873			pos += azx_dev->core.bufsize;874		pos -= delay;875	}876 877	return pos;878}879 880static int azx_get_delay_from_fifo(struct azx *chip, struct azx_dev *azx_dev,881				   unsigned int pos)882{883	struct snd_pcm_substream *substream = azx_dev->core.substream;884 885	/* just read back the calculated value in the above */886	return substream->runtime->delay;887}888 889static void __azx_shutdown_chip(struct azx *chip, bool skip_link_reset)890{891	azx_stop_chip(chip);892	if (!skip_link_reset)893		azx_enter_link_reset(chip);894	azx_clear_irq_pending(chip);895	display_power(chip, false);896}897 898static DEFINE_MUTEX(card_list_lock);899static LIST_HEAD(card_list);900 901static void azx_shutdown_chip(struct azx *chip)902{903	__azx_shutdown_chip(chip, false);904}905 906static void azx_add_card_list(struct azx *chip)907{908	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);909	mutex_lock(&card_list_lock);910	list_add(&hda->list, &card_list);911	mutex_unlock(&card_list_lock);912}913 914static void azx_del_card_list(struct azx *chip)915{916	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);917	mutex_lock(&card_list_lock);918	list_del_init(&hda->list);919	mutex_unlock(&card_list_lock);920}921 922/* trigger power-save check at writing parameter */923static int __maybe_unused param_set_xint(const char *val, const struct kernel_param *kp)924{925	struct hda_intel *hda;926	struct azx *chip;927	int prev = power_save;928	int ret = param_set_int(val, kp);929 930	if (ret || prev == power_save)931		return ret;932 933	if (pm_blacklist > 0)934		return 0;935 936	mutex_lock(&card_list_lock);937	list_for_each_entry(hda, &card_list, list) {938		chip = &hda->chip;939		if (!hda->probe_continued || chip->disabled ||940		    hda->runtime_pm_disabled)941			continue;942		snd_hda_set_power_save(&chip->bus, power_save * 1000);943	}944	mutex_unlock(&card_list_lock);945	return 0;946}947 948/*949 * power management950 */951static bool azx_is_pm_ready(struct snd_card *card)952{953	struct azx *chip;954	struct hda_intel *hda;955 956	if (!card)957		return false;958	chip = card->private_data;959	hda = container_of(chip, struct hda_intel, chip);960	if (chip->disabled || hda->init_failed || !chip->running)961		return false;962	return true;963}964 965static void __azx_runtime_resume(struct azx *chip)966{967	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);968	struct hdac_bus *bus = azx_bus(chip);969	struct hda_codec *codec;970	int status;971 972	display_power(chip, true);973	if (hda->need_i915_power)974		snd_hdac_i915_set_bclk(bus);975 976	/* Read STATESTS before controller reset */977	status = azx_readw(chip, STATESTS);978 979	azx_init_pci(chip);980	hda_intel_init_chip(chip, true);981 982	/* Avoid codec resume if runtime resume is for system suspend */983	if (!chip->pm_prepared) {984		list_for_each_codec(codec, &chip->bus) {985			if (codec->relaxed_resume)986				continue;987 988			if (codec->forced_resume || (status & (1 << codec->addr)))989				pm_request_resume(hda_codec_dev(codec));990		}991	}992 993	/* power down again for link-controlled chips */994	if (!hda->need_i915_power)995		display_power(chip, false);996}997 998static int azx_prepare(struct device *dev)999{1000	struct snd_card *card = dev_get_drvdata(dev);1001	struct azx *chip;1002 1003	if (!azx_is_pm_ready(card))1004		return 0;1005 1006	chip = card->private_data;1007	chip->pm_prepared = 1;1008	snd_power_change_state(card, SNDRV_CTL_POWER_D3hot);1009 1010	flush_work(&azx_bus(chip)->unsol_work);1011 1012	/* HDA controller always requires different WAKEEN for runtime suspend1013	 * and system suspend, so don't use direct-complete here.1014	 */1015	return 0;1016}1017 1018static void azx_complete(struct device *dev)1019{1020	struct snd_card *card = dev_get_drvdata(dev);1021	struct azx *chip;1022 1023	if (!azx_is_pm_ready(card))1024		return;1025 1026	chip = card->private_data;1027	snd_power_change_state(card, SNDRV_CTL_POWER_D0);1028	chip->pm_prepared = 0;1029}1030 1031static int azx_suspend(struct device *dev)1032{1033	struct snd_card *card = dev_get_drvdata(dev);1034	struct azx *chip;1035	struct hdac_bus *bus;1036 1037	if (!azx_is_pm_ready(card))1038		return 0;1039 1040	chip = card->private_data;1041	bus = azx_bus(chip);1042	azx_shutdown_chip(chip);1043	if (bus->irq >= 0) {1044		free_irq(bus->irq, chip);1045		bus->irq = -1;1046		chip->card->sync_irq = -1;1047	}1048 1049	if (chip->msi)1050		pci_disable_msi(chip->pci);1051 1052	trace_azx_suspend(chip);1053	return 0;1054}1055 1056static int __maybe_unused azx_resume(struct device *dev)1057{1058	struct snd_card *card = dev_get_drvdata(dev);1059	struct azx *chip;1060 1061	if (!azx_is_pm_ready(card))1062		return 0;1063 1064	chip = card->private_data;1065	if (chip->msi)1066		if (pci_enable_msi(chip->pci) < 0)1067			chip->msi = 0;1068	if (azx_acquire_irq(chip, 1) < 0)1069		return -EIO;1070 1071	__azx_runtime_resume(chip);1072 1073	trace_azx_resume(chip);1074	return 0;1075}1076 1077/* put codec down to D3 at hibernation for Intel SKL+;1078 * otherwise BIOS may still access the codec and screw up the driver1079 */1080static int azx_freeze_noirq(struct device *dev)1081{1082	struct snd_card *card = dev_get_drvdata(dev);1083	struct azx *chip = card->private_data;1084	struct pci_dev *pci = to_pci_dev(dev);1085 1086	if (!azx_is_pm_ready(card))1087		return 0;1088	if (chip->driver_type == AZX_DRIVER_SKL)1089		pci_set_power_state(pci, PCI_D3hot);1090 1091	return 0;1092}1093 1094static int azx_thaw_noirq(struct device *dev)1095{1096	struct snd_card *card = dev_get_drvdata(dev);1097	struct azx *chip = card->private_data;1098	struct pci_dev *pci = to_pci_dev(dev);1099 1100	if (!azx_is_pm_ready(card))1101		return 0;1102	if (chip->driver_type == AZX_DRIVER_SKL)1103		pci_set_power_state(pci, PCI_D0);1104 1105	return 0;1106}1107 1108static int __maybe_unused azx_runtime_suspend(struct device *dev)1109{1110	struct snd_card *card = dev_get_drvdata(dev);1111	struct azx *chip;1112 1113	if (!azx_is_pm_ready(card))1114		return 0;1115	chip = card->private_data;1116 1117	/* enable controller wake up event */1118	azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) | STATESTS_INT_MASK);1119 1120	azx_shutdown_chip(chip);1121	trace_azx_runtime_suspend(chip);1122	return 0;1123}1124 1125static int __maybe_unused azx_runtime_resume(struct device *dev)1126{1127	struct snd_card *card = dev_get_drvdata(dev);1128	struct azx *chip;1129 1130	if (!azx_is_pm_ready(card))1131		return 0;1132	chip = card->private_data;1133	__azx_runtime_resume(chip);1134 1135	/* disable controller Wake Up event*/1136	azx_writew(chip, WAKEEN, azx_readw(chip, WAKEEN) & ~STATESTS_INT_MASK);1137 1138	trace_azx_runtime_resume(chip);1139	return 0;1140}1141 1142static int __maybe_unused azx_runtime_idle(struct device *dev)1143{1144	struct snd_card *card = dev_get_drvdata(dev);1145	struct azx *chip;1146	struct hda_intel *hda;1147 1148	if (!card)1149		return 0;1150 1151	chip = card->private_data;1152	hda = container_of(chip, struct hda_intel, chip);1153	if (chip->disabled || hda->init_failed)1154		return 0;1155 1156	if (!power_save_controller || !azx_has_pm_runtime(chip) ||1157	    azx_bus(chip)->codec_powered || !chip->running)1158		return -EBUSY;1159 1160	/* ELD notification gets broken when HD-audio bus is off */1161	if (needs_eld_notify_link(chip))1162		return -EBUSY;1163 1164	return 0;1165}1166 1167static const struct dev_pm_ops azx_pm = {1168	SYSTEM_SLEEP_PM_OPS(azx_suspend, azx_resume)1169	.prepare = pm_sleep_ptr(azx_prepare),1170	.complete = pm_sleep_ptr(azx_complete),1171	.freeze_noirq = pm_sleep_ptr(azx_freeze_noirq),1172	.thaw_noirq = pm_sleep_ptr(azx_thaw_noirq),1173	SET_RUNTIME_PM_OPS(azx_runtime_suspend, azx_runtime_resume, azx_runtime_idle)1174};1175 1176 1177static int azx_probe_continue(struct azx *chip);1178 1179#ifdef SUPPORT_VGA_SWITCHEROO1180static struct pci_dev *get_bound_vga(struct pci_dev *pci);1181 1182static void azx_vs_set_state(struct pci_dev *pci,1183			     enum vga_switcheroo_state state)1184{1185	struct snd_card *card = pci_get_drvdata(pci);1186	struct azx *chip = card->private_data;1187	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1188	struct hda_codec *codec;1189	bool disabled;1190 1191	wait_for_completion(&hda->probe_wait);1192	if (hda->init_failed)1193		return;1194 1195	disabled = (state == VGA_SWITCHEROO_OFF);1196	if (chip->disabled == disabled)1197		return;1198 1199	if (!hda->probe_continued) {1200		chip->disabled = disabled;1201		if (!disabled) {1202			dev_info(chip->card->dev,1203				 "Start delayed initialization\n");1204			if (azx_probe_continue(chip) < 0)1205				dev_err(chip->card->dev, "initialization error\n");1206		}1207	} else {1208		dev_info(chip->card->dev, "%s via vga_switcheroo\n",1209			 disabled ? "Disabling" : "Enabling");1210		if (disabled) {1211			list_for_each_codec(codec, &chip->bus) {1212				pm_runtime_suspend(hda_codec_dev(codec));1213				pm_runtime_disable(hda_codec_dev(codec));1214			}1215			pm_runtime_suspend(card->dev);1216			pm_runtime_disable(card->dev);1217			/* when we get suspended by vga_switcheroo we end up in D3cold,1218			 * however we have no ACPI handle, so pci/acpi can't put us there,1219			 * put ourselves there */1220			pci->current_state = PCI_D3cold;1221			chip->disabled = true;1222			if (snd_hda_lock_devices(&chip->bus))1223				dev_warn(chip->card->dev,1224					 "Cannot lock devices!\n");1225		} else {1226			snd_hda_unlock_devices(&chip->bus);1227			chip->disabled = false;1228			pm_runtime_enable(card->dev);1229			list_for_each_codec(codec, &chip->bus) {1230				pm_runtime_enable(hda_codec_dev(codec));1231				pm_runtime_resume(hda_codec_dev(codec));1232			}1233		}1234	}1235}1236 1237static bool azx_vs_can_switch(struct pci_dev *pci)1238{1239	struct snd_card *card = pci_get_drvdata(pci);1240	struct azx *chip = card->private_data;1241	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1242 1243	wait_for_completion(&hda->probe_wait);1244	if (hda->init_failed)1245		return false;1246	if (chip->disabled || !hda->probe_continued)1247		return true;1248	if (snd_hda_lock_devices(&chip->bus))1249		return false;1250	snd_hda_unlock_devices(&chip->bus);1251	return true;1252}1253 1254/*1255 * The discrete GPU cannot power down unless the HDA controller runtime1256 * suspends, so activate runtime PM on codecs even if power_save == 0.1257 */1258static void setup_vga_switcheroo_runtime_pm(struct azx *chip)1259{1260	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1261	struct hda_codec *codec;1262 1263	if (hda->use_vga_switcheroo && !needs_eld_notify_link(chip)) {1264		list_for_each_codec(codec, &chip->bus)1265			codec->auto_runtime_pm = 1;1266		/* reset the power save setup */1267		if (chip->running)1268			set_default_power_save(chip);1269	}1270}1271 1272static void azx_vs_gpu_bound(struct pci_dev *pci,1273			     enum vga_switcheroo_client_id client_id)1274{1275	struct snd_card *card = pci_get_drvdata(pci);1276	struct azx *chip = card->private_data;1277 1278	if (client_id == VGA_SWITCHEROO_DIS)1279		chip->bus.keep_power = 0;1280	setup_vga_switcheroo_runtime_pm(chip);1281}1282 1283static void init_vga_switcheroo(struct azx *chip)1284{1285	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1286	struct pci_dev *p = get_bound_vga(chip->pci);1287	struct pci_dev *parent;1288	if (p) {1289		dev_info(chip->card->dev,1290			 "Handle vga_switcheroo audio client\n");1291		hda->use_vga_switcheroo = 1;1292 1293		/* cleared in either gpu_bound op or codec probe, or when its1294		 * upstream port has _PR3 (i.e. dGPU).1295		 */1296		parent = pci_upstream_bridge(p);1297		chip->bus.keep_power = parent ? !pci_pr3_present(parent) : 1;1298		chip->driver_caps |= AZX_DCAPS_PM_RUNTIME;1299		pci_dev_put(p);1300	}1301}1302 1303static const struct vga_switcheroo_client_ops azx_vs_ops = {1304	.set_gpu_state = azx_vs_set_state,1305	.can_switch = azx_vs_can_switch,1306	.gpu_bound = azx_vs_gpu_bound,1307};1308 1309static int register_vga_switcheroo(struct azx *chip)1310{1311	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1312	struct pci_dev *p;1313	int err;1314 1315	if (!hda->use_vga_switcheroo)1316		return 0;1317 1318	p = get_bound_vga(chip->pci);1319	err = vga_switcheroo_register_audio_client(chip->pci, &azx_vs_ops, p);1320	pci_dev_put(p);1321 1322	if (err < 0)1323		return err;1324	hda->vga_switcheroo_registered = 1;1325 1326	return 0;1327}1328#else1329#define init_vga_switcheroo(chip)		/* NOP */1330#define register_vga_switcheroo(chip)		01331#define check_hdmi_disabled(pci)	false1332#define setup_vga_switcheroo_runtime_pm(chip)	/* NOP */1333#endif /* SUPPORT_VGA_SWITCHER */1334 1335/*1336 * destructor1337 */1338static void azx_free(struct azx *chip)1339{1340	struct pci_dev *pci = chip->pci;1341	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);1342	struct hdac_bus *bus = azx_bus(chip);1343 1344	if (hda->freed)1345		return;1346 1347	if (azx_has_pm_runtime(chip) && chip->running) {1348		pm_runtime_get_noresume(&pci->dev);1349		pm_runtime_forbid(&pci->dev);1350		pm_runtime_dont_use_autosuspend(&pci->dev);1351	}1352 1353	chip->running = 0;1354 1355	azx_del_card_list(chip);1356 1357	hda->init_failed = 1; /* to be sure */1358	complete_all(&hda->probe_wait);1359 1360	if (use_vga_switcheroo(hda)) {1361		if (chip->disabled && hda->probe_continued)1362			snd_hda_unlock_devices(&chip->bus);1363		if (hda->vga_switcheroo_registered)1364			vga_switcheroo_unregister_client(chip->pci);1365	}1366 1367	if (bus->chip_init) {1368		azx_clear_irq_pending(chip);1369		azx_stop_all_streams(chip);1370		azx_stop_chip(chip);1371	}1372 1373	if (bus->irq >= 0)1374		free_irq(bus->irq, (void*)chip);1375 1376	azx_free_stream_pages(chip);1377	azx_free_streams(chip);1378	snd_hdac_bus_exit(bus);1379 1380#ifdef CONFIG_SND_HDA_PATCH_LOADER1381	release_firmware(chip->fw);1382#endif1383	display_power(chip, false);1384 1385	if (chip->driver_caps & AZX_DCAPS_I915_COMPONENT)1386		snd_hdac_i915_exit(bus);1387 1388	hda->freed = 1;1389}1390 1391static int azx_dev_disconnect(struct snd_device *device)1392{1393	struct azx *chip = device->device_data;1394	struct hdac_bus *bus = azx_bus(chip);1395 1396	chip->bus.shutdown = 1;1397	cancel_work_sync(&bus->unsol_work);1398 1399	return 0;1400}1401 1402static int azx_dev_free(struct snd_device *device)1403{1404	azx_free(device->device_data);1405	return 0;1406}1407 1408#ifdef SUPPORT_VGA_SWITCHEROO1409#ifdef CONFIG_ACPI1410/* ATPX is in the integrated GPU's namespace */1411static bool atpx_present(void)1412{1413	struct pci_dev *pdev = NULL;1414	acpi_handle dhandle, atpx_handle;1415	acpi_status status;1416 1417	while ((pdev = pci_get_base_class(PCI_BASE_CLASS_DISPLAY, pdev))) {1418		if ((pdev->class != PCI_CLASS_DISPLAY_VGA << 8) &&1419		    (pdev->class != PCI_CLASS_DISPLAY_OTHER << 8))1420			continue;1421 1422		dhandle = ACPI_HANDLE(&pdev->dev);1423		if (dhandle) {1424			status = acpi_get_handle(dhandle, "ATPX", &atpx_handle);1425			if (ACPI_SUCCESS(status)) {1426				pci_dev_put(pdev);1427				return true;1428			}1429		}1430	}1431	return false;1432}1433#else1434static bool atpx_present(void)1435{1436	return false;1437}1438#endif1439 1440/*1441 * Check of disabled HDMI controller by vga_switcheroo1442 */1443static struct pci_dev *get_bound_vga(struct pci_dev *pci)1444{1445	struct pci_dev *p;1446 1447	/* check only discrete GPU */1448	switch (pci->vendor) {1449	case PCI_VENDOR_ID_ATI:1450	case PCI_VENDOR_ID_AMD:1451		if (pci->devfn == 1) {1452			p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),1453							pci->bus->number, 0);1454			if (p) {1455				/* ATPX is in the integrated GPU's ACPI namespace1456				 * rather than the dGPU's namespace. However,1457				 * the dGPU is the one who is involved in1458				 * vgaswitcheroo.1459				 */1460				if (((p->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&1461				    (atpx_present() || apple_gmux_detect(NULL, NULL)))1462					return p;1463				pci_dev_put(p);1464			}1465		}1466		break;1467	case PCI_VENDOR_ID_NVIDIA:1468		if (pci->devfn == 1) {1469			p = pci_get_domain_bus_and_slot(pci_domain_nr(pci->bus),1470							pci->bus->number, 0);1471			if (p) {1472				if ((p->class >> 16) == PCI_BASE_CLASS_DISPLAY)1473					return p;1474				pci_dev_put(p);1475			}1476		}1477		break;1478	}1479	return NULL;1480}1481 1482static bool check_hdmi_disabled(struct pci_dev *pci)1483{1484	bool vga_inactive = false;1485	struct pci_dev *p = get_bound_vga(pci);1486 1487	if (p) {1488		if (vga_switcheroo_get_client_state(p) == VGA_SWITCHEROO_OFF)1489			vga_inactive = true;1490		pci_dev_put(p);1491	}1492	return vga_inactive;1493}1494#endif /* SUPPORT_VGA_SWITCHEROO */1495 1496/*1497 * allow/deny-listing for position_fix1498 */1499static const struct snd_pci_quirk position_fix_list[] = {1500	SND_PCI_QUIRK(0x1028, 0x01cc, "Dell D820", POS_FIX_LPIB),1501	SND_PCI_QUIRK(0x1028, 0x01de, "Dell Precision 390", POS_FIX_LPIB),1502	SND_PCI_QUIRK(0x103c, 0x306d, "HP dv3", POS_FIX_LPIB),1503	SND_PCI_QUIRK(0x1043, 0x813d, "ASUS P5AD2", POS_FIX_LPIB),1504	SND_PCI_QUIRK(0x1043, 0x81b3, "ASUS", POS_FIX_LPIB),1505	SND_PCI_QUIRK(0x1043, 0x81e7, "ASUS M2V", POS_FIX_LPIB),1506	SND_PCI_QUIRK(0x104d, 0x9069, "Sony VPCS11V9E", POS_FIX_LPIB),1507	SND_PCI_QUIRK(0x10de, 0xcb89, "Macbook Pro 7,1", POS_FIX_LPIB),1508	SND_PCI_QUIRK(0x1297, 0x3166, "Shuttle", POS_FIX_LPIB),1509	SND_PCI_QUIRK(0x1458, 0xa022, "ga-ma770-ud3", POS_FIX_LPIB),1510	SND_PCI_QUIRK(0x1462, 0x1002, "MSI Wind U115", POS_FIX_LPIB),1511	SND_PCI_QUIRK(0x1565, 0x8218, "Biostar Microtech", POS_FIX_LPIB),1512	SND_PCI_QUIRK(0x1849, 0x0888, "775Dual-VSTA", POS_FIX_LPIB),1513	SND_PCI_QUIRK(0x8086, 0x2503, "DG965OT AAD63733-203", POS_FIX_LPIB),1514	{}1515};1516 1517static int check_position_fix(struct azx *chip, int fix)1518{1519	const struct snd_pci_quirk *q;1520 1521	switch (fix) {1522	case POS_FIX_AUTO:1523	case POS_FIX_LPIB:1524	case POS_FIX_POSBUF:1525	case POS_FIX_VIACOMBO:1526	case POS_FIX_COMBO:1527	case POS_FIX_SKL:1528	case POS_FIX_FIFO:1529		return fix;1530	}1531 1532	q = snd_pci_quirk_lookup(chip->pci, position_fix_list);1533	if (q) {1534		dev_info(chip->card->dev,1535			 "position_fix set to %d for device %04x:%04x\n",1536			 q->value, q->subvendor, q->subdevice);1537		return q->value;1538	}1539 1540	/* Check VIA/ATI HD Audio Controller exist */1541	if (chip->driver_type == AZX_DRIVER_VIA) {1542		dev_dbg(chip->card->dev, "Using VIACOMBO position fix\n");1543		return POS_FIX_VIACOMBO;1544	}1545	if (chip->driver_caps & AZX_DCAPS_AMD_WORKAROUND) {1546		dev_dbg(chip->card->dev, "Using FIFO position fix\n");1547		return POS_FIX_FIFO;1548	}1549	if (chip->driver_caps & AZX_DCAPS_POSFIX_LPIB) {1550		dev_dbg(chip->card->dev, "Using LPIB position fix\n");1551		return POS_FIX_LPIB;1552	}1553	if (chip->driver_type == AZX_DRIVER_SKL) {1554		dev_dbg(chip->card->dev, "Using SKL position fix\n");1555		return POS_FIX_SKL;1556	}1557	return POS_FIX_AUTO;1558}1559 1560static void assign_position_fix(struct azx *chip, int fix)1561{1562	static const azx_get_pos_callback_t callbacks[] = {1563		[POS_FIX_AUTO] = NULL,1564		[POS_FIX_LPIB] = azx_get_pos_lpib,1565		[POS_FIX_POSBUF] = azx_get_pos_posbuf,1566		[POS_FIX_VIACOMBO] = azx_via_get_position,1567		[POS_FIX_COMBO] = azx_get_pos_lpib,1568		[POS_FIX_SKL] = azx_get_pos_posbuf,1569		[POS_FIX_FIFO] = azx_get_pos_fifo,1570	};1571 1572	chip->get_position[0] = chip->get_position[1] = callbacks[fix];1573 1574	/* combo mode uses LPIB only for playback */1575	if (fix == POS_FIX_COMBO)1576		chip->get_position[1] = NULL;1577 1578	if ((fix == POS_FIX_POSBUF || fix == POS_FIX_SKL) &&1579	    (chip->driver_caps & AZX_DCAPS_COUNT_LPIB_DELAY)) {1580		chip->get_delay[0] = chip->get_delay[1] =1581			azx_get_delay_from_lpib;1582	}1583 1584	if (fix == POS_FIX_FIFO)1585		chip->get_delay[0] = chip->get_delay[1] =1586			azx_get_delay_from_fifo;1587}1588 1589/*1590 * deny-lists for probe_mask1591 */1592static const struct snd_pci_quirk probe_mask_list[] = {1593	/* Thinkpad often breaks the controller communication when accessing1594	 * to the non-working (or non-existing) modem codec slot.1595	 */1596	SND_PCI_QUIRK(0x1014, 0x05b7, "Thinkpad Z60", 0x01),1597	SND_PCI_QUIRK(0x17aa, 0x2010, "Thinkpad X/T/R60", 0x01),1598	SND_PCI_QUIRK(0x17aa, 0x20ac, "Thinkpad X/T/R61", 0x01),1599	/* broken BIOS */1600	SND_PCI_QUIRK(0x1028, 0x20ac, "Dell Studio Desktop", 0x01),1601	/* including bogus ALC268 in slot#2 that conflicts with ALC888 */1602	SND_PCI_QUIRK(0x17c0, 0x4085, "Medion MD96630", 0x01),1603	/* forced codec slots */1604	SND_PCI_QUIRK(0x1043, 0x1262, "ASUS W5Fm", 0x103),1605	SND_PCI_QUIRK(0x1046, 0x1262, "ASUS W5F", 0x103),1606	SND_PCI_QUIRK(0x1558, 0x0351, "Schenker Dock 15", 0x105),1607	/* WinFast VP200 H (Teradici) user reported broken communication */1608	SND_PCI_QUIRK(0x3a21, 0x040d, "WinFast VP200 H", 0x101),1609	{}1610};1611 1612#define AZX_FORCE_CODEC_MASK	0x1001613 1614static void check_probe_mask(struct azx *chip, int dev)1615{1616	const struct snd_pci_quirk *q;1617 1618	chip->codec_probe_mask = probe_mask[dev];1619	if (chip->codec_probe_mask == -1) {1620		q = snd_pci_quirk_lookup(chip->pci, probe_mask_list);1621		if (q) {1622			dev_info(chip->card->dev,1623				 "probe_mask set to 0x%x for device %04x:%04x\n",1624				 q->value, q->subvendor, q->subdevice);1625			chip->codec_probe_mask = q->value;1626		}1627	}1628 1629	/* check forced option */1630	if (chip->codec_probe_mask != -1 &&1631	    (chip->codec_probe_mask & AZX_FORCE_CODEC_MASK)) {1632		azx_bus(chip)->codec_mask = chip->codec_probe_mask & 0xff;1633		dev_info(chip->card->dev, "codec_mask forced to 0x%x\n",1634			 (int)azx_bus(chip)->codec_mask);1635	}1636}1637 1638/*1639 * allow/deny-list for enable_msi1640 */1641static const struct snd_pci_quirk msi_deny_list[] = {1642	SND_PCI_QUIRK(0x103c, 0x2191, "HP", 0), /* AMD Hudson */1643	SND_PCI_QUIRK(0x103c, 0x2192, "HP", 0), /* AMD Hudson */1644	SND_PCI_QUIRK(0x103c, 0x21f7, "HP", 0), /* AMD Hudson */1645	SND_PCI_QUIRK(0x103c, 0x21fa, "HP", 0), /* AMD Hudson */1646	SND_PCI_QUIRK(0x1043, 0x81f2, "ASUS", 0), /* Athlon64 X2 + nvidia */1647	SND_PCI_QUIRK(0x1043, 0x81f6, "ASUS", 0), /* nvidia */1648	SND_PCI_QUIRK(0x1043, 0x822d, "ASUS", 0), /* Athlon64 X2 + nvidia MCP55 */1649	SND_PCI_QUIRK(0x1179, 0xfb44, "Toshiba Satellite C870", 0), /* AMD Hudson */1650	SND_PCI_QUIRK(0x1849, 0x0888, "ASRock", 0), /* Athlon64 X2 + nvidia */1651	SND_PCI_QUIRK(0xa0a0, 0x0575, "Aopen MZ915-M", 0), /* ICH6 */1652	{}1653};1654 1655static void check_msi(struct azx *chip)1656{1657	const struct snd_pci_quirk *q;1658 1659	if (enable_msi >= 0) {1660		chip->msi = !!enable_msi;1661		return;1662	}1663	chip->msi = 1;	/* enable MSI as default */1664	q = snd_pci_quirk_lookup(chip->pci, msi_deny_list);1665	if (q) {1666		dev_info(chip->card->dev,1667			 "msi for device %04x:%04x set to %d\n",1668			 q->subvendor, q->subdevice, q->value);1669		chip->msi = q->value;1670		return;1671	}1672 1673	/* NVidia chipsets seem to cause troubles with MSI */1674	if (chip->driver_caps & AZX_DCAPS_NO_MSI) {1675		dev_info(chip->card->dev, "Disabling MSI\n");1676		chip->msi = 0;1677	}1678}1679 1680/* check the snoop mode availability */1681static void azx_check_snoop_available(struct azx *chip)1682{1683	int snoop = hda_snoop;1684 1685	if (snoop >= 0) {1686		dev_info(chip->card->dev, "Force to %s mode by module option\n",1687			 snoop ? "snoop" : "non-snoop");1688		chip->snoop = snoop;1689		chip->uc_buffer = !snoop;1690		return;1691	}1692 1693	snoop = true;1694	if (azx_get_snoop_type(chip) == AZX_SNOOP_TYPE_NONE &&1695	    chip->driver_type == AZX_DRIVER_VIA) {1696		/* force to non-snoop mode for a new VIA controller1697		 * when BIOS is set1698		 */1699		u8 val;1700		pci_read_config_byte(chip->pci, 0x42, &val);1701		if (!(val & 0x80) && (chip->pci->revision == 0x30 ||1702				      chip->pci->revision == 0x20))1703			snoop = false;1704	}1705 1706	if (chip->driver_caps & AZX_DCAPS_SNOOP_OFF)1707		snoop = false;1708 1709	chip->snoop = snoop;1710	if (!snoop) {1711		dev_info(chip->card->dev, "Force to non-snoop mode\n");1712		/* C-Media requires non-cached pages only for CORB/RIRB */1713		if (chip->driver_type != AZX_DRIVER_CMEDIA)1714			chip->uc_buffer = true;1715	}1716}1717 1718static void azx_probe_work(struct work_struct *work)1719{1720	struct hda_intel *hda = container_of(work, struct hda_intel, probe_work.work);1721	azx_probe_continue(&hda->chip);1722}1723 1724static int default_bdl_pos_adj(struct azx *chip)1725{1726	/* some exceptions: Atoms seem problematic with value 1 */1727	if (chip->pci->vendor == PCI_VENDOR_ID_INTEL) {1728		switch (chip->pci->device) {1729		case PCI_DEVICE_ID_INTEL_HDA_BYT:1730		case PCI_DEVICE_ID_INTEL_HDA_BSW:1731			return 32;1732		case PCI_DEVICE_ID_INTEL_HDA_APL:1733			return 64;1734		}1735	}1736 1737	switch (chip->driver_type) {1738	/*1739	 * increase the bdl size for Glenfly Gpus for hardware1740	 * limitation on hdac interrupt interval1741	 */1742	case AZX_DRIVER_GFHDMI:1743		return 128;1744	case AZX_DRIVER_ICH:1745	case AZX_DRIVER_PCH:1746		return 1;1747	default:1748		return 32;1749	}1750}1751 1752/*1753 * constructor1754 */1755static const struct hda_controller_ops pci_hda_ops;1756 1757static int azx_create(struct snd_card *card, struct pci_dev *pci,1758		      int dev, unsigned int driver_caps,1759		      struct azx **rchip)1760{1761	static const struct snd_device_ops ops = {1762		.dev_disconnect = azx_dev_disconnect,1763		.dev_free = azx_dev_free,1764	};1765	struct hda_intel *hda;1766	struct azx *chip;1767	int err;1768 1769	*rchip = NULL;1770 1771	err = pcim_enable_device(pci);1772	if (err < 0)1773		return err;1774 1775	hda = devm_kzalloc(&pci->dev, sizeof(*hda), GFP_KERNEL);1776	if (!hda)1777		return -ENOMEM;1778 1779	chip = &hda->chip;1780	mutex_init(&chip->open_mutex);1781	chip->card = card;1782	chip->pci = pci;1783	chip->ops = &pci_hda_ops;1784	chip->driver_caps = driver_caps;1785	chip->driver_type = driver_caps & 0xff;1786	check_msi(chip);1787	chip->dev_index = dev;1788	if (jackpoll_ms[dev] >= 50 && jackpoll_ms[dev] <= 60000)1789		chip->jackpoll_interval = msecs_to_jiffies(jackpoll_ms[dev]);1790	INIT_LIST_HEAD(&chip->pcm_list);1791	INIT_WORK(&hda->irq_pending_work, azx_irq_pending_work);1792	INIT_LIST_HEAD(&hda->list);1793	init_vga_switcheroo(chip);1794	init_completion(&hda->probe_wait);1795 1796	assign_position_fix(chip, check_position_fix(chip, position_fix[dev]));1797 1798	if (single_cmd < 0) /* allow fallback to single_cmd at errors */1799		chip->fallback_to_single_cmd = 1;1800	else /* explicitly set to single_cmd or not */1801		chip->single_cmd = single_cmd;1802 1803	azx_check_snoop_available(chip);1804 1805	if (bdl_pos_adj[dev] < 0)1806		chip->bdl_pos_adj = default_bdl_pos_adj(chip);1807	else1808		chip->bdl_pos_adj = bdl_pos_adj[dev];1809 1810	err = azx_bus_init(chip, model[dev]);1811	if (err < 0)1812		return err;1813 1814	/* use the non-cached pages in non-snoop mode */1815	if (!azx_snoop(chip))1816		azx_bus(chip)->dma_type = SNDRV_DMA_TYPE_DEV_WC;1817 1818	if (chip->driver_type == AZX_DRIVER_NVIDIA) {1819		dev_dbg(chip->card->dev, "Enable delay in RIRB handling\n");1820		chip->bus.core.needs_damn_long_delay = 1;1821	}1822 1823	check_probe_mask(chip, dev);1824 1825	err = snd_device_new(card, SNDRV_DEV_LOWLEVEL, chip, &ops);1826	if (err < 0) {1827		dev_err(card->dev, "Error creating device [card]!\n");1828		azx_free(chip);1829		return err;1830	}1831 1832	/* continue probing in work context as may trigger request module */1833	INIT_DELAYED_WORK(&hda->probe_work, azx_probe_work);1834 1835	*rchip = chip;1836 1837	return 0;1838}1839 1840static int azx_first_init(struct azx *chip)1841{1842	int dev = chip->dev_index;1843	struct pci_dev *pci = chip->pci;1844	struct snd_card *card = chip->card;1845	struct hdac_bus *bus = azx_bus(chip);1846	int err;1847	unsigned short gcap;1848	unsigned int dma_bits = 64;1849 1850#if BITS_PER_LONG != 641851	/* Fix up base address on ULI M5461 */1852	if (chip->driver_type == AZX_DRIVER_ULI) {1853		u16 tmp3;1854		pci_read_config_word(pci, 0x40, &tmp3);1855		pci_write_config_word(pci, 0x40, tmp3 | 0x10);1856		pci_write_config_dword(pci, PCI_BASE_ADDRESS_1, 0);1857	}1858#endif1859	/*1860	 * Fix response write request not synced to memory when handle1861	 * hdac interrupt on Glenfly Gpus1862	 */1863	if (chip->driver_type == AZX_DRIVER_GFHDMI)1864		bus->polling_mode = 1;1865 1866	if (chip->driver_type == AZX_DRIVER_LOONGSON) {1867		bus->polling_mode = 1;1868		bus->not_use_interrupts = 1;1869		bus->access_sdnctl_in_dword = 1;1870	}1871 1872	err = pcim_iomap_regions(pci, 1 << 0, "ICH HD audio");1873	if (err < 0)1874		return err;1875 1876	bus->addr = pci_resource_start(pci, 0);1877	bus->remap_addr = pcim_iomap_table(pci)[0];1878 1879	if (chip->driver_type == AZX_DRIVER_SKL)1880		snd_hdac_bus_parse_capabilities(bus);1881 1882	/*1883	 * Some Intel CPUs has always running timer (ART) feature and1884	 * controller may have Global time sync reporting capability, so1885	 * check both of these before declaring synchronized time reporting1886	 * capability SNDRV_PCM_INFO_HAS_LINK_SYNCHRONIZED_ATIME1887	 */1888	chip->gts_present = false;1889 1890#ifdef CONFIG_X861891	if (bus->ppcap && boot_cpu_has(X86_FEATURE_ART))1892		chip->gts_present = true;1893#endif1894 1895	if (chip->msi) {1896		if (chip->driver_caps & AZX_DCAPS_NO_MSI64) {1897			dev_dbg(card->dev, "Disabling 64bit MSI\n");1898			pci->no_64bit_msi = true;1899		}1900		if (pci_enable_msi(pci) < 0)1901			chip->msi = 0;1902	}1903 1904	pci_set_master(pci);1905 1906	gcap = azx_readw(chip, GCAP);1907	dev_dbg(card->dev, "chipset global capabilities = 0x%x\n", gcap);1908 1909	/* AMD devices support 40 or 48bit DMA, take the safe one */1910	if (chip->pci->vendor == PCI_VENDOR_ID_AMD)1911		dma_bits = 40;1912 1913	/* disable SB600 64bit support for safety */1914	if (chip->pci->vendor == PCI_VENDOR_ID_ATI) {1915		struct pci_dev *p_smbus;1916		dma_bits = 40;1917		p_smbus = pci_get_device(PCI_VENDOR_ID_ATI,1918					 PCI_DEVICE_ID_ATI_SBX00_SMBUS,1919					 NULL);1920		if (p_smbus) {1921			if (p_smbus->revision < 0x30)1922				gcap &= ~AZX_GCAP_64OK;1923			pci_dev_put(p_smbus);1924		}1925	}1926 1927	/* NVidia hardware normally only supports up to 40 bits of DMA */1928	if (chip->pci->vendor == PCI_VENDOR_ID_NVIDIA)1929		dma_bits = 40;1930 1931	/* disable 64bit DMA address on some devices */1932	if (chip->driver_caps & AZX_DCAPS_NO_64BIT) {1933		dev_dbg(card->dev, "Disabling 64bit DMA\n");1934		gcap &= ~AZX_GCAP_64OK;1935	}1936 1937	/* disable buffer size rounding to 128-byte multiples if supported */1938	if (align_buffer_size >= 0)1939		chip->align_buffer_size = !!align_buffer_size;1940	else {1941		if (chip->driver_caps & AZX_DCAPS_NO_ALIGN_BUFSIZE)1942			chip->align_buffer_size = 0;1943		else1944			chip->align_buffer_size = 1;1945	}1946 1947	/* allow 64bit DMA address if supported by H/W */1948	if (!(gcap & AZX_GCAP_64OK))1949		dma_bits = 32;1950	if (dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(dma_bits)))1951		dma_set_mask_and_coherent(&pci->dev, DMA_BIT_MASK(32));1952	dma_set_max_seg_size(&pci->dev, UINT_MAX);1953 1954	/* read number of streams from GCAP register instead of using1955	 * hardcoded value1956	 */1957	chip->capture_streams = (gcap >> 8) & 0x0f;1958	chip->playback_streams = (gcap >> 12) & 0x0f;1959	if (!chip->playback_streams && !chip->capture_streams) {1960		/* gcap didn't give any info, switching to old method */1961 1962		switch (chip->driver_type) {1963		case AZX_DRIVER_ULI:1964			chip->playback_streams = ULI_NUM_PLAYBACK;1965			chip->capture_streams = ULI_NUM_CAPTURE;1966			break;1967		case AZX_DRIVER_ATIHDMI:1968		case AZX_DRIVER_ATIHDMI_NS:1969			chip->playback_streams = ATIHDMI_NUM_PLAYBACK;1970			chip->capture_streams = ATIHDMI_NUM_CAPTURE;1971			break;1972		case AZX_DRIVER_GFHDMI:1973		case AZX_DRIVER_GENERIC:1974		default:1975			chip->playback_streams = ICH6_NUM_PLAYBACK;1976			chip->capture_streams = ICH6_NUM_CAPTURE;1977			break;1978		}1979	}1980	chip->capture_index_offset = 0;1981	chip->playback_index_offset = chip->capture_streams;1982	chip->num_streams = chip->playback_streams + chip->capture_streams;1983 1984	/* sanity check for the SDxCTL.STRM field overflow */1985	if (chip->num_streams > 15 &&1986	    (chip->driver_caps & AZX_DCAPS_SEPARATE_STREAM_TAG) == 0) {1987		dev_warn(chip->card->dev, "number of I/O streams is %d, "1988			 "forcing separate stream tags", chip->num_streams);1989		chip->driver_caps |= AZX_DCAPS_SEPARATE_STREAM_TAG;1990	}1991 1992	/* initialize streams */1993	err = azx_init_streams(chip);1994	if (err < 0)1995		return err;1996 1997	err = azx_alloc_stream_pages(chip);1998	if (err < 0)1999		return err;2000 2001	/* initialize chip */2002	azx_init_pci(chip);2003 2004	snd_hdac_i915_set_bclk(bus);2005 2006	hda_intel_init_chip(chip, (probe_only[dev] & 2) == 0);2007 2008	/* codec detection */2009	if (!azx_bus(chip)->codec_mask) {2010		dev_err(card->dev, "no codecs found!\n");2011		/* keep running the rest for the runtime PM */2012	}2013 2014	if (azx_acquire_irq(chip, 0) < 0)2015		return -EBUSY;2016 2017	strcpy(card->driver, "HDA-Intel");2018	strscpy(card->shortname, driver_short_names[chip->driver_type],2019		sizeof(card->shortname));2020	snprintf(card->longname, sizeof(card->longname),2021		 "%s at 0x%lx irq %i",2022		 card->shortname, bus->addr, bus->irq);2023 2024	return 0;2025}2026 2027#ifdef CONFIG_SND_HDA_PATCH_LOADER2028/* callback from request_firmware_nowait() */2029static void azx_firmware_cb(const struct firmware *fw, void *context)2030{2031	struct snd_card *card = context;2032	struct azx *chip = card->private_data;2033 2034	if (fw)2035		chip->fw = fw;2036	else2037		dev_err(card->dev, "Cannot load firmware, continue without patching\n");2038	if (!chip->disabled) {2039		/* continue probing */2040		azx_probe_continue(chip);2041	}2042}2043#endif2044 2045static int disable_msi_reset_irq(struct azx *chip)2046{2047	struct hdac_bus *bus = azx_bus(chip);2048	int err;2049 2050	free_irq(bus->irq, chip);2051	bus->irq = -1;2052	chip->card->sync_irq = -1;2053	pci_disable_msi(chip->pci);2054	chip->msi = 0;2055	err = azx_acquire_irq(chip, 1);2056	if (err < 0)2057		return err;2058 2059	return 0;2060}2061 2062/* Denylist for skipping the whole probe:2063 * some HD-audio PCI entries are exposed without any codecs, and such devices2064 * should be ignored from the beginning.2065 */2066static const struct pci_device_id driver_denylist[] = {2067	{ PCI_DEVICE_SUB(0x1022, 0x1487, 0x1043, 0x874f) }, /* ASUS ROG Zenith II / Strix */2068	{ PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb59) }, /* MSI TRX40 Creator */2069	{ PCI_DEVICE_SUB(0x1022, 0x1487, 0x1462, 0xcb60) }, /* MSI TRX40 */2070	{ PCI_DEVICE_SUB(0x1022, 0x15e3, 0x1022, 0xd601) }, /* ASRock X670E Taichi */2071	{}2072};2073 2074static const struct hda_controller_ops pci_hda_ops = {2075	.disable_msi_reset_irq = disable_msi_reset_irq,2076	.position_check = azx_position_check,2077};2078 2079static DECLARE_BITMAP(probed_devs, SNDRV_CARDS);2080 2081static int azx_probe(struct pci_dev *pci,2082		     const struct pci_device_id *pci_id)2083{2084	struct snd_card *card;2085	struct hda_intel *hda;2086	struct azx *chip;2087	bool schedule_probe;2088	int dev;2089	int err;2090 2091	if (pci_match_id(driver_denylist, pci)) {2092		dev_info(&pci->dev, "Skipping the device on the denylist\n");2093		return -ENODEV;2094	}2095 2096	dev = find_first_zero_bit(probed_devs, SNDRV_CARDS);2097	if (dev >= SNDRV_CARDS)2098		return -ENODEV;2099	if (!enable[dev]) {2100		set_bit(dev, probed_devs);2101		return -ENOENT;2102	}2103 2104	/*2105	 * stop probe if another Intel's DSP driver should be activated2106	 */2107	if (dmic_detect) {2108		err = snd_intel_dsp_driver_probe(pci);2109		if (err != SND_INTEL_DSP_DRIVER_ANY && err != SND_INTEL_DSP_DRIVER_LEGACY) {2110			dev_dbg(&pci->dev, "HDAudio driver not selected, aborting probe\n");2111			return -ENODEV;2112		}2113	} else {2114		dev_warn(&pci->dev, "dmic_detect option is deprecated, pass snd-intel-dspcfg.dsp_driver=1 option instead\n");2115	}2116 2117	err = snd_card_new(&pci->dev, index[dev], id[dev], THIS_MODULE,2118			   0, &card);2119	if (err < 0) {2120		dev_err(&pci->dev, "Error creating card!\n");2121		return err;2122	}2123 2124	err = azx_create(card, pci, dev, pci_id->driver_data, &chip);2125	if (err < 0)2126		goto out_free;2127	card->private_data = chip;2128	hda = container_of(chip, struct hda_intel, chip);2129 2130	pci_set_drvdata(pci, card);2131 2132#ifdef CONFIG_SND_HDA_I9152133	/* bind with i915 if needed */2134	if (chip->driver_caps & AZX_DCAPS_I915_COMPONENT) {2135		err = snd_hdac_i915_init(azx_bus(chip));2136		if (err < 0) {2137			if (err == -EPROBE_DEFER)2138				goto out_free;2139 2140			/* if the controller is bound only with HDMI/DP2141			 * (for HSW and BDW), we need to abort the probe;2142			 * for other chips, still continue probing as other2143			 * codecs can be on the same link.2144			 */2145			if (HDA_CONTROLLER_IN_GPU(pci)) {2146				dev_err_probe(card->dev, err,2147					     "HSW/BDW HD-audio HDMI/DP requires binding with gfx driver\n");2148 2149				goto out_free;2150			} else {2151				/* don't bother any longer */2152				chip->driver_caps &= ~AZX_DCAPS_I915_COMPONENT;2153			}2154		}2155 2156		/* HSW/BDW controllers need this power */2157		if (HDA_CONTROLLER_IN_GPU(pci))2158			hda->need_i915_power = true;2159	}2160#else2161	if (HDA_CONTROLLER_IN_GPU(pci))2162		dev_err(card->dev, "Haswell/Broadwell HDMI/DP must build in CONFIG_SND_HDA_I915\n");2163#endif2164 2165	err = register_vga_switcheroo(chip);2166	if (err < 0) {2167		dev_err(card->dev, "Error registering vga_switcheroo client\n");2168		goto out_free;2169	}2170 2171	if (check_hdmi_disabled(pci)) {2172		dev_info(card->dev, "VGA controller is disabled\n");2173		dev_info(card->dev, "Delaying initialization\n");2174		chip->disabled = true;2175	}2176 2177	schedule_probe = !chip->disabled;2178 2179#ifdef CONFIG_SND_HDA_PATCH_LOADER2180	if (patch[dev] && *patch[dev]) {2181		dev_info(card->dev, "Applying patch firmware '%s'\n",2182			 patch[dev]);2183		err = request_firmware_nowait(THIS_MODULE, true, patch[dev],2184					      &pci->dev, GFP_KERNEL, card,2185					      azx_firmware_cb);2186		if (err < 0)2187			goto out_free;2188		schedule_probe = false; /* continued in azx_firmware_cb() */2189	}2190#endif /* CONFIG_SND_HDA_PATCH_LOADER */2191 2192	if (schedule_probe)2193		schedule_delayed_work(&hda->probe_work, 0);2194 2195	set_bit(dev, probed_devs);2196	if (chip->disabled)2197		complete_all(&hda->probe_wait);2198	return 0;2199 2200out_free:2201	pci_set_drvdata(pci, NULL);2202	snd_card_free(card);2203	return err;2204}2205 2206/* On some boards setting power_save to a non 0 value leads to clicking /2207 * popping sounds when ever we enter/leave powersaving mode. Ideally we would2208 * figure out how to avoid these sounds, but that is not always feasible.2209 * So we keep a list of devices where we disable powersaving as its known2210 * to causes problems on these devices.2211 */2212static const struct snd_pci_quirk power_save_denylist[] = {2213	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2214	SND_PCI_QUIRK(0x1849, 0xc892, "Asrock B85M-ITX", 0),2215	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2216	SND_PCI_QUIRK(0x1849, 0x0397, "Asrock N68C-S UCC", 0),2217	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2218	SND_PCI_QUIRK(0x1849, 0x7662, "Asrock H81M-HDS", 0),2219	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2220	SND_PCI_QUIRK(0x1043, 0x8733, "Asus Prime X370-Pro", 0),2221	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2222	SND_PCI_QUIRK(0x1028, 0x0497, "Dell Precision T3600", 0),2223	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2224	/* Note the P55A-UD3 and Z87-D3HP share the subsys id for the HDA dev */2225	SND_PCI_QUIRK(0x1458, 0xa002, "Gigabyte P55A-UD3 / Z87-D3HP", 0),2226	/* https://bugzilla.redhat.com/show_bug.cgi?id=1525104 */2227	SND_PCI_QUIRK(0x8086, 0x2040, "Intel DZ77BH-55K", 0),2228	/* https://bugzilla.kernel.org/show_bug.cgi?id=199607 */2229	SND_PCI_QUIRK(0x8086, 0x2057, "Intel NUC5i7RYB", 0),2230	/* https://bugs.launchpad.net/bugs/1821663 */2231	SND_PCI_QUIRK(0x8086, 0x2064, "Intel SDP 8086:2064", 0),2232	/* https://bugzilla.redhat.com/show_bug.cgi?id=1520902 */2233	SND_PCI_QUIRK(0x8086, 0x2068, "Intel NUC7i3BNB", 0),2234	/* https://bugzilla.kernel.org/show_bug.cgi?id=198611 */2235	SND_PCI_QUIRK(0x17aa, 0x2227, "Lenovo X1 Carbon 3rd Gen", 0),2236	SND_PCI_QUIRK(0x17aa, 0x316e, "Lenovo ThinkCentre M70q", 0),2237	/* https://bugzilla.redhat.com/show_bug.cgi?id=1689623 */2238	SND_PCI_QUIRK(0x17aa, 0x367b, "Lenovo IdeaCentre B550", 0),2239	/* https://bugzilla.redhat.com/show_bug.cgi?id=1572975 */2240	SND_PCI_QUIRK(0x17aa, 0x36a7, "Lenovo C50 All in one", 0),2241	/* https://bugs.launchpad.net/bugs/1821663 */2242	SND_PCI_QUIRK(0x1631, 0xe017, "Packard Bell NEC IMEDIA 5204", 0),2243	/* KONTRON SinglePC may cause a stall at runtime resume */2244	SND_PCI_QUIRK(0x1734, 0x1232, "KONTRON SinglePC", 0),2245	{}2246};2247 2248static void set_default_power_save(struct azx *chip)2249{2250	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);2251	int val = power_save;2252 2253	if (pm_blacklist < 0) {2254		const struct snd_pci_quirk *q;2255 2256		q = snd_pci_quirk_lookup(chip->pci, power_save_denylist);2257		if (q && val) {2258			dev_info(chip->card->dev, "device %04x:%04x is on the power_save denylist, forcing power_save to 0\n",2259				 q->subvendor, q->subdevice);2260			val = 0;2261			hda->runtime_pm_disabled = 1;2262		}2263	} else if (pm_blacklist > 0) {2264		dev_info(chip->card->dev, "Forcing power_save to 0 via option\n");2265		val = 0;2266	}2267	snd_hda_set_power_save(&chip->bus, val * 1000);2268}2269 2270/* number of codec slots for each chipset: 0 = default slots (i.e. 4) */2271static const unsigned int azx_max_codecs[AZX_NUM_DRIVERS] = {2272	[AZX_DRIVER_NVIDIA] = 8,2273	[AZX_DRIVER_TERA] = 1,2274};2275 2276static int azx_probe_continue(struct azx *chip)2277{2278	struct hda_intel *hda = container_of(chip, struct hda_intel, chip);2279	struct hdac_bus *bus = azx_bus(chip);2280	struct pci_dev *pci = chip->pci;2281	int dev = chip->dev_index;2282	int err;2283 2284	if (chip->disabled || hda->init_failed)2285		return -EIO;2286	if (hda->probe_retry)2287		goto probe_retry;2288 2289	to_hda_bus(bus)->bus_probing = 1;2290	hda->probe_continued = 1;2291 2292	/* Request display power well for the HDA controller or codec. For2293	 * Haswell/Broadwell, both the display HDA controller and codec need2294	 * this power. For other platforms, like Baytrail/Braswell, only the2295	 * display codec needs the power and it can be released after probe.2296	 */2297	display_power(chip, true);2298 2299	err = azx_first_init(chip);2300	if (err < 0)2301		goto out_free;2302 2303#ifdef CONFIG_SND_HDA_INPUT_BEEP2304	chip->beep_mode = beep_mode[dev];2305#endif2306 2307	chip->ctl_dev_id = ctl_dev_id;2308 2309	/* create codec instances */2310	if (bus->codec_mask) {2311		err = azx_probe_codecs(chip, azx_max_codecs[chip->driver_type]);2312		if (err < 0)2313			goto out_free;2314	}2315 2316#ifdef CONFIG_SND_HDA_PATCH_LOADER2317	if (chip->fw) {2318		err = snd_hda_load_patch(&chip->bus, chip->fw->size,2319					 chip->fw->data);2320		if (err < 0)2321			goto out_free;2322	}2323#endif2324 2325 probe_retry:2326	if (bus->codec_mask && !(probe_only[dev] & 1)) {2327		err = azx_codec_configure(chip);2328		if (err) {2329			if ((chip->driver_caps & AZX_DCAPS_RETRY_PROBE) &&2330			    ++hda->probe_retry < 60) {2331				schedule_delayed_work(&hda->probe_work,2332						      msecs_to_jiffies(1000));2333				return 0; /* keep things up */2334			}2335			dev_err(chip->card->dev, "Cannot probe codecs, giving up\n");2336			goto out_free;2337		}2338	}2339 2340	err = snd_card_register(chip->card);2341	if (err < 0)2342		goto out_free;2343 2344	setup_vga_switcheroo_runtime_pm(chip);2345 2346	chip->running = 1;2347	azx_add_card_list(chip);2348 2349	set_default_power_save(chip);2350 2351	if (azx_has_pm_runtime(chip)) {2352		pm_runtime_use_autosuspend(&pci->dev);2353		pm_runtime_allow(&pci->dev);2354		pm_runtime_put_autosuspend(&pci->dev);2355	}2356 2357out_free:2358	if (err < 0) {2359		pci_set_drvdata(pci, NULL);2360		snd_card_free(chip->card);2361		return err;2362	}2363 2364	if (!hda->need_i915_power)2365		display_power(chip, false);2366	complete_all(&hda->probe_wait);2367	to_hda_bus(bus)->bus_probing = 0;2368	hda->probe_retry = 0;2369	return 0;2370}2371 2372static void azx_remove(struct pci_dev *pci)2373{2374	struct snd_card *card = pci_get_drvdata(pci);2375	struct azx *chip;2376	struct hda_intel *hda;2377 2378	if (card) {2379		/* cancel the pending probing work */2380		chip = card->private_data;2381		hda = container_of(chip, struct hda_intel, chip);2382		/* FIXME: below is an ugly workaround.2383		 * Both device_release_driver() and driver_probe_device()2384		 * take *both* the device's and its parent's lock before2385		 * calling the remove() and probe() callbacks.  The codec2386		 * probe takes the locks of both the codec itself and its2387		 * parent, i.e. the PCI controller dev.  Meanwhile, when2388		 * the PCI controller is unbound, it takes its lock, too2389		 * ==> ouch, a deadlock!2390		 * As a workaround, we unlock temporarily here the controller2391		 * device during cancel_work_sync() call.2392		 */2393		device_unlock(&pci->dev);2394		cancel_delayed_work_sync(&hda->probe_work);2395		device_lock(&pci->dev);2396 2397		clear_bit(chip->dev_index, probed_devs);2398		pci_set_drvdata(pci, NULL);2399		snd_card_free(card);2400	}2401}2402 2403static void azx_shutdown(struct pci_dev *pci)2404{2405	struct snd_card *card = pci_get_drvdata(pci);2406	struct azx *chip;2407 2408	if (!card)2409		return;2410	chip = card->private_data;2411	if (chip && chip->running)2412		__azx_shutdown_chip(chip, true);2413}2414 2415/* PCI IDs */2416static const struct pci_device_id azx_ids[] = {2417	/* CPT */2418	{ PCI_DEVICE_DATA(INTEL, HDA_CPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) },2419	/* PBG */2420	{ PCI_DEVICE_DATA(INTEL, HDA_PBG, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) },2421	/* Panther Point */2422	{ PCI_DEVICE_DATA(INTEL, HDA_PPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH_NOPM) },2423	/* Lynx Point */2424	{ PCI_DEVICE_DATA(INTEL, HDA_LPT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2425	/* 9 Series */2426	{ PCI_DEVICE_DATA(INTEL, HDA_9_SERIES, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2427	/* Wellsburg */2428	{ PCI_DEVICE_DATA(INTEL, HDA_WBG_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2429	{ PCI_DEVICE_DATA(INTEL, HDA_WBG_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2430	/* Lewisburg */2431	{ PCI_DEVICE_DATA(INTEL, HDA_LBG_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE) },2432	{ PCI_DEVICE_DATA(INTEL, HDA_LBG_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE) },2433	/* Lynx Point-LP */2434	{ PCI_DEVICE_DATA(INTEL, HDA_LPT_LP_0, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2435	/* Lynx Point-LP */2436	{ PCI_DEVICE_DATA(INTEL, HDA_LPT_LP_1, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2437	/* Wildcat Point-LP */2438	{ PCI_DEVICE_DATA(INTEL, HDA_WPT_LP, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH) },2439	/* Skylake (Sunrise Point) */2440	{ PCI_DEVICE_DATA(INTEL, HDA_SKL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2441	/* Skylake-LP (Sunrise Point-LP) */2442	{ PCI_DEVICE_DATA(INTEL, HDA_SKL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2443	/* Kabylake */2444	{ PCI_DEVICE_DATA(INTEL, HDA_KBL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2445	/* Kabylake-LP */2446	{ PCI_DEVICE_DATA(INTEL, HDA_KBL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2447	/* Kabylake-H */2448	{ PCI_DEVICE_DATA(INTEL, HDA_KBL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2449	/* Coffelake */2450	{ PCI_DEVICE_DATA(INTEL, HDA_CNL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2451	/* Cannonlake */2452	{ PCI_DEVICE_DATA(INTEL, HDA_CNL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2453	/* CometLake-LP */2454	{ PCI_DEVICE_DATA(INTEL, HDA_CML_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2455	/* CometLake-H */2456	{ PCI_DEVICE_DATA(INTEL, HDA_CML_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2457	{ PCI_DEVICE_DATA(INTEL, HDA_RKL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2458	/* CometLake-S */2459	{ PCI_DEVICE_DATA(INTEL, HDA_CML_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2460	/* CometLake-R */2461	{ PCI_DEVICE_DATA(INTEL, HDA_CML_R, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2462	/* Icelake */2463	{ PCI_DEVICE_DATA(INTEL, HDA_ICL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2464	/* Icelake-H */2465	{ PCI_DEVICE_DATA(INTEL, HDA_ICL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2466	/* Jasperlake */2467	{ PCI_DEVICE_DATA(INTEL, HDA_ICL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2468	{ PCI_DEVICE_DATA(INTEL, HDA_JSL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2469	/* Tigerlake */2470	{ PCI_DEVICE_DATA(INTEL, HDA_TGL_LP, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2471	/* Tigerlake-H */2472	{ PCI_DEVICE_DATA(INTEL, HDA_TGL_H, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2473	/* DG1 */2474	{ PCI_DEVICE_DATA(INTEL, HDA_DG1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2475	/* DG2 */2476	{ PCI_DEVICE_DATA(INTEL, HDA_DG2_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2477	{ PCI_DEVICE_DATA(INTEL, HDA_DG2_1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2478	{ PCI_DEVICE_DATA(INTEL, HDA_DG2_2, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2479	/* Alderlake-S */2480	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2481	/* Alderlake-P */2482	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_P, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2483	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_PS, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2484	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_PX, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2485	/* Alderlake-M */2486	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_M, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2487	/* Alderlake-N */2488	{ PCI_DEVICE_DATA(INTEL, HDA_ADL_N, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2489	/* Elkhart Lake */2490	{ PCI_DEVICE_DATA(INTEL, HDA_EHL_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2491	{ PCI_DEVICE_DATA(INTEL, HDA_EHL_3, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2492	/* Raptor Lake */2493	{ PCI_DEVICE_DATA(INTEL, HDA_RPL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2494	{ PCI_DEVICE_DATA(INTEL, HDA_RPL_P_0, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2495	{ PCI_DEVICE_DATA(INTEL, HDA_RPL_P_1, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2496	{ PCI_DEVICE_DATA(INTEL, HDA_RPL_M, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2497	{ PCI_DEVICE_DATA(INTEL, HDA_RPL_PX, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2498	{ PCI_DEVICE_DATA(INTEL, HDA_MTL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2499	/* Battlemage */2500	{ PCI_DEVICE_DATA(INTEL, HDA_BMG, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2501	/* Lunarlake-P */2502	{ PCI_DEVICE_DATA(INTEL, HDA_LNL_P, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_LNL) },2503	/* Arrow Lake-S */2504	{ PCI_DEVICE_DATA(INTEL, HDA_ARL_S, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2505	/* Arrow Lake */2506	{ PCI_DEVICE_DATA(INTEL, HDA_ARL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE) },2507	/* Panther Lake */2508	{ PCI_DEVICE_DATA(INTEL, HDA_PTL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_LNL) },2509	/* Apollolake (Broxton-P) */2510	{ PCI_DEVICE_DATA(INTEL, HDA_APL, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON) },2511	/* Gemini-Lake */2512	{ PCI_DEVICE_DATA(INTEL, HDA_GML, AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON) },2513	/* Haswell */2514	{ PCI_DEVICE_DATA(INTEL, HDA_HSW_0, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) },2515	{ PCI_DEVICE_DATA(INTEL, HDA_HSW_2, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) },2516	{ PCI_DEVICE_DATA(INTEL, HDA_HSW_3, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL) },2517	/* Broadwell */2518	{ PCI_DEVICE_DATA(INTEL, HDA_BDW, AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_BROADWELL) },2519	/* 5 Series/3400 */2520	{ PCI_DEVICE_DATA(INTEL, HDA_5_3400_SERIES_0, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM) },2521	{ PCI_DEVICE_DATA(INTEL, HDA_5_3400_SERIES_1, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_NOPM) },2522	/* Poulsbo */2523	{ PCI_DEVICE_DATA(INTEL, HDA_POULSBO, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE |2524	  AZX_DCAPS_POSFIX_LPIB) },2525	/* Oaktrail */2526	{ PCI_DEVICE_DATA(INTEL, HDA_OAKTRAIL, AZX_DRIVER_SCH | AZX_DCAPS_INTEL_PCH_BASE) },2527	/* BayTrail */2528	{ PCI_DEVICE_DATA(INTEL, HDA_BYT, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BAYTRAIL) },2529	/* Braswell */2530	{ PCI_DEVICE_DATA(INTEL, HDA_BSW, AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BRASWELL) },2531	/* ICH6 */2532	{ PCI_DEVICE_DATA(INTEL, HDA_ICH6, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2533	/* ICH7 */2534	{ PCI_DEVICE_DATA(INTEL, HDA_ICH7, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2535	/* ESB2 */2536	{ PCI_DEVICE_DATA(INTEL, HDA_ESB2, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2537	/* ICH8 */2538	{ PCI_DEVICE_DATA(INTEL, HDA_ICH8, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2539	/* ICH9 */2540	{ PCI_DEVICE_DATA(INTEL, HDA_ICH9_0, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2541	/* ICH9 */2542	{ PCI_DEVICE_DATA(INTEL, HDA_ICH9_1, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2543	/* ICH10 */2544	{ PCI_DEVICE_DATA(INTEL, HDA_ICH10_0, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2545	/* ICH10 */2546	{ PCI_DEVICE_DATA(INTEL, HDA_ICH10_1, AZX_DRIVER_ICH | AZX_DCAPS_INTEL_ICH) },2547	/* Generic Intel */2548	{ PCI_DEVICE(PCI_VENDOR_ID_INTEL, PCI_ANY_ID),2549	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2550	  .class_mask = 0xffffff,2551	  .driver_data = AZX_DRIVER_ICH | AZX_DCAPS_NO_ALIGN_BUFSIZE },2552	/* ATI SB 450/600/700/800/900 */2553	{ PCI_VDEVICE(ATI, 0x437b),2554	  .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },2555	{ PCI_VDEVICE(ATI, 0x4383),2556	  .driver_data = AZX_DRIVER_ATI | AZX_DCAPS_PRESET_ATI_SB },2557	/* AMD Hudson */2558	{ PCI_VDEVICE(AMD, 0x780d),2559	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB },2560	/* AMD, X370 & co */2561	{ PCI_VDEVICE(AMD, 0x1457),2562	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB },2563	/* AMD, X570 & co */2564	{ PCI_VDEVICE(AMD, 0x1487),2565	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB },2566	/* AMD Stoney */2567	{ PCI_VDEVICE(AMD, 0x157a),2568	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_SB |2569			 AZX_DCAPS_PM_RUNTIME },2570	/* AMD Raven */2571	{ PCI_VDEVICE(AMD, 0x15e3),2572	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_AMD_SB },2573	/* ATI HDMI */2574	{ PCI_VDEVICE(ATI, 0x0002),2575	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2576	  AZX_DCAPS_PM_RUNTIME },2577	{ PCI_VDEVICE(ATI, 0x1308),2578	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2579	{ PCI_VDEVICE(ATI, 0x157a),2580	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2581	{ PCI_VDEVICE(ATI, 0x15b3),2582	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2583	{ PCI_VDEVICE(ATI, 0x793b),2584	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2585	{ PCI_VDEVICE(ATI, 0x7919),2586	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2587	{ PCI_VDEVICE(ATI, 0x960f),2588	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2589	{ PCI_VDEVICE(ATI, 0x970f),2590	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2591	{ PCI_VDEVICE(ATI, 0x9840),2592	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2593	{ PCI_VDEVICE(ATI, 0xaa00),2594	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2595	{ PCI_VDEVICE(ATI, 0xaa08),2596	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2597	{ PCI_VDEVICE(ATI, 0xaa10),2598	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2599	{ PCI_VDEVICE(ATI, 0xaa18),2600	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2601	{ PCI_VDEVICE(ATI, 0xaa20),2602	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2603	{ PCI_VDEVICE(ATI, 0xaa28),2604	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2605	{ PCI_VDEVICE(ATI, 0xaa30),2606	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2607	{ PCI_VDEVICE(ATI, 0xaa38),2608	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2609	{ PCI_VDEVICE(ATI, 0xaa40),2610	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2611	{ PCI_VDEVICE(ATI, 0xaa48),2612	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2613	{ PCI_VDEVICE(ATI, 0xaa50),2614	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2615	{ PCI_VDEVICE(ATI, 0xaa58),2616	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2617	{ PCI_VDEVICE(ATI, 0xaa60),2618	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2619	{ PCI_VDEVICE(ATI, 0xaa68),2620	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2621	{ PCI_VDEVICE(ATI, 0xaa80),2622	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2623	{ PCI_VDEVICE(ATI, 0xaa88),2624	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2625	{ PCI_VDEVICE(ATI, 0xaa90),2626	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2627	{ PCI_VDEVICE(ATI, 0xaa98),2628	  .driver_data = AZX_DRIVER_ATIHDMI | AZX_DCAPS_PRESET_ATI_HDMI },2629	{ PCI_VDEVICE(ATI, 0x9902),2630	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2631	{ PCI_VDEVICE(ATI, 0xaaa0),2632	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2633	{ PCI_VDEVICE(ATI, 0xaaa8),2634	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2635	{ PCI_VDEVICE(ATI, 0xaab0),2636	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS },2637	{ PCI_VDEVICE(ATI, 0xaac0),2638	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2639	  AZX_DCAPS_PM_RUNTIME },2640	{ PCI_VDEVICE(ATI, 0xaac8),2641	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2642	  AZX_DCAPS_PM_RUNTIME },2643	{ PCI_VDEVICE(ATI, 0xaad8),2644	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2645	  AZX_DCAPS_PM_RUNTIME },2646	{ PCI_VDEVICE(ATI, 0xaae0),2647	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2648	  AZX_DCAPS_PM_RUNTIME },2649	{ PCI_VDEVICE(ATI, 0xaae8),2650	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2651	  AZX_DCAPS_PM_RUNTIME },2652	{ PCI_VDEVICE(ATI, 0xaaf0),2653	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2654	  AZX_DCAPS_PM_RUNTIME },2655	{ PCI_VDEVICE(ATI, 0xaaf8),2656	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2657	  AZX_DCAPS_PM_RUNTIME },2658	{ PCI_VDEVICE(ATI, 0xab00),2659	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2660	  AZX_DCAPS_PM_RUNTIME },2661	{ PCI_VDEVICE(ATI, 0xab08),2662	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2663	  AZX_DCAPS_PM_RUNTIME },2664	{ PCI_VDEVICE(ATI, 0xab10),2665	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2666	  AZX_DCAPS_PM_RUNTIME },2667	{ PCI_VDEVICE(ATI, 0xab18),2668	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2669	  AZX_DCAPS_PM_RUNTIME },2670	{ PCI_VDEVICE(ATI, 0xab20),2671	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2672	  AZX_DCAPS_PM_RUNTIME },2673	{ PCI_VDEVICE(ATI, 0xab28),2674	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2675	  AZX_DCAPS_PM_RUNTIME },2676	{ PCI_VDEVICE(ATI, 0xab30),2677	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2678	  AZX_DCAPS_PM_RUNTIME },2679	{ PCI_VDEVICE(ATI, 0xab38),2680	  .driver_data = AZX_DRIVER_ATIHDMI_NS | AZX_DCAPS_PRESET_ATI_HDMI_NS |2681	  AZX_DCAPS_PM_RUNTIME },2682	/* GLENFLY */2683	{ PCI_DEVICE(PCI_VENDOR_ID_GLENFLY, PCI_ANY_ID),2684	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2685	  .class_mask = 0xffffff,2686	  .driver_data = AZX_DRIVER_GFHDMI | AZX_DCAPS_POSFIX_LPIB |2687	  AZX_DCAPS_NO_MSI | AZX_DCAPS_NO_64BIT },2688	/* VIA VT8251/VT8237A */2689	{ PCI_VDEVICE(VIA, 0x3288), .driver_data = AZX_DRIVER_VIA },2690	/* VIA GFX VT7122/VX900 */2691	{ PCI_VDEVICE(VIA, 0x9170), .driver_data = AZX_DRIVER_GENERIC },2692	/* VIA GFX VT6122/VX11 */2693	{ PCI_VDEVICE(VIA, 0x9140), .driver_data = AZX_DRIVER_GENERIC },2694	/* SIS966 */2695	{ PCI_VDEVICE(SI, 0x7502), .driver_data = AZX_DRIVER_SIS },2696	/* ULI M5461 */2697	{ PCI_VDEVICE(AL, 0x5461), .driver_data = AZX_DRIVER_ULI },2698	/* NVIDIA MCP */2699	{ PCI_DEVICE(PCI_VENDOR_ID_NVIDIA, PCI_ANY_ID),2700	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2701	  .class_mask = 0xffffff,2702	  .driver_data = AZX_DRIVER_NVIDIA | AZX_DCAPS_PRESET_NVIDIA },2703	/* Teradici */2704	{ PCI_DEVICE(0x6549, 0x1200),2705	  .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },2706	{ PCI_DEVICE(0x6549, 0x2200),2707	  .driver_data = AZX_DRIVER_TERA | AZX_DCAPS_NO_64BIT },2708	/* Creative X-Fi (CA0110-IBG) */2709	/* CTHDA chips */2710	{ PCI_VDEVICE(CREATIVE, 0x0010),2711	  .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },2712	{ PCI_VDEVICE(CREATIVE, 0x0012),2713	  .driver_data = AZX_DRIVER_CTHDA | AZX_DCAPS_PRESET_CTHDA },2714#if !IS_ENABLED(CONFIG_SND_CTXFI)2715	/* the following entry conflicts with snd-ctxfi driver,2716	 * as ctxfi driver mutates from HD-audio to native mode with2717	 * a special command sequence.2718	 */2719	{ PCI_DEVICE(PCI_VENDOR_ID_CREATIVE, PCI_ANY_ID),2720	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2721	  .class_mask = 0xffffff,2722	  .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |2723	  AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB },2724#else2725	/* this entry seems still valid -- i.e. without emu20kx chip */2726	{ PCI_VDEVICE(CREATIVE, 0x0009),2727	  .driver_data = AZX_DRIVER_CTX | AZX_DCAPS_CTX_WORKAROUND |2728	  AZX_DCAPS_NO_64BIT | AZX_DCAPS_POSFIX_LPIB },2729#endif2730	/* CM8888 */2731	{ PCI_VDEVICE(CMEDIA, 0x5011),2732	  .driver_data = AZX_DRIVER_CMEDIA |2733	  AZX_DCAPS_NO_MSI | AZX_DCAPS_POSFIX_LPIB | AZX_DCAPS_SNOOP_OFF },2734	/* Vortex86MX */2735	{ PCI_VDEVICE(RDC, 0x3010), .driver_data = AZX_DRIVER_GENERIC },2736	/* VMware HDAudio */2737	{ PCI_VDEVICE(VMWARE, 0x1977), .driver_data = AZX_DRIVER_GENERIC },2738	/* AMD/ATI Generic, PCI class code and Vendor ID for HD Audio */2739	{ PCI_DEVICE(PCI_VENDOR_ID_ATI, PCI_ANY_ID),2740	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2741	  .class_mask = 0xffffff,2742	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },2743	{ PCI_DEVICE(PCI_VENDOR_ID_AMD, PCI_ANY_ID),2744	  .class = PCI_CLASS_MULTIMEDIA_HD_AUDIO << 8,2745	  .class_mask = 0xffffff,2746	  .driver_data = AZX_DRIVER_GENERIC | AZX_DCAPS_PRESET_ATI_HDMI },2747	/* Zhaoxin */2748	{ PCI_VDEVICE(ZHAOXIN, 0x3288), .driver_data = AZX_DRIVER_ZHAOXIN },2749	/* Loongson HDAudio*/2750	{ PCI_VDEVICE(LOONGSON, PCI_DEVICE_ID_LOONGSON_HDA),2751	  .driver_data = AZX_DRIVER_LOONGSON },2752	{ PCI_VDEVICE(LOONGSON, PCI_DEVICE_ID_LOONGSON_HDMI),2753	  .driver_data = AZX_DRIVER_LOONGSON },2754	{ 0, }2755};2756MODULE_DEVICE_TABLE(pci, azx_ids);2757 2758/* pci_driver definition */2759static struct pci_driver azx_driver = {2760	.name = KBUILD_MODNAME,2761	.id_table = azx_ids,2762	.probe = azx_probe,2763	.remove = azx_remove,2764	.shutdown = azx_shutdown,2765	.driver = {2766		.pm = &azx_pm,2767	},2768};2769 2770module_pci_driver(azx_driver);2771