| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145 |
- /* SPDX-License-Identifier: (GPL-2.0-only OR BSD-3-Clause) */
- /*
- * This file is provided under a dual BSD/GPLv2 license. When using or
- * redistributing this file, you may do so under either license.
- *
- * Copyright(c) 2021 Advanced Micro Devices, Inc. All rights reserved.
- *
- * Author: Ajit Kumar Pandey <AjitKumar.Pandey@amd.com>
- */
- #ifndef __ACP_MACH_H
- #define __ACP_MACH_H
- #include <sound/core.h>
- #include <sound/jack.h>
- #include <sound/pcm_params.h>
- #include <sound/soc-dapm.h>
- #include <linux/input.h>
- #include <linux/module.h>
- #include <sound/soc.h>
- #define TDM_CHANNELS 8
- #define ACP_OPS(priv, cb) ((priv)->ops.cb)
- #define acp_get_drvdata(card) ((struct acp_card_drvdata *)(card)->drvdata)
- enum be_id {
- HEADSET_BE_ID = 0,
- AMP_BE_ID,
- DMIC_BE_ID,
- BT_BE_ID,
- };
- enum cpu_endpoints {
- NONE = 0,
- I2S_HS,
- I2S_SP,
- I2S_BT,
- DMIC,
- };
- enum codec_endpoints {
- DUMMY = 0,
- RT5682,
- RT1019,
- MAX98360A,
- RT5682S,
- NAU8825,
- NAU8821,
- MAX98388,
- ES83XX,
- };
- enum platform_end_point {
- RENOIR = 0,
- REMBRANDT,
- ACP63,
- ACP70,
- ACP71,
- };
- struct acp_mach_ops {
- int (*probe)(struct snd_soc_card *card);
- int (*configure_link)(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link);
- int (*configure_widgets)(struct snd_soc_card *card);
- int (*suspend_pre)(struct snd_soc_card *card);
- int (*resume_post)(struct snd_soc_card *card);
- };
- struct acp_card_drvdata {
- unsigned int hs_cpu_id;
- unsigned int amp_cpu_id;
- unsigned int bt_cpu_id;
- unsigned int dmic_cpu_id;
- unsigned int hs_codec_id;
- unsigned int amp_codec_id;
- unsigned int bt_codec_id;
- unsigned int dmic_codec_id;
- unsigned int dai_fmt;
- unsigned int platform;
- struct clk *wclk;
- struct clk *bclk;
- struct acp_mach_ops ops;
- struct snd_soc_acpi_mach *acpi_mach;
- void *mach_priv;
- bool soc_mclk;
- bool tdm_mode;
- };
- int acp_sofdsp_dai_links_create(struct snd_soc_card *card);
- int acp_legacy_dai_links_create(struct snd_soc_card *card);
- extern const struct dmi_system_id acp_quirk_table[];
- static inline int acp_ops_probe(struct snd_soc_card *card)
- {
- int ret = 1;
- struct acp_card_drvdata *priv = acp_get_drvdata(card);
- if (ACP_OPS(priv, probe))
- ret = ACP_OPS(priv, probe)(card);
- return ret;
- }
- static inline int acp_ops_configure_link(struct snd_soc_card *card,
- struct snd_soc_dai_link *dai_link)
- {
- int ret = 1;
- struct acp_card_drvdata *priv = acp_get_drvdata(card);
- if (ACP_OPS(priv, configure_link))
- ret = ACP_OPS(priv, configure_link)(card, dai_link);
- return ret;
- }
- static inline int acp_ops_configure_widgets(struct snd_soc_card *card)
- {
- int ret = 1;
- struct acp_card_drvdata *priv = acp_get_drvdata(card);
- if (ACP_OPS(priv, configure_widgets))
- ret = ACP_OPS(priv, configure_widgets)(card);
- return ret;
- }
- static inline int acp_ops_suspend_pre(struct snd_soc_card *card)
- {
- int ret = 1;
- struct acp_card_drvdata *priv = acp_get_drvdata(card);
- if (ACP_OPS(priv, suspend_pre))
- ret = ACP_OPS(priv, suspend_pre)(card);
- return ret;
- }
- static inline int acp_ops_resume_post(struct snd_soc_card *card)
- {
- int ret = 1;
- struct acp_card_drvdata *priv = acp_get_drvdata(card);
- if (ACP_OPS(priv, resume_post))
- ret = ACP_OPS(priv, resume_post)(card);
- return ret;
- }
- #endif
|