Lines Matching +full:fixed +full:- +full:links

1 // SPDX-License-Identifier: GPL-2.0-only
6 * sof_ssp_amp.c - ASoc Machine driver for Intel platforms
74 /* BE ID defined in sof-tgl-rt1308-hdmi-ssp.m4 */
86 struct snd_soc_dai_link *links; in sof_card_dai_links_create() local
94 links = devm_kcalloc(dev, sof_ssp_amp_card.num_links, in sof_card_dai_links_create()
96 if (!links) in sof_card_dai_links_create()
99 /* HDMI-In SSP */ in sof_card_dai_links_create()
106 /* the topology supports HDMI-IN uses fixed BE ID for DAI links */ in sof_card_dai_links_create()
111 ret = sof_intel_board_set_hdmi_in_link(dev, &links[id], in sof_card_dai_links_create()
124 ret = sof_intel_board_set_ssp_amp_link(dev, &links[id], be_id, in sof_card_dai_links_create()
129 /* codec-specific fields */ in sof_card_dai_links_create()
132 cs35l41_set_dai_link(&links[id]); in sof_card_dai_links_create()
135 sof_rt1308_dai_link(&links[id]); in sof_card_dai_links_create()
149 ret = sof_intel_board_set_dmic_link(dev, &links[id], be_id, in sof_card_dai_links_create()
158 /* set up 2 BE links at most */ in sof_card_dai_links_create()
160 ret = sof_intel_board_set_dmic_link(dev, &links[id], be_id, in sof_card_dai_links_create()
170 be_id = fixed_be ? (INTEL_HDMI_BE_ID + i - 1) : id; in sof_card_dai_links_create()
171 ret = sof_intel_board_set_intel_hdmi_link(dev, &links[id], be_id, in sof_card_dai_links_create()
184 ret = sof_intel_board_set_bt_link(dev, &links[id], id, port); in sof_card_dai_links_create()
191 return links; in sof_card_dai_links_create()
196 struct snd_soc_acpi_mach *mach = pdev->dev.platform_data; in sof_ssp_amp_probe()
201 ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL); in sof_ssp_amp_probe()
203 return -ENOMEM; in sof_ssp_amp_probe()
205 if (pdev->id_entry && pdev->id_entry->driver_data) in sof_ssp_amp_probe()
206 sof_ssp_amp_quirk = (unsigned long)pdev->id_entry->driver_data; in sof_ssp_amp_probe()
208 ctx->amp_type = sof_ssp_detect_amp_type(&pdev->dev); in sof_ssp_amp_probe()
210 if (dmi_check_system(chromebook_platforms) || mach->mach_params.dmic_num > 0) in sof_ssp_amp_probe()
211 ctx->dmic_be_num = 2; in sof_ssp_amp_probe()
213 ctx->dmic_be_num = 0; in sof_ssp_amp_probe()
216 ctx->ssp_mask_hdmi_in = (sof_ssp_amp_quirk & SOF_HDMI_CAPTURE_SSP_MASK_MASK) >> in sof_ssp_amp_probe()
219 ctx->ssp_bt = (sof_ssp_amp_quirk & SOF_BT_OFFLOAD_SSP_MASK) >> in sof_ssp_amp_probe()
222 ctx->ssp_amp = sof_ssp_amp_quirk & SOF_AMPLIFIER_SSP_MASK; in sof_ssp_amp_probe()
224 /* set number of dai links */ in sof_ssp_amp_probe()
225 sof_ssp_amp_card.num_links = ctx->dmic_be_num; in sof_ssp_amp_probe()
227 if (ctx->amp_type != CODEC_NONE) in sof_ssp_amp_probe()
230 if (ctx->ssp_mask_hdmi_in) in sof_ssp_amp_probe()
231 sof_ssp_amp_card.num_links += hweight32(ctx->ssp_mask_hdmi_in); in sof_ssp_amp_probe()
234 ctx->hdmi_num = (sof_ssp_amp_quirk & SOF_NO_OF_HDMI_PLAYBACK_MASK) >> in sof_ssp_amp_probe()
237 if (!ctx->hdmi_num) in sof_ssp_amp_probe()
238 ctx->hdmi_num = 3; in sof_ssp_amp_probe()
240 if (mach->mach_params.codec_mask & IDISP_CODEC_MASK) in sof_ssp_amp_probe()
241 ctx->hdmi.idisp_codec = true; in sof_ssp_amp_probe()
243 sof_ssp_amp_card.num_links += ctx->hdmi_num; in sof_ssp_amp_probe()
245 ctx->hdmi_num = 0; in sof_ssp_amp_probe()
249 ctx->bt_offload_present = true; in sof_ssp_amp_probe()
253 dai_links = sof_card_dai_links_create(&pdev->dev, ctx->amp_type, in sof_ssp_amp_probe()
254 ctx->ssp_amp, ctx->dmic_be_num, in sof_ssp_amp_probe()
255 ctx->hdmi_num, in sof_ssp_amp_probe()
256 ctx->hdmi.idisp_codec); in sof_ssp_amp_probe()
258 return -ENOMEM; in sof_ssp_amp_probe()
263 switch (ctx->amp_type) { in sof_ssp_amp_probe()
272 dev_err(&pdev->dev, "invalid amp type %d\n", ctx->amp_type); in sof_ssp_amp_probe()
273 return -EINVAL; in sof_ssp_amp_probe()
276 sof_ssp_amp_card.dev = &pdev->dev; in sof_ssp_amp_probe()
280 mach->mach_params.platform); in sof_ssp_amp_probe()
286 return devm_snd_soc_register_card(&pdev->dev, &sof_ssp_amp_card); in sof_ssp_amp_probe()