diff options
author | Takashi Iwai <tiwai@suse.de> | 2017-06-14 01:26:00 -0400 |
---|---|---|
committer | Takashi Iwai <tiwai@suse.de> | 2017-06-20 01:53:28 -0400 |
commit | a4b4793f640b72af3e2bb2a1ad79725c103d5e40 (patch) | |
tree | d91a18d023b370229a36babc54080fdd7fe8f9f1 | |
parent | 7fc8e7c1d9787ab8cb0f91adb3bc9c2c64c00ef8 (diff) |
ALSA: hda - Add AZX_DRIVER_SKL for simplification
We checked the quirks specific to the recent Intel chips by checking
the PCI IDs manually, but it's becoming messy with lots of IS_SKL()
and other macros, as the amount accumulated.
For simplification, here the new AZX_DRIVER_SKL type is introduced,
and check chip->driver_type instead of the manual PCI ID. The short
name for this is still "HDA Intel PCH", so that it doesn't break the
existing user-space unnecessarily.
Suggested-by: Vinod Koul <vinod.koul@intel.com>
Signed-off-by: Takashi Iwai <tiwai@suse.de>
-rw-r--r-- | sound/pci/hda/hda_intel.c | 47 |
1 files changed, 21 insertions, 26 deletions
diff --git a/sound/pci/hda/hda_intel.c b/sound/pci/hda/hda_intel.c index 01eb1dc7b5b3..07ea7f48aa01 100644 --- a/sound/pci/hda/hda_intel.c +++ b/sound/pci/hda/hda_intel.c | |||
@@ -263,6 +263,7 @@ enum { | |||
263 | AZX_DRIVER_ICH, | 263 | AZX_DRIVER_ICH, |
264 | AZX_DRIVER_PCH, | 264 | AZX_DRIVER_PCH, |
265 | AZX_DRIVER_SCH, | 265 | AZX_DRIVER_SCH, |
266 | AZX_DRIVER_SKL, | ||
266 | AZX_DRIVER_HDMI, | 267 | AZX_DRIVER_HDMI, |
267 | AZX_DRIVER_ATI, | 268 | AZX_DRIVER_ATI, |
268 | AZX_DRIVER_ATIHDMI, | 269 | AZX_DRIVER_ATIHDMI, |
@@ -364,23 +365,13 @@ enum { | |||
364 | ((pci)->device == 0x0d0c) || \ | 365 | ((pci)->device == 0x0d0c) || \ |
365 | ((pci)->device == 0x160c)) | 366 | ((pci)->device == 0x160c)) |
366 | 367 | ||
367 | #define IS_SKL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa170) | ||
368 | #define IS_SKL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d70) | ||
369 | #define IS_KBL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa171) | ||
370 | #define IS_KBL_LP(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x9d71) | ||
371 | #define IS_KBL_H(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa2f0) | ||
372 | #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) | 368 | #define IS_BXT(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x5a98) |
373 | #define IS_BXT_T(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x1a98) | ||
374 | #define IS_GLK(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0x3198) | ||
375 | #define IS_CFL(pci) ((pci)->vendor == 0x8086 && (pci)->device == 0xa348) | ||
376 | #define IS_SKL_PLUS(pci) (IS_SKL(pci) || IS_SKL_LP(pci) || IS_BXT(pci) || \ | ||
377 | IS_BXT_T(pci) || IS_KBL(pci) || IS_KBL_LP(pci) || \ | ||
378 | IS_KBL_H(pci) || IS_GLK(pci) || IS_CFL(pci)) | ||
379 | 369 | ||
380 | static char *driver_short_names[] = { | 370 | static char *driver_short_names[] = { |
381 | [AZX_DRIVER_ICH] = "HDA Intel", | 371 | [AZX_DRIVER_ICH] = "HDA Intel", |
382 | [AZX_DRIVER_PCH] = "HDA Intel PCH", | 372 | [AZX_DRIVER_PCH] = "HDA Intel PCH", |
383 | [AZX_DRIVER_SCH] = "HDA Intel MID", | 373 | [AZX_DRIVER_SCH] = "HDA Intel MID", |
374 | [AZX_DRIVER_SKL] = "HDA Intel PCH", /* kept old name for compatibility */ | ||
384 | [AZX_DRIVER_HDMI] = "HDA Intel HDMI", | 375 | [AZX_DRIVER_HDMI] = "HDA Intel HDMI", |
385 | [AZX_DRIVER_ATI] = "HDA ATI SB", | 376 | [AZX_DRIVER_ATI] = "HDA ATI SB", |
386 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", | 377 | [AZX_DRIVER_ATIHDMI] = "HDA ATI HDMI", |
@@ -644,13 +635,13 @@ static void hda_intel_init_chip(struct azx *chip, bool full_reset) | |||
644 | 635 | ||
645 | if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) | 636 | if (chip->driver_caps & AZX_DCAPS_I915_POWERWELL) |
646 | snd_hdac_set_codec_wakeup(bus, true); | 637 | snd_hdac_set_codec_wakeup(bus, true); |
647 | if (IS_SKL_PLUS(pci)) { | 638 | if (chip->driver_type == AZX_DRIVER_SKL) { |
648 | pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val); | 639 | pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val); |
649 | val = val & ~INTEL_HDA_CGCTL_MISCBDCGE; | 640 | val = val & ~INTEL_HDA_CGCTL_MISCBDCGE; |
650 | pci_write_config_dword(pci, INTEL_HDA_CGCTL, val); | 641 | pci_write_config_dword(pci, INTEL_HDA_CGCTL, val); |
651 | } | 642 | } |
652 | azx_init_chip(chip, full_reset); | 643 | azx_init_chip(chip, full_reset); |
653 | if (IS_SKL_PLUS(pci)) { | 644 | if (chip->driver_type == AZX_DRIVER_SKL) { |
654 | pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val); | 645 | pci_read_config_dword(pci, INTEL_HDA_CGCTL, &val); |
655 | val = val | INTEL_HDA_CGCTL_MISCBDCGE; | 646 | val = val | INTEL_HDA_CGCTL_MISCBDCGE; |
656 | pci_write_config_dword(pci, INTEL_HDA_CGCTL, val); | 647 | pci_write_config_dword(pci, INTEL_HDA_CGCTL, val); |
@@ -1075,9 +1066,11 @@ static int azx_resume(struct device *dev) | |||
1075 | */ | 1066 | */ |
1076 | static int azx_freeze_noirq(struct device *dev) | 1067 | static int azx_freeze_noirq(struct device *dev) |
1077 | { | 1068 | { |
1069 | struct snd_card *card = dev_get_drvdata(dev); | ||
1070 | struct azx *chip = card->private_data; | ||
1078 | struct pci_dev *pci = to_pci_dev(dev); | 1071 | struct pci_dev *pci = to_pci_dev(dev); |
1079 | 1072 | ||
1080 | if (IS_SKL_PLUS(pci)) | 1073 | if (chip->driver_type == AZX_DRIVER_SKL) |
1081 | pci_set_power_state(pci, PCI_D3hot); | 1074 | pci_set_power_state(pci, PCI_D3hot); |
1082 | 1075 | ||
1083 | return 0; | 1076 | return 0; |
@@ -1085,9 +1078,11 @@ static int azx_freeze_noirq(struct device *dev) | |||
1085 | 1078 | ||
1086 | static int azx_thaw_noirq(struct device *dev) | 1079 | static int azx_thaw_noirq(struct device *dev) |
1087 | { | 1080 | { |
1081 | struct snd_card *card = dev_get_drvdata(dev); | ||
1082 | struct azx *chip = card->private_data; | ||
1088 | struct pci_dev *pci = to_pci_dev(dev); | 1083 | struct pci_dev *pci = to_pci_dev(dev); |
1089 | 1084 | ||
1090 | if (IS_SKL_PLUS(pci)) | 1085 | if (chip->driver_type == AZX_DRIVER_SKL) |
1091 | pci_set_power_state(pci, PCI_D0); | 1086 | pci_set_power_state(pci, PCI_D0); |
1092 | 1087 | ||
1093 | return 0; | 1088 | return 0; |
@@ -1497,7 +1492,7 @@ static int check_position_fix(struct azx *chip, int fix) | |||
1497 | dev_dbg(chip->card->dev, "Using LPIB position fix\n"); | 1492 | dev_dbg(chip->card->dev, "Using LPIB position fix\n"); |
1498 | return POS_FIX_LPIB; | 1493 | return POS_FIX_LPIB; |
1499 | } | 1494 | } |
1500 | if (IS_SKL_PLUS(chip->pci)) { | 1495 | if (chip->driver_type == AZX_DRIVER_SKL) { |
1501 | dev_dbg(chip->card->dev, "Using SKL position fix\n"); | 1496 | dev_dbg(chip->card->dev, "Using SKL position fix\n"); |
1502 | return POS_FIX_SKL; | 1497 | return POS_FIX_SKL; |
1503 | } | 1498 | } |
@@ -1798,7 +1793,7 @@ static int azx_first_init(struct azx *chip) | |||
1798 | return -ENXIO; | 1793 | return -ENXIO; |
1799 | } | 1794 | } |
1800 | 1795 | ||
1801 | if (IS_SKL_PLUS(pci)) | 1796 | if (chip->driver_type == AZX_DRIVER_SKL) |
1802 | snd_hdac_bus_parse_capabilities(bus); | 1797 | snd_hdac_bus_parse_capabilities(bus); |
1803 | 1798 | ||
1804 | /* | 1799 | /* |
@@ -2367,31 +2362,31 @@ static const struct pci_device_id azx_ids[] = { | |||
2367 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, | 2362 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_PCH }, |
2368 | /* Sunrise Point */ | 2363 | /* Sunrise Point */ |
2369 | { PCI_DEVICE(0x8086, 0xa170), | 2364 | { PCI_DEVICE(0x8086, 0xa170), |
2370 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, | 2365 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, |
2371 | /* Sunrise Point-LP */ | 2366 | /* Sunrise Point-LP */ |
2372 | { PCI_DEVICE(0x8086, 0x9d70), | 2367 | { PCI_DEVICE(0x8086, 0x9d70), |
2373 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, | 2368 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, |
2374 | /* Kabylake */ | 2369 | /* Kabylake */ |
2375 | { PCI_DEVICE(0x8086, 0xa171), | 2370 | { PCI_DEVICE(0x8086, 0xa171), |
2376 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, | 2371 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, |
2377 | /* Kabylake-LP */ | 2372 | /* Kabylake-LP */ |
2378 | { PCI_DEVICE(0x8086, 0x9d71), | 2373 | { PCI_DEVICE(0x8086, 0x9d71), |
2379 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, | 2374 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, |
2380 | /* Kabylake-H */ | 2375 | /* Kabylake-H */ |
2381 | { PCI_DEVICE(0x8086, 0xa2f0), | 2376 | { PCI_DEVICE(0x8086, 0xa2f0), |
2382 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE }, | 2377 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE }, |
2383 | /* Coffelake */ | 2378 | /* Coffelake */ |
2384 | { PCI_DEVICE(0x8086, 0xa348), | 2379 | { PCI_DEVICE(0x8086, 0xa348), |
2385 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_SKYLAKE}, | 2380 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_SKYLAKE}, |
2386 | /* Broxton-P(Apollolake) */ | 2381 | /* Broxton-P(Apollolake) */ |
2387 | { PCI_DEVICE(0x8086, 0x5a98), | 2382 | { PCI_DEVICE(0x8086, 0x5a98), |
2388 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, | 2383 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, |
2389 | /* Broxton-T */ | 2384 | /* Broxton-T */ |
2390 | { PCI_DEVICE(0x8086, 0x1a98), | 2385 | { PCI_DEVICE(0x8086, 0x1a98), |
2391 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, | 2386 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, |
2392 | /* Gemini-Lake */ | 2387 | /* Gemini-Lake */ |
2393 | { PCI_DEVICE(0x8086, 0x3198), | 2388 | { PCI_DEVICE(0x8086, 0x3198), |
2394 | .driver_data = AZX_DRIVER_PCH | AZX_DCAPS_INTEL_BROXTON }, | 2389 | .driver_data = AZX_DRIVER_SKL | AZX_DCAPS_INTEL_BROXTON }, |
2395 | /* Haswell */ | 2390 | /* Haswell */ |
2396 | { PCI_DEVICE(0x8086, 0x0a0c), | 2391 | { PCI_DEVICE(0x8086, 0x0a0c), |
2397 | .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, | 2392 | .driver_data = AZX_DRIVER_HDMI | AZX_DCAPS_INTEL_HASWELL }, |