Linux Audio

Check our new training course

Loading...
Note: File does not exist in v4.17.
  1/* SPDX-License-Identifier: GPL-2.0-only */
  2/*
  3 * soc-intel-quirks.h - prototypes for quirk autodetection
  4 *
  5 * Copyright (c) 2019, Intel Corporation.
  6 *
  7 */
  8
  9#ifndef _SND_SOC_INTEL_QUIRKS_H
 10#define _SND_SOC_INTEL_QUIRKS_H
 11
 12#if IS_ENABLED(CONFIG_X86)
 13
 14#include <asm/cpu_device_id.h>
 15#include <asm/intel-family.h>
 16#include <asm/iosf_mbi.h>
 17
 18#define SOC_INTEL_IS_CPU(soc, type)				\
 19static inline bool soc_intel_is_##soc(void)			\
 20{								\
 21	static const struct x86_cpu_id soc##_cpu_ids[] = {	\
 22		X86_MATCH_INTEL_FAM6_MODEL(type, NULL),		\
 23		{}						\
 24	};							\
 25	const struct x86_cpu_id *id;				\
 26								\
 27	id = x86_match_cpu(soc##_cpu_ids);			\
 28	if (id)							\
 29		return true;					\
 30	return false;						\
 31}
 32
 33SOC_INTEL_IS_CPU(byt, ATOM_SILVERMONT);
 34SOC_INTEL_IS_CPU(cht, ATOM_AIRMONT);
 35SOC_INTEL_IS_CPU(apl, ATOM_GOLDMONT);
 36SOC_INTEL_IS_CPU(glk, ATOM_GOLDMONT_PLUS);
 37SOC_INTEL_IS_CPU(cml, KABYLAKE_L);
 38
 39static inline bool soc_intel_is_byt_cr(struct platform_device *pdev)
 40{
 41	struct device *dev = &pdev->dev;
 42	int status = 0;
 43
 44	if (!soc_intel_is_byt())
 45		return false;
 46
 47	if (iosf_mbi_available()) {
 48		u32 bios_status;
 49
 50		status = iosf_mbi_read(BT_MBI_UNIT_PMC, /* 0x04 PUNIT */
 51				       MBI_REG_READ, /* 0x10 */
 52				       0x006, /* BIOS_CONFIG */
 53				       &bios_status);
 54
 55		if (status) {
 56			dev_err(dev, "could not read PUNIT BIOS_CONFIG\n");
 57		} else {
 58			/* bits 26:27 mirror PMIC options */
 59			bios_status = (bios_status >> 26) & 3;
 60
 61			if (bios_status == 1 || bios_status == 3) {
 62				dev_info(dev, "Detected Baytrail-CR platform\n");
 63				return true;
 64			}
 65
 66			dev_info(dev, "BYT-CR not detected\n");
 67		}
 68	} else {
 69		dev_info(dev, "IOSF_MBI not available, no BYT-CR detection\n");
 70	}
 71
 72	if (!platform_get_resource(pdev, IORESOURCE_IRQ, 5)) {
 73		/*
 74		 * Some devices detected as BYT-T have only a single IRQ listed,
 75		 * causing platform_get_irq with index 5 to return -ENXIO.
 76		 * The correct IRQ in this case is at index 0, as on BYT-CR.
 77		 */
 78		dev_info(dev, "Falling back to Baytrail-CR platform\n");
 79		return true;
 80	}
 81
 82	return false;
 83}
 84
 85#else
 86
 87static inline bool soc_intel_is_byt_cr(struct platform_device *pdev)
 88{
 89	return false;
 90}
 91
 92static inline bool soc_intel_is_byt(void)
 93{
 94	return false;
 95}
 96
 97static inline bool soc_intel_is_cht(void)
 98{
 99	return false;
100}
101
102static inline bool soc_intel_is_apl(void)
103{
104	return false;
105}
106
107static inline bool soc_intel_is_glk(void)
108{
109	return false;
110}
111
112static inline bool soc_intel_is_cml(void)
113{
114	return false;
115}
116#endif
117
118 #endif /* _SND_SOC_INTEL_QUIRKS_H */