162306a36Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0+
262306a36Sopenharmony_ci/*
362306a36Sopenharmony_ci * Machine driver for AMD Yellow Carp platform using DMIC
462306a36Sopenharmony_ci *
562306a36Sopenharmony_ci * Copyright 2021 Advanced Micro Devices, Inc.
662306a36Sopenharmony_ci */
762306a36Sopenharmony_ci
862306a36Sopenharmony_ci#include <sound/soc.h>
962306a36Sopenharmony_ci#include <sound/soc-dapm.h>
1062306a36Sopenharmony_ci#include <linux/module.h>
1162306a36Sopenharmony_ci#include <sound/pcm.h>
1262306a36Sopenharmony_ci#include <sound/pcm_params.h>
1362306a36Sopenharmony_ci#include <linux/io.h>
1462306a36Sopenharmony_ci#include <linux/dmi.h>
1562306a36Sopenharmony_ci#include <linux/acpi.h>
1662306a36Sopenharmony_ci
1762306a36Sopenharmony_ci#include "acp6x.h"
1862306a36Sopenharmony_ci
1962306a36Sopenharmony_ci#define DRV_NAME "acp_yc_mach"
2062306a36Sopenharmony_ci
2162306a36Sopenharmony_ciSND_SOC_DAILINK_DEF(acp6x_pdm,
2262306a36Sopenharmony_ci		    DAILINK_COMP_ARRAY(COMP_CPU("acp_yc_pdm_dma.0")));
2362306a36Sopenharmony_ci
2462306a36Sopenharmony_ciSND_SOC_DAILINK_DEF(dmic_codec,
2562306a36Sopenharmony_ci		    DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec.0",
2662306a36Sopenharmony_ci						  "dmic-hifi")));
2762306a36Sopenharmony_ci
2862306a36Sopenharmony_ciSND_SOC_DAILINK_DEF(pdm_platform,
2962306a36Sopenharmony_ci		    DAILINK_COMP_ARRAY(COMP_PLATFORM("acp_yc_pdm_dma.0")));
3062306a36Sopenharmony_ci
3162306a36Sopenharmony_cistatic struct snd_soc_dai_link acp6x_dai_pdm[] = {
3262306a36Sopenharmony_ci	{
3362306a36Sopenharmony_ci		.name = "acp6x-dmic-capture",
3462306a36Sopenharmony_ci		.stream_name = "DMIC capture",
3562306a36Sopenharmony_ci		.capture_only = 1,
3662306a36Sopenharmony_ci		SND_SOC_DAILINK_REG(acp6x_pdm, dmic_codec, pdm_platform),
3762306a36Sopenharmony_ci	},
3862306a36Sopenharmony_ci};
3962306a36Sopenharmony_ci
4062306a36Sopenharmony_cistatic struct snd_soc_card acp6x_card = {
4162306a36Sopenharmony_ci	.name = "acp6x",
4262306a36Sopenharmony_ci	.owner = THIS_MODULE,
4362306a36Sopenharmony_ci	.dai_link = acp6x_dai_pdm,
4462306a36Sopenharmony_ci	.num_links = 1,
4562306a36Sopenharmony_ci};
4662306a36Sopenharmony_ci
4762306a36Sopenharmony_cistatic const struct dmi_system_id yc_acp_quirk_table[] = {
4862306a36Sopenharmony_ci	{
4962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
5062306a36Sopenharmony_ci		.matches = {
5162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "Dell Inc."),
5262306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Dell G15 5525"),
5362306a36Sopenharmony_ci		}
5462306a36Sopenharmony_ci	},
5562306a36Sopenharmony_ci	{
5662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
5762306a36Sopenharmony_ci		.matches = {
5862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
5962306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D0"),
6062306a36Sopenharmony_ci		}
6162306a36Sopenharmony_ci	},
6262306a36Sopenharmony_ci	{
6362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
6462306a36Sopenharmony_ci		.matches = {
6562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
6662306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D0"),
6762306a36Sopenharmony_ci		}
6862306a36Sopenharmony_ci	},
6962306a36Sopenharmony_ci	{
7062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
7162306a36Sopenharmony_ci		.matches = {
7262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
7362306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D1"),
7462306a36Sopenharmony_ci		}
7562306a36Sopenharmony_ci	},
7662306a36Sopenharmony_ci	{
7762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
7862306a36Sopenharmony_ci		.matches = {
7962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
8062306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D2"),
8162306a36Sopenharmony_ci		}
8262306a36Sopenharmony_ci	},
8362306a36Sopenharmony_ci	{
8462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
8562306a36Sopenharmony_ci		.matches = {
8662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
8762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D3"),
8862306a36Sopenharmony_ci		}
8962306a36Sopenharmony_ci	},
9062306a36Sopenharmony_ci	{
9162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
9262306a36Sopenharmony_ci		.matches = {
9362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
9462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D4"),
9562306a36Sopenharmony_ci		}
9662306a36Sopenharmony_ci	},
9762306a36Sopenharmony_ci	{
9862306a36Sopenharmony_ci		.driver_data = &acp6x_card,
9962306a36Sopenharmony_ci		.matches = {
10062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
10162306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21D5"),
10262306a36Sopenharmony_ci		}
10362306a36Sopenharmony_ci	},
10462306a36Sopenharmony_ci	{
10562306a36Sopenharmony_ci		.driver_data = &acp6x_card,
10662306a36Sopenharmony_ci		.matches = {
10762306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
10862306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CF"),
10962306a36Sopenharmony_ci		}
11062306a36Sopenharmony_ci	},
11162306a36Sopenharmony_ci	{
11262306a36Sopenharmony_ci		.driver_data = &acp6x_card,
11362306a36Sopenharmony_ci		.matches = {
11462306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
11562306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CG"),
11662306a36Sopenharmony_ci		}
11762306a36Sopenharmony_ci	},
11862306a36Sopenharmony_ci	{
11962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
12062306a36Sopenharmony_ci		.matches = {
12162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
12262306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CQ"),
12362306a36Sopenharmony_ci		}
12462306a36Sopenharmony_ci	},
12562306a36Sopenharmony_ci	{
12662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
12762306a36Sopenharmony_ci		.matches = {
12862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
12962306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CR"),
13062306a36Sopenharmony_ci		}
13162306a36Sopenharmony_ci	},
13262306a36Sopenharmony_ci	{
13362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
13462306a36Sopenharmony_ci		.matches = {
13562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
13662306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CM"),
13762306a36Sopenharmony_ci		}
13862306a36Sopenharmony_ci	},
13962306a36Sopenharmony_ci	{
14062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
14162306a36Sopenharmony_ci		.matches = {
14262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
14362306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CN"),
14462306a36Sopenharmony_ci		}
14562306a36Sopenharmony_ci	},
14662306a36Sopenharmony_ci	{
14762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
14862306a36Sopenharmony_ci		.matches = {
14962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
15062306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CH"),
15162306a36Sopenharmony_ci		}
15262306a36Sopenharmony_ci	},
15362306a36Sopenharmony_ci	{
15462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
15562306a36Sopenharmony_ci		.matches = {
15662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
15762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CJ"),
15862306a36Sopenharmony_ci		}
15962306a36Sopenharmony_ci	},
16062306a36Sopenharmony_ci	{
16162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
16262306a36Sopenharmony_ci		.matches = {
16362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
16462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CK"),
16562306a36Sopenharmony_ci		}
16662306a36Sopenharmony_ci	},
16762306a36Sopenharmony_ci	{
16862306a36Sopenharmony_ci		.driver_data = &acp6x_card,
16962306a36Sopenharmony_ci		.matches = {
17062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
17162306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21CL"),
17262306a36Sopenharmony_ci		}
17362306a36Sopenharmony_ci	},
17462306a36Sopenharmony_ci	{
17562306a36Sopenharmony_ci		.driver_data = &acp6x_card,
17662306a36Sopenharmony_ci		.matches = {
17762306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
17862306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21EF"),
17962306a36Sopenharmony_ci		}
18062306a36Sopenharmony_ci	},
18162306a36Sopenharmony_ci	{
18262306a36Sopenharmony_ci		.driver_data = &acp6x_card,
18362306a36Sopenharmony_ci		.matches = {
18462306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
18562306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21EM"),
18662306a36Sopenharmony_ci		}
18762306a36Sopenharmony_ci	},
18862306a36Sopenharmony_ci	{
18962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
19062306a36Sopenharmony_ci		.matches = {
19162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
19262306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21EN"),
19362306a36Sopenharmony_ci		}
19462306a36Sopenharmony_ci	},
19562306a36Sopenharmony_ci	{
19662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
19762306a36Sopenharmony_ci		.matches = {
19862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
19962306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21HY"),
20062306a36Sopenharmony_ci		}
20162306a36Sopenharmony_ci	},
20262306a36Sopenharmony_ci	{
20362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
20462306a36Sopenharmony_ci		.matches = {
20562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
20662306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21J2"),
20762306a36Sopenharmony_ci		}
20862306a36Sopenharmony_ci	},
20962306a36Sopenharmony_ci	{
21062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
21162306a36Sopenharmony_ci		.matches = {
21262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
21362306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21J0"),
21462306a36Sopenharmony_ci		}
21562306a36Sopenharmony_ci	},
21662306a36Sopenharmony_ci	{
21762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
21862306a36Sopenharmony_ci		.matches = {
21962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
22062306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21J5"),
22162306a36Sopenharmony_ci		}
22262306a36Sopenharmony_ci	},
22362306a36Sopenharmony_ci	{
22462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
22562306a36Sopenharmony_ci		.matches = {
22662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
22762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "21J6"),
22862306a36Sopenharmony_ci		}
22962306a36Sopenharmony_ci	},
23062306a36Sopenharmony_ci	{
23162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
23262306a36Sopenharmony_ci		.matches = {
23362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
23462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82QF"),
23562306a36Sopenharmony_ci		}
23662306a36Sopenharmony_ci	},
23762306a36Sopenharmony_ci	{
23862306a36Sopenharmony_ci		.driver_data = &acp6x_card,
23962306a36Sopenharmony_ci		.matches = {
24062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
24162306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82TL"),
24262306a36Sopenharmony_ci		}
24362306a36Sopenharmony_ci	},
24462306a36Sopenharmony_ci	{
24562306a36Sopenharmony_ci		.driver_data = &acp6x_card,
24662306a36Sopenharmony_ci		.matches = {
24762306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
24862306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82UG"),
24962306a36Sopenharmony_ci		}
25062306a36Sopenharmony_ci	},
25162306a36Sopenharmony_ci	{
25262306a36Sopenharmony_ci		.driver_data = &acp6x_card,
25362306a36Sopenharmony_ci		.matches = {
25462306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
25562306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82UU"),
25662306a36Sopenharmony_ci		}
25762306a36Sopenharmony_ci	},
25862306a36Sopenharmony_ci	{
25962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
26062306a36Sopenharmony_ci		.matches = {
26162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
26262306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82V2"),
26362306a36Sopenharmony_ci		}
26462306a36Sopenharmony_ci	},
26562306a36Sopenharmony_ci	{
26662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
26762306a36Sopenharmony_ci		.matches = {
26862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
26962306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "82YM"),
27062306a36Sopenharmony_ci		}
27162306a36Sopenharmony_ci	},
27262306a36Sopenharmony_ci	{
27362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
27462306a36Sopenharmony_ci		.matches = {
27562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "LENOVO"),
27662306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "83AS"),
27762306a36Sopenharmony_ci		}
27862306a36Sopenharmony_ci	},
27962306a36Sopenharmony_ci	{
28062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
28162306a36Sopenharmony_ci		.matches = {
28262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
28362306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "UM5302TA"),
28462306a36Sopenharmony_ci		}
28562306a36Sopenharmony_ci	},
28662306a36Sopenharmony_ci	{
28762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
28862306a36Sopenharmony_ci		.matches = {
28962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
29062306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "M5402RA"),
29162306a36Sopenharmony_ci		}
29262306a36Sopenharmony_ci	},
29362306a36Sopenharmony_ci	{
29462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
29562306a36Sopenharmony_ci		.matches = {
29662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
29762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "M6400RC"),
29862306a36Sopenharmony_ci		}
29962306a36Sopenharmony_ci	},
30062306a36Sopenharmony_ci	{
30162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
30262306a36Sopenharmony_ci		.matches = {
30362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
30462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "M3402RA"),
30562306a36Sopenharmony_ci		}
30662306a36Sopenharmony_ci	},
30762306a36Sopenharmony_ci	{
30862306a36Sopenharmony_ci		.driver_data = &acp6x_card,
30962306a36Sopenharmony_ci		.matches = {
31062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
31162306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "M6500RC"),
31262306a36Sopenharmony_ci		}
31362306a36Sopenharmony_ci	},
31462306a36Sopenharmony_ci	{
31562306a36Sopenharmony_ci		.driver_data = &acp6x_card,
31662306a36Sopenharmony_ci		.matches = {
31762306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "ASUSTeK COMPUTER INC."),
31862306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "E1504FA"),
31962306a36Sopenharmony_ci		}
32062306a36Sopenharmony_ci	},
32162306a36Sopenharmony_ci	{
32262306a36Sopenharmony_ci		.driver_data = &acp6x_card,
32362306a36Sopenharmony_ci		.matches = {
32462306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
32562306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 B7ED"),
32662306a36Sopenharmony_ci		}
32762306a36Sopenharmony_ci	},
32862306a36Sopenharmony_ci	{
32962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
33062306a36Sopenharmony_ci		.matches = {
33162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "Micro-Star International Co., Ltd."),
33262306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Bravo 15 C7VF"),
33362306a36Sopenharmony_ci		}
33462306a36Sopenharmony_ci	},
33562306a36Sopenharmony_ci	{
33662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
33762306a36Sopenharmony_ci		.matches = {
33862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "Alienware"),
33962306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Alienware m17 R5 AMD"),
34062306a36Sopenharmony_ci		}
34162306a36Sopenharmony_ci	},
34262306a36Sopenharmony_ci	{
34362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
34462306a36Sopenharmony_ci		.matches = {
34562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
34662306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Redmi Book Pro 14 2022"),
34762306a36Sopenharmony_ci		}
34862306a36Sopenharmony_ci	},
34962306a36Sopenharmony_ci	{
35062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
35162306a36Sopenharmony_ci		.matches = {
35262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "TIMI"),
35362306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Redmi Book Pro 15 2022"),
35462306a36Sopenharmony_ci		}
35562306a36Sopenharmony_ci	},
35662306a36Sopenharmony_ci	{
35762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
35862306a36Sopenharmony_ci		.matches = {
35962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "Razer"),
36062306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Blade 14 (2022) - RZ09-0427"),
36162306a36Sopenharmony_ci		}
36262306a36Sopenharmony_ci	},
36362306a36Sopenharmony_ci	{
36462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
36562306a36Sopenharmony_ci		.matches = {
36662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "RB"),
36762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "Swift SFA16-41"),
36862306a36Sopenharmony_ci		}
36962306a36Sopenharmony_ci	},
37062306a36Sopenharmony_ci	{
37162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
37262306a36Sopenharmony_ci		.matches = {
37362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "IRBIS"),
37462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "15NBC1011"),
37562306a36Sopenharmony_ci		}
37662306a36Sopenharmony_ci	},
37762306a36Sopenharmony_ci	{
37862306a36Sopenharmony_ci		.driver_data = &acp6x_card,
37962306a36Sopenharmony_ci		.matches = {
38062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
38162306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_NAME, "OMEN by HP Gaming Laptop 16z-n000"),
38262306a36Sopenharmony_ci		}
38362306a36Sopenharmony_ci	},
38462306a36Sopenharmony_ci	{
38562306a36Sopenharmony_ci		.driver_data = &acp6x_card,
38662306a36Sopenharmony_ci		.matches = {
38762306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
38862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8A42"),
38962306a36Sopenharmony_ci		}
39062306a36Sopenharmony_ci	},
39162306a36Sopenharmony_ci	{
39262306a36Sopenharmony_ci		.driver_data = &acp6x_card,
39362306a36Sopenharmony_ci		.matches = {
39462306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
39562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8A43"),
39662306a36Sopenharmony_ci		}
39762306a36Sopenharmony_ci	},
39862306a36Sopenharmony_ci	{
39962306a36Sopenharmony_ci		.driver_data = &acp6x_card,
40062306a36Sopenharmony_ci		.matches = {
40162306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
40262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8A22"),
40362306a36Sopenharmony_ci		}
40462306a36Sopenharmony_ci	},
40562306a36Sopenharmony_ci	{
40662306a36Sopenharmony_ci		.driver_data = &acp6x_card,
40762306a36Sopenharmony_ci		.matches = {
40862306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
40962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8A3E"),
41062306a36Sopenharmony_ci		}
41162306a36Sopenharmony_ci	},
41262306a36Sopenharmony_ci	{
41362306a36Sopenharmony_ci		.driver_data = &acp6x_card,
41462306a36Sopenharmony_ci		.matches = {
41562306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
41662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8B2F"),
41762306a36Sopenharmony_ci		}
41862306a36Sopenharmony_ci	},
41962306a36Sopenharmony_ci	{
42062306a36Sopenharmony_ci		.driver_data = &acp6x_card,
42162306a36Sopenharmony_ci		.matches = {
42262306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "HP"),
42362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "8BD6"),
42462306a36Sopenharmony_ci		}
42562306a36Sopenharmony_ci	},
42662306a36Sopenharmony_ci	{
42762306a36Sopenharmony_ci		.driver_data = &acp6x_card,
42862306a36Sopenharmony_ci		.matches = {
42962306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "MECHREVO"),
43062306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_NAME, "MRID6"),
43162306a36Sopenharmony_ci		}
43262306a36Sopenharmony_ci	},
43362306a36Sopenharmony_ci	{
43462306a36Sopenharmony_ci		.driver_data = &acp6x_card,
43562306a36Sopenharmony_ci		.matches = {
43662306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "System76"),
43762306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_VERSION, "pang12"),
43862306a36Sopenharmony_ci		}
43962306a36Sopenharmony_ci	},
44062306a36Sopenharmony_ci	{
44162306a36Sopenharmony_ci		.driver_data = &acp6x_card,
44262306a36Sopenharmony_ci		.matches = {
44362306a36Sopenharmony_ci			DMI_MATCH(DMI_BOARD_VENDOR, "System76"),
44462306a36Sopenharmony_ci			DMI_MATCH(DMI_PRODUCT_VERSION, "pang13"),
44562306a36Sopenharmony_ci		}
44662306a36Sopenharmony_ci	},
44762306a36Sopenharmony_ci	{}
44862306a36Sopenharmony_ci};
44962306a36Sopenharmony_ci
45062306a36Sopenharmony_cistatic int acp6x_probe(struct platform_device *pdev)
45162306a36Sopenharmony_ci{
45262306a36Sopenharmony_ci	const struct dmi_system_id *dmi_id;
45362306a36Sopenharmony_ci	struct acp6x_pdm *machine = NULL;
45462306a36Sopenharmony_ci	struct snd_soc_card *card;
45562306a36Sopenharmony_ci	struct acpi_device *adev;
45662306a36Sopenharmony_ci	int ret;
45762306a36Sopenharmony_ci
45862306a36Sopenharmony_ci	/* check the parent device's firmware node has _DSD or not */
45962306a36Sopenharmony_ci	adev = ACPI_COMPANION(pdev->dev.parent);
46062306a36Sopenharmony_ci	if (adev) {
46162306a36Sopenharmony_ci		const union acpi_object *obj;
46262306a36Sopenharmony_ci
46362306a36Sopenharmony_ci		if (!acpi_dev_get_property(adev, "AcpDmicConnected", ACPI_TYPE_INTEGER, &obj) &&
46462306a36Sopenharmony_ci		    obj->integer.value == 1)
46562306a36Sopenharmony_ci			platform_set_drvdata(pdev, &acp6x_card);
46662306a36Sopenharmony_ci	}
46762306a36Sopenharmony_ci
46862306a36Sopenharmony_ci	/* check for any DMI overrides */
46962306a36Sopenharmony_ci	dmi_id = dmi_first_match(yc_acp_quirk_table);
47062306a36Sopenharmony_ci	if (dmi_id)
47162306a36Sopenharmony_ci		platform_set_drvdata(pdev, dmi_id->driver_data);
47262306a36Sopenharmony_ci
47362306a36Sopenharmony_ci	card = platform_get_drvdata(pdev);
47462306a36Sopenharmony_ci	if (!card)
47562306a36Sopenharmony_ci		return -ENODEV;
47662306a36Sopenharmony_ci	dev_info(&pdev->dev, "Enabling ACP DMIC support via %s", dmi_id ? "DMI" : "ACPI");
47762306a36Sopenharmony_ci	acp6x_card.dev = &pdev->dev;
47862306a36Sopenharmony_ci
47962306a36Sopenharmony_ci	snd_soc_card_set_drvdata(card, machine);
48062306a36Sopenharmony_ci	ret = devm_snd_soc_register_card(&pdev->dev, card);
48162306a36Sopenharmony_ci	if (ret) {
48262306a36Sopenharmony_ci		return dev_err_probe(&pdev->dev, ret,
48362306a36Sopenharmony_ci				"snd_soc_register_card(%s) failed\n",
48462306a36Sopenharmony_ci				card->name);
48562306a36Sopenharmony_ci	}
48662306a36Sopenharmony_ci	return 0;
48762306a36Sopenharmony_ci}
48862306a36Sopenharmony_ci
48962306a36Sopenharmony_cistatic struct platform_driver acp6x_mach_driver = {
49062306a36Sopenharmony_ci	.driver = {
49162306a36Sopenharmony_ci		.name = "acp_yc_mach",
49262306a36Sopenharmony_ci		.pm = &snd_soc_pm_ops,
49362306a36Sopenharmony_ci	},
49462306a36Sopenharmony_ci	.probe = acp6x_probe,
49562306a36Sopenharmony_ci};
49662306a36Sopenharmony_ci
49762306a36Sopenharmony_cimodule_platform_driver(acp6x_mach_driver);
49862306a36Sopenharmony_ci
49962306a36Sopenharmony_ciMODULE_AUTHOR("Vijendar.Mukunda@amd.com");
50062306a36Sopenharmony_ciMODULE_LICENSE("GPL v2");
50162306a36Sopenharmony_ciMODULE_ALIAS("platform:" DRV_NAME);
502