Unverified Commit 8aa49ba7 authored by Mark Brown's avatar Mark Brown
Browse files

ASoC: SOF: Add support for MICFIL PDM interface

Merge series from Daniel Baluta <daniel.baluta@oss.nxp.com>:

This is used for configuring MICFIL PDM with i.MX8MPlus. Tested
with 8MIC-RPI-MX8 microphone array.
parents 696e2d9b 89ef4208
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -51,4 +51,11 @@ struct sof_ipc_dai_sai_params {
	uint16_t tdm_slot_width;
	uint16_t reserved2;	/* alignment */
} __packed;

/* MICFIL Configuration Request - SOF_IPC_DAI_MICFIL_CONFIG */
struct sof_ipc_dai_micfil_params {
	uint32_t pdm_rate;
	uint32_t pdm_ch;
} __packed;

#endif
+2 −0
Original line number Diff line number Diff line
@@ -88,6 +88,7 @@ enum sof_ipc_dai_type {
	SOF_DAI_AMD_HS,			/**< Amd HS */
	SOF_DAI_AMD_SP_VIRTUAL,		/**< AMD ACP SP VIRTUAL */
	SOF_DAI_AMD_HS_VIRTUAL,		/**< AMD ACP HS VIRTUAL */
	SOF_DAI_IMX_MICFIL,		/** < i.MX MICFIL PDM */
};

/* general purpose DAI configuration */
@@ -117,6 +118,7 @@ struct sof_ipc_dai_config {
		struct sof_ipc_dai_acpdmic_params acpdmic;
		struct sof_ipc_dai_acp_params acphs;
		struct sof_ipc_dai_mtk_afe_params afe;
		struct sof_ipc_dai_micfil_params micfil;
	};
} __packed;

+4 −0
Original line number Diff line number Diff line
@@ -213,4 +213,8 @@
#define SOF_TKN_AMD_ACPI2S_CH			1701
#define SOF_TKN_AMD_ACPI2S_TDM_MODE		1702

/* MICFIL PDM */
#define SOF_TKN_IMX_MICFIL_RATE			2000
#define SOF_TKN_IMX_MICFIL_CH			2001

#endif
+7 −0
Original line number Diff line number Diff line
@@ -313,6 +313,13 @@ static struct snd_soc_dai_driver imx8m_dai[] = {
		.channels_max = 32,
	},
},
{
	.name = "micfil",
	.capture = {
		.channels_min = 1,
		.channels_max = 8,
	},
},
};

static int imx8m_dsp_set_power_state(struct snd_sof_dev *sdev,
+11 −0
Original line number Diff line number Diff line
@@ -384,6 +384,17 @@ static int sof_ipc3_pcm_dai_link_fixup(struct snd_soc_pcm_runtime *rtd,
		dev_dbg(component->dev, "AMD_DMIC channels_min: %d channels_max: %d\n",
			channels->min, channels->max);
		break;
	case SOF_DAI_IMX_MICFIL:
		rate->min = private->dai_config->micfil.pdm_rate;
		rate->max = private->dai_config->micfil.pdm_rate;
		channels->min = private->dai_config->micfil.pdm_ch;
		channels->max = private->dai_config->micfil.pdm_ch;

		dev_dbg(component->dev,
			"MICFIL PDM rate_min: %d rate_max: %d\n", rate->min, rate->max);
		dev_dbg(component->dev, "MICFIL PDM channels_min: %d channels_max: %d\n",
			channels->min, channels->max);
		break;
	default:
		dev_err(component->dev, "Invalid DAI type %d\n", private->dai_config->type);
		break;
Loading