Unverified Commit 22247e40 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: Intel: boards: updates for 6.10 - part1

Merge series from Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>:

This series from Brent Lu adds common helpers and board configurations
to reduce the number of quirks.
parents 6c26dac5 61cafaea
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -624,6 +624,7 @@ config SND_SOC_INTEL_SOF_DA7219_MACH
	select SND_SOC_MAX98357A
	select SND_SOC_MAX98373_I2C
	select SND_SOC_DMIC
	select SND_SOC_INTEL_SOF_BOARD_HELPERS
	select SND_SOC_INTEL_SOF_MAXIM_COMMON
	select SND_SOC_INTEL_SOF_SSP_COMMON
	help
+96 −50
Original line number Diff line number Diff line
@@ -74,6 +74,11 @@ static int dmic_init(struct snd_soc_pcm_runtime *rtd)
 * DAI Link Helpers
 */

enum sof_dmic_be_type {
	SOF_DMIC_01,
	SOF_DMIC_16K,
};

/* DEFAULT_LINK_ORDER: the order used in sof_rt5682 */
#define DEFAULT_LINK_ORDER	SOF_LINK_ORDER(SOF_LINK_CODEC, \
					SOF_LINK_DMIC01,       \
@@ -97,13 +102,13 @@ static struct snd_soc_dai_link_component platform_component[] = {
	}
};

int sof_intel_board_set_codec_link(struct device *dev,
				   struct snd_soc_dai_link *link, int be_id,
				   enum sof_ssp_codec codec_type, int ssp_codec)
static int set_ssp_codec_link(struct device *dev, struct snd_soc_dai_link *link,
			      int be_id, enum sof_ssp_codec codec_type,
			      int ssp_codec)
{
	struct snd_soc_dai_link_component *cpus;

	dev_dbg(dev, "link %d: codec %s, ssp %d\n", be_id,
	dev_dbg(dev, "link %d: ssp codec %s, ssp %d\n", be_id,
		sof_ssp_get_codec_name(codec_type), ssp_codec);

	/* link name */
@@ -144,11 +149,9 @@ int sof_intel_board_set_codec_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_codec_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

int sof_intel_board_set_dmic_link(struct device *dev,
				  struct snd_soc_dai_link *link, int be_id,
				  enum sof_dmic_be_type be_type)
static int set_dmic_link(struct device *dev, struct snd_soc_dai_link *link,
			 int be_id, enum sof_dmic_be_type be_type)
{
	struct snd_soc_dai_link_component *cpus;

@@ -196,16 +199,14 @@ int sof_intel_board_set_dmic_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_dmic_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

int sof_intel_board_set_intel_hdmi_link(struct device *dev,
					struct snd_soc_dai_link *link, int be_id,
					int hdmi_id, bool idisp_codec)
static int set_idisp_hdmi_link(struct device *dev, struct snd_soc_dai_link *link,
			       int be_id, int hdmi_id, bool idisp_codec)
{
	struct snd_soc_dai_link_component *cpus, *codecs;

	dev_dbg(dev, "link %d: intel hdmi, hdmi id %d, idisp codec %d\n",
		be_id, hdmi_id, idisp_codec);
	dev_dbg(dev, "link %d: idisp hdmi %d, idisp codec %d\n", be_id, hdmi_id,
		idisp_codec);

	/* link name */
	link->name = devm_kasprintf(dev, GFP_KERNEL, "iDisp%d", hdmi_id);
@@ -256,11 +257,9 @@ int sof_intel_board_set_intel_hdmi_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_intel_hdmi_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

int sof_intel_board_set_ssp_amp_link(struct device *dev,
				     struct snd_soc_dai_link *link, int be_id,
				     enum sof_ssp_codec amp_type, int ssp_amp)
static int set_ssp_amp_link(struct device *dev, struct snd_soc_dai_link *link,
			    int be_id, enum sof_ssp_codec amp_type, int ssp_amp)
{
	struct snd_soc_dai_link_component *cpus;

@@ -298,11 +297,9 @@ int sof_intel_board_set_ssp_amp_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_ssp_amp_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

int sof_intel_board_set_bt_link(struct device *dev,
				struct snd_soc_dai_link *link, int be_id,
				int ssp_bt)
static int set_bt_offload_link(struct device *dev, struct snd_soc_dai_link *link,
			       int be_id, int ssp_bt)
{
	struct snd_soc_dai_link_component *cpus;

@@ -341,11 +338,9 @@ int sof_intel_board_set_bt_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_bt_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

int sof_intel_board_set_hdmi_in_link(struct device *dev,
				     struct snd_soc_dai_link *link, int be_id,
				     int ssp_hdmi)
static int set_hdmi_in_link(struct device *dev, struct snd_soc_dai_link *link,
			    int be_id, int ssp_hdmi)
{
	struct snd_soc_dai_link_component *cpus;

@@ -383,7 +378,6 @@ int sof_intel_board_set_hdmi_in_link(struct device *dev,

	return 0;
}
EXPORT_SYMBOL_NS(sof_intel_board_set_hdmi_in_link, SND_SOC_INTEL_SOF_BOARD_HELPERS);

static int calculate_num_links(struct sof_card_private *ctx)
{
@@ -427,6 +421,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
	int ret;
	int ssp_hdmi_in = 0;
	unsigned long link_order, link;
	unsigned long link_ids, be_id;

	num_links = calculate_num_links(ctx);

@@ -440,22 +435,34 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
	else
		link_order = DEFAULT_LINK_ORDER;

	dev_dbg(dev, "create dai links, link_order 0x%lx\n", link_order);
	if (ctx->link_id_overwrite)
		link_ids = ctx->link_id_overwrite;
	else
		link_ids = 0;

	dev_dbg(dev, "create dai links, link_order 0x%lx, id_overwrite 0x%lx\n",
		link_order, link_ids);

	while (link_order) {
		link = link_order & SOF_LINK_ORDER_MASK;
		link_order >>= SOF_LINK_ORDER_SHIFT;

		if (ctx->link_id_overwrite) {
			be_id = link_ids & SOF_LINK_IDS_MASK;
			link_ids >>= SOF_LINK_IDS_SHIFT;
		} else {
			/* use array index as link id */
			be_id = idx;
		}

		switch (link) {
		case SOF_LINK_CODEC:
			/* headphone codec */
			if (ctx->codec_type == CODEC_NONE)
				continue;

			ret = sof_intel_board_set_codec_link(dev, &links[idx],
							     idx,
							     ctx->codec_type,
							     ctx->ssp_codec);
			ret = set_ssp_codec_link(dev, &links[idx], be_id,
						 ctx->codec_type, ctx->ssp_codec);
			if (ret) {
				dev_err(dev, "fail to set codec link, ret %d\n",
					ret);
@@ -471,8 +478,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
				continue;

			/* at least we have dmic01 */
			ret = sof_intel_board_set_dmic_link(dev, &links[idx],
							    idx, SOF_DMIC_01);
			ret = set_dmic_link(dev, &links[idx], be_id, SOF_DMIC_01);
			if (ret) {
				dev_err(dev, "fail to set dmic01 link, ret %d\n",
					ret);
@@ -487,8 +493,8 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
				continue;

			/* set up 2 BE links at most */
			ret = sof_intel_board_set_dmic_link(dev, &links[idx],
							    idx, SOF_DMIC_16K);
			ret = set_dmic_link(dev, &links[idx], be_id,
					    SOF_DMIC_16K);
			if (ret) {
				dev_err(dev, "fail to set dmic16k link, ret %d\n",
					ret);
@@ -500,9 +506,8 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
		case SOF_LINK_IDISP_HDMI:
			/* idisp HDMI */
			for (i = 1; i <= ctx->hdmi_num; i++) {
				ret = sof_intel_board_set_intel_hdmi_link(dev,
									  &links[idx],
									  idx, i,
				ret = set_idisp_hdmi_link(dev, &links[idx],
							  be_id, i,
							  ctx->hdmi.idisp_codec);
				if (ret) {
					dev_err(dev, "fail to set hdmi link, ret %d\n",
@@ -511,6 +516,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
				}

				idx++;
				be_id++;
			}
			break;
		case SOF_LINK_AMP:
@@ -518,10 +524,8 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
			if (ctx->amp_type == CODEC_NONE)
				continue;

			ret = sof_intel_board_set_ssp_amp_link(dev, &links[idx],
							       idx,
							       ctx->amp_type,
							       ctx->ssp_amp);
			ret = set_ssp_amp_link(dev, &links[idx], be_id,
					       ctx->amp_type, ctx->ssp_amp);
			if (ret) {
				dev_err(dev, "fail to set amp link, ret %d\n",
					ret);
@@ -536,7 +540,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
			if (!ctx->bt_offload_present)
				continue;

			ret = sof_intel_board_set_bt_link(dev, &links[idx], idx,
			ret = set_bt_offload_link(dev, &links[idx], be_id,
						  ctx->ssp_bt);
			if (ret) {
				dev_err(dev, "fail to set bt link, ret %d\n",
@@ -549,9 +553,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
		case SOF_LINK_HDMI_IN:
			/* HDMI-In */
			for_each_set_bit(ssp_hdmi_in, &ctx->ssp_mask_hdmi_in, 32) {
				ret = sof_intel_board_set_hdmi_in_link(dev,
								       &links[idx],
								       idx,
				ret = set_hdmi_in_link(dev, &links[idx], be_id,
						       ssp_hdmi_in);
				if (ret) {
					dev_err(dev, "fail to set hdmi-in link, ret %d\n",
@@ -560,6 +562,7 @@ int sof_intel_board_set_dai_link(struct device *dev, struct snd_soc_card *card,
				}

				idx++;
				be_id++;
			}
			break;
		case SOF_LINK_NONE:
@@ -584,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)
{
+73 −24
Original line number Diff line number Diff line
@@ -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,
@@ -33,6 +71,31 @@ enum {
	 (((k6) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 5)) | \
	 (((k7) & SOF_LINK_ORDER_MASK) << (SOF_LINK_ORDER_SHIFT * 6)))

#define SOF_LINK_IDS_MASK	(0xF)
#define SOF_LINK_IDS_SHIFT	(4)

#define SOF_LINK_IDS(k1, k2, k3, k4, k5, k6, k7) \
	((((k1) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 0)) | \
	 (((k2) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 1)) | \
	 (((k3) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 2)) | \
	 (((k4) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 3)) | \
	 (((k5) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 4)) | \
	 (((k6) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 5)) | \
	 (((k7) & SOF_LINK_IDS_MASK) << (SOF_LINK_IDS_SHIFT * 6)))

/*
 * sof_da7219_private: private data for da7219 machine driver
 *
 * @is_jsl_board: true for JSL boards
 * @mclk_en: true for mclk pin is connected
 * @pll_bypass: true for PLL bypass mode
 */
struct sof_da7219_private {
	bool is_jsl_board;
	bool mclk_en;
	bool pll_bypass;
};

/*
 * sof_rt5682_private: private data for rt5682 machine driver
 *
@@ -61,6 +124,8 @@ struct sof_rt5682_private {
 * @codec_link: pointer to headset codec dai link
 * @amp_link: pointer to speaker amplifier dai link
 * @link_order_overwrite: custom DAI link order
 * @link_id_overwrite: custom DAI link ID
 * @da7219: private data for da7219 machine driver
 * @rt5682: private data for rt5682 machine driver
 */
struct sof_card_private {
@@ -84,39 +149,23 @@ struct sof_card_private {
	struct snd_soc_dai_link *amp_link;

	unsigned long link_order_overwrite;
	/*
	 * A variable stores id for all BE DAI links, use SOF_LINK_IDS macro to
	 * build the value; use DAI link array index as id if zero.
	 */
	unsigned long link_id_overwrite;

	union {
		struct sof_da7219_private da7219;
		struct sof_rt5682_private rt5682;
	};
};

enum sof_dmic_be_type {
	SOF_DMIC_01,
	SOF_DMIC_16K,
};

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);

int sof_intel_board_set_codec_link(struct device *dev,
				   struct snd_soc_dai_link *link, int be_id,
				   enum sof_ssp_codec codec_type, int ssp_codec);
int sof_intel_board_set_dmic_link(struct device *dev,
				  struct snd_soc_dai_link *link, int be_id,
				  enum sof_dmic_be_type be_type);
int sof_intel_board_set_intel_hdmi_link(struct device *dev,
					struct snd_soc_dai_link *link, int be_id,
					int hdmi_id, bool idisp_codec);
int sof_intel_board_set_ssp_amp_link(struct device *dev,
				     struct snd_soc_dai_link *link, int be_id,
				     enum sof_ssp_codec amp_type, int ssp_amp);
int sof_intel_board_set_bt_link(struct device *dev,
				struct snd_soc_dai_link *link, int be_id,
				int ssp_bt);
int sof_intel_board_set_hdmi_in_link(struct device *dev,
				     struct snd_soc_dai_link *link, int be_id,
				     int ssp_hdmi);
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);
+16 −56
Original line number Diff line number Diff line
@@ -22,23 +22,6 @@
#include "../common/soc-intel-quirks.h"
#include "sof_board_helpers.h"
#include "sof_maxim_common.h"
#include "sof_ssp_common.h"

#define SOF_CS42L42_SSP_CODEC(quirk)		((quirk) & GENMASK(2, 0))
#define SOF_CS42L42_SSP_CODEC_MASK		(GENMASK(2, 0))
#define SOF_CS42L42_SSP_AMP_SHIFT		4
#define SOF_CS42L42_SSP_AMP_MASK		(GENMASK(6, 4))
#define SOF_CS42L42_SSP_AMP(quirk)	\
	(((quirk) << SOF_CS42L42_SSP_AMP_SHIFT) & SOF_CS42L42_SSP_AMP_MASK)
#define SOF_CS42L42_NUM_HDMIDEV_SHIFT		7
#define SOF_CS42L42_NUM_HDMIDEV_MASK		(GENMASK(9, 7))
#define SOF_CS42L42_NUM_HDMIDEV(quirk)	\
	(((quirk) << SOF_CS42L42_NUM_HDMIDEV_SHIFT) & SOF_CS42L42_NUM_HDMIDEV_MASK)
#define SOF_BT_OFFLOAD_PRESENT			BIT(25)
#define SOF_CS42L42_SSP_BT_SHIFT		26
#define SOF_CS42L42_SSP_BT_MASK			(GENMASK(28, 26))
#define SOF_CS42L42_SSP_BT(quirk)	\
	(((quirk) << SOF_CS42L42_SSP_BT_SHIFT) & SOF_CS42L42_SSP_BT_MASK)

static struct snd_soc_jack_pin jack_pins[] = {
	{
@@ -52,7 +35,7 @@ static struct snd_soc_jack_pin jack_pins[] = {
};

/* Default: SSP2 */
static unsigned long sof_cs42l42_quirk = SOF_CS42L42_SSP_CODEC(2);
static unsigned long sof_cs42l42_quirk = SOF_SSP_PORT_CODEC(2);

static int sof_cs42l42_init(struct snd_soc_pcm_runtime *rtd)
{
@@ -229,48 +212,26 @@ static int sof_audio_probe(struct platform_device *pdev)
	struct sof_card_private *ctx;
	int ret;

	ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
	if (!ctx)
		return -ENOMEM;

	if (pdev->id_entry && pdev->id_entry->driver_data)
		sof_cs42l42_quirk = (unsigned long)pdev->id_entry->driver_data;

	ctx->codec_type = sof_ssp_detect_codec_type(&pdev->dev);
	ctx->amp_type = sof_ssp_detect_amp_type(&pdev->dev);
	dev_dbg(&pdev->dev, "sof_cs42l42_quirk = %lx\n", sof_cs42l42_quirk);

	/* initialize ctx with board quirk */
	ctx = sof_intel_board_get_ctx(&pdev->dev, sof_cs42l42_quirk);
	if (!ctx)
		return -ENOMEM;

	if (soc_intel_is_glk()) {
		ctx->dmic_be_num = 1;
		ctx->hdmi_num = 3;

		/* overwrite the DAI link order for GLK boards */
		ctx->link_order_overwrite = GLK_LINK_ORDER;
	} else {
		ctx->dmic_be_num = 2;
		ctx->hdmi_num = (sof_cs42l42_quirk & SOF_CS42L42_NUM_HDMIDEV_MASK) >>
			 SOF_CS42L42_NUM_HDMIDEV_SHIFT;
		/* default number of HDMI DAI's */
		if (!ctx->hdmi_num)
			ctx->hdmi_num = 3;
	}

	if (mach->mach_params.codec_mask & IDISP_CODEC_MASK)
		ctx->hdmi.idisp_codec = true;

	dev_dbg(&pdev->dev, "sof_cs42l42_quirk = %lx\n", sof_cs42l42_quirk);

	/* port number of peripherals attached to ssp interface */
	ctx->ssp_bt = (sof_cs42l42_quirk & SOF_CS42L42_SSP_BT_MASK) >>
			SOF_CS42L42_SSP_BT_SHIFT;

	ctx->ssp_amp = (sof_cs42l42_quirk & SOF_CS42L42_SSP_AMP_MASK) >>
			SOF_CS42L42_SSP_AMP_SHIFT;

	ctx->ssp_codec = sof_cs42l42_quirk & SOF_CS42L42_SSP_CODEC_MASK;

	if (sof_cs42l42_quirk & SOF_BT_OFFLOAD_PRESENT)
		ctx->bt_offload_present = true;

	/* update dai_link */
	ret = sof_card_dai_links_create(&pdev->dev, &sof_audio_card_cs42l42, ctx);
	if (ret)
@@ -293,21 +254,21 @@ static int sof_audio_probe(struct platform_device *pdev)
static const struct platform_device_id board_ids[] = {
	{
		.name = "glk_cs4242_mx98357a",
		.driver_data = (kernel_ulong_t)(SOF_CS42L42_SSP_CODEC(2) |
					SOF_CS42L42_SSP_AMP(1)),
		.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(2) |
					SOF_SSP_PORT_AMP(1)),
	},
	{
		.name = "jsl_cs4242_mx98360a",
		.driver_data = (kernel_ulong_t)(SOF_CS42L42_SSP_CODEC(0) |
					SOF_CS42L42_SSP_AMP(1)),
		.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(0) |
					SOF_SSP_PORT_AMP(1)),
	},
	{
		.name = "adl_mx98360a_cs4242",
		.driver_data = (kernel_ulong_t)(SOF_CS42L42_SSP_CODEC(0) |
				SOF_CS42L42_SSP_AMP(1) |
				SOF_CS42L42_NUM_HDMIDEV(4) |
		.driver_data = (kernel_ulong_t)(SOF_SSP_PORT_CODEC(0) |
					SOF_SSP_PORT_AMP(1) |
					SOF_NUM_IDISP_HDMI(4) |
					SOF_BT_OFFLOAD_PRESENT |
				SOF_CS42L42_SSP_BT(2)),
					SOF_SSP_PORT_BT_OFFLOAD(2)),
	},
	{ }
};
@@ -329,4 +290,3 @@ MODULE_AUTHOR("Brent Lu <brent.lu@intel.com>");
MODULE_LICENSE("GPL");
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_BOARD_HELPERS);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_MAXIM_COMMON);
MODULE_IMPORT_NS(SND_SOC_INTEL_SOF_SSP_COMMON);
+131 −279

File changed.

Preview size limit exceeded, changes collapsed.

Loading