mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2026-05-03 19:26:01 -04:00
ASoC: Intel: board_helpers: support sof_card_private initialization
Add a helper function for machine drivers to initialize common part of sof_card_private structure. Also unify the macros of board quirks for the initialization. Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com> Signed-off-by: Brent Lu <brent.lu@intel.com> Signed-off-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com> Link: https://msgid.link/r/20240325221059.206042-8-pierre-louis.bossart@linux.intel.com Signed-off-by: Mark Brown <broonie@kernel.org>
This commit is contained in:
@@ -587,6 +587,49 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
|
||||
}
|
||||
EXPORT_SYMBOL_NS(sof_intel_board_set_dai_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);
|
||||
|
||||
struct sof_card_private *
|
||||
sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk)
|
||||
{
|
||||
struct sof_card_private *ctx;
|
||||
|
||||
dev_dbg(dev, "create ctx, board_quirk 0x%lx\n", board_quirk);
|
||||
|
||||
ctx = devm_kzalloc(dev, sizeof(struct sof_card_private), GFP_KERNEL);
|
||||
if (!ctx)
|
||||
return NULL;
|
||||
|
||||
ctx->codec_type = sof_ssp_detect_codec_type(dev);
|
||||
ctx->amp_type = sof_ssp_detect_amp_type(dev);
|
||||
|
||||
ctx->dmic_be_num = 2;
|
||||
ctx->hdmi_num = (board_quirk & SOF_NUM_IDISP_HDMI_MASK) >>
|
||||
SOF_NUM_IDISP_HDMI_SHIFT;
|
||||
/* default number of HDMI DAI's */
|
||||
if (!ctx->hdmi_num)
|
||||
ctx->hdmi_num = 3;
|
||||
|
||||
/* port number/mask of peripherals attached to ssp interface */
|
||||
if (ctx->codec_type != CODEC_NONE)
|
||||
ctx->ssp_codec = (board_quirk & SOF_SSP_PORT_CODEC_MASK) >>
|
||||
SOF_SSP_PORT_CODEC_SHIFT;
|
||||
|
||||
if (ctx->amp_type != CODEC_NONE)
|
||||
ctx->ssp_amp = (board_quirk & SOF_SSP_PORT_AMP_MASK) >>
|
||||
SOF_SSP_PORT_AMP_SHIFT;
|
||||
|
||||
if (board_quirk & SOF_BT_OFFLOAD_PRESENT) {
|
||||
ctx->bt_offload_present = true;
|
||||
ctx->ssp_bt = (board_quirk & SOF_SSP_PORT_BT_OFFLOAD_MASK) >>
|
||||
SOF_SSP_PORT_BT_OFFLOAD_SHIFT;
|
||||
}
|
||||
|
||||
ctx->ssp_mask_hdmi_in = (board_quirk & SOF_SSP_MASK_HDMI_CAPTURE_MASK) >>
|
||||
SOF_SSP_MASK_HDMI_CAPTURE_SHIFT;
|
||||
|
||||
return ctx;
|
||||
}
|
||||
EXPORT_SYMBOL_NS(sof_intel_board_get_ctx, SND_SOC_INTEL_SOF_BOARD_HELPERS);
|
||||
|
||||
struct snd_soc_dai *get_codec_dai_by_name(struct snd_soc_pcm_runtime *rtd,
|
||||
const char * const dai_name[], int num_dais)
|
||||
{
|
||||
|
||||
@@ -10,6 +10,44 @@
|
||||
#include "sof_hdmi_common.h"
|
||||
#include "sof_ssp_common.h"
|
||||
|
||||
/*
|
||||
* Common board quirks: from bit 8 to 31, LSB 8 bits reserved for machine
|
||||
* drivers
|
||||
*/
|
||||
|
||||
/* SSP port number for headphone codec: 3 bits */
|
||||
#define SOF_SSP_PORT_CODEC_SHIFT 8
|
||||
#define SOF_SSP_PORT_CODEC_MASK (GENMASK(10, 8))
|
||||
#define SOF_SSP_PORT_CODEC(quirk) \
|
||||
(((quirk) << SOF_SSP_PORT_CODEC_SHIFT) & SOF_SSP_PORT_CODEC_MASK)
|
||||
|
||||
/* SSP port number for speaker amplifier: 3 bits */
|
||||
#define SOF_SSP_PORT_AMP_SHIFT 11
|
||||
#define SOF_SSP_PORT_AMP_MASK (GENMASK(13, 11))
|
||||
#define SOF_SSP_PORT_AMP(quirk) \
|
||||
(((quirk) << SOF_SSP_PORT_AMP_SHIFT) & SOF_SSP_PORT_AMP_MASK)
|
||||
|
||||
/* SSP port number for BT audio offload: 3 bits */
|
||||
#define SOF_SSP_PORT_BT_OFFLOAD_SHIFT 14
|
||||
#define SOF_SSP_PORT_BT_OFFLOAD_MASK (GENMASK(16, 14))
|
||||
#define SOF_SSP_PORT_BT_OFFLOAD(quirk) \
|
||||
(((quirk) << SOF_SSP_PORT_BT_OFFLOAD_SHIFT) & SOF_SSP_PORT_BT_OFFLOAD_MASK)
|
||||
|
||||
/* SSP port mask for HDMI capture: 6 bits */
|
||||
#define SOF_SSP_MASK_HDMI_CAPTURE_SHIFT 17
|
||||
#define SOF_SSP_MASK_HDMI_CAPTURE_MASK (GENMASK(22, 17))
|
||||
#define SOF_SSP_MASK_HDMI_CAPTURE(quirk) \
|
||||
(((quirk) << SOF_SSP_MASK_HDMI_CAPTURE_SHIFT) & SOF_SSP_MASK_HDMI_CAPTURE_MASK)
|
||||
|
||||
/* Number of idisp HDMI BE link: 3 bits */
|
||||
#define SOF_NUM_IDISP_HDMI_SHIFT 23
|
||||
#define SOF_NUM_IDISP_HDMI_MASK (GENMASK(25, 23))
|
||||
#define SOF_NUM_IDISP_HDMI(quirk) \
|
||||
(((quirk) << SOF_NUM_IDISP_HDMI_SHIFT) & SOF_NUM_IDISP_HDMI_MASK)
|
||||
|
||||
/* Board uses BT audio offload */
|
||||
#define SOF_BT_OFFLOAD_PRESENT BIT(26)
|
||||
|
||||
enum {
|
||||
SOF_LINK_NONE = 0,
|
||||
SOF_LINK_CODEC,
|
||||
@@ -111,6 +149,8 @@ struct sof_card_private {
|
||||
int sof_intel_board_card_late_probe(struct snd_soc_card *card);
|
||||
int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
|
||||
struct sof_card_private *ctx);
|
||||
struct sof_card_private *
|
||||
sof_intel_board_get_ctx(struct device *dev, unsigned long board_quirk);
|
||||
|
||||
struct snd_soc_dai *get_codec_dai_by_name(struct snd_soc_pcm_runtime *rtd,
|
||||
const char * const dai_name[], int num_dais);
|
||||
|
||||
Reference in New Issue
Block a user