Lines Matching +full:dmic +full:- +full:codec
1 // SPDX-License-Identifier: GPL-2.0-only
3 // Copyright(c) 2021-2022 Intel Corporation
17 #include <sound/soc-acpi.h>
18 #include <sound/soc-component.h>
23 MODULE_PARM_DESC(i2s_test, "Probe I2S test-board and skip all other I2S boards");
57 if (mach->quirk_data == NULL) in dmi_match_quirk()
60 dmi_table = (struct dmi_system_id *)mach->quirk_data; in dmi_match_quirk()
72 /* supported I2S board codec configurations */
80 .tplg_filename = "rt286-tplg.bin",
88 .tplg_filename = "nau8825-tplg.bin",
96 .tplg_filename = "ssm4567-tplg.bin",
104 .tplg_filename = "max98357a-tplg.bin",
118 .tplg_filename = "rt286-tplg.bin",
128 .tplg_filename = "rt298-tplg.bin",
136 .tplg_filename = "max98927-tplg.bin",
145 .tplg_filename = "rt5514-tplg.bin",
153 .tplg_filename = "rt5663-tplg.bin",
161 .tplg_filename = "max98373-tplg.bin",
169 .tplg_filename = "max98357a-tplg.bin",
177 .tplg_filename = "da7219-tplg.bin",
185 .tplg_filename = "es8336-tplg.bin",
197 .tplg_filename = "rt298-tplg.bin",
206 .tplg_filename = "tdf8532-tplg.bin",
214 .tplg_filename = "max98357a-tplg.bin",
222 .tplg_filename = "da7219-tplg.bin",
234 .tplg_filename = "rt298-tplg.bin",
246 .tplg_filename = "rt274-tplg.bin",
254 .tplg_filename = "rt5682-tplg.bin",
266 .tplg_filename = "rt298-tplg.bin",
274 .tplg_filename = "rt274-tplg.bin",
286 .tplg_filename = "rt274-tplg.bin",
294 .tplg_filename = "rt298-tplg.bin",
302 .tplg_filename = "rt1308-tplg.bin",
310 .tplg_filename = "es8336-tplg.bin",
322 .tplg_filename = "pcm3168a-tplg.bin",
333 .tplg_filename = "i2s-test-tplg.bin",
340 .tplg_filename = "i2s-test-tplg.bin",
347 .tplg_filename = "i2s-test-tplg.bin",
354 .tplg_filename = "i2s-test-tplg.bin",
361 .tplg_filename = "i2s-test-tplg.bin",
368 .tplg_filename = "i2s-test-tplg.bin",
404 id = adev->base.pci->device; in avs_get_i2s_boards()
423 ret = avs_probe_platform_register(adev, "probe-platform"); in avs_register_probe_board()
427 mach.mach_params.platform = "probe-platform"; in avs_register_probe_board()
432 dev_err(adev->dev, "probe board register failed\n"); in avs_register_probe_board()
436 ret = devm_add_action(adev->dev, board_pdev_unregister, board); in avs_register_probe_board()
446 struct platform_device *codec, *board; in avs_register_dmic_board() local
450 if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_PDM, -1, -1, -1)) { in avs_register_dmic_board()
451 dev_dbg(adev->dev, "no DMIC endpoints present\n"); in avs_register_dmic_board()
455 codec = platform_device_register_simple("dmic-codec", PLATFORM_DEVID_NONE, NULL, 0); in avs_register_dmic_board()
456 if (IS_ERR(codec)) { in avs_register_dmic_board()
457 dev_err(adev->dev, "dmic codec register failed\n"); in avs_register_dmic_board()
458 return PTR_ERR(codec); in avs_register_dmic_board()
461 ret = devm_add_action(adev->dev, board_pdev_unregister, codec); in avs_register_dmic_board()
463 platform_device_unregister(codec); in avs_register_dmic_board()
467 ret = avs_dmic_platform_register(adev, "dmic-platform"); in avs_register_dmic_board()
471 mach.tplg_filename = "dmic-tplg.bin"; in avs_register_dmic_board()
472 mach.mach_params.platform = "dmic-platform"; in avs_register_dmic_board()
477 dev_err(adev->dev, "dmic board register failed\n"); in avs_register_dmic_board()
481 ret = devm_add_action(adev->dev, board_pdev_unregister, board); in avs_register_dmic_board()
497 num_ssps = adev->hw_cfg.i2s_caps.ctrl_count; in avs_register_i2s_board()
498 if (fls(mach->mach_params.i2s_link_mask) > num_ssps) { in avs_register_i2s_board()
499 dev_err(adev->dev, "Platform supports %d SSPs but board %s requires SSP%ld\n", in avs_register_i2s_board()
500 num_ssps, mach->drv_name, in avs_register_i2s_board()
501 (unsigned long)__fls(mach->mach_params.i2s_link_mask)); in avs_register_i2s_board()
502 return -ENODEV; in avs_register_i2s_board()
505 name = devm_kasprintf(adev->dev, GFP_KERNEL, "%s.%d-platform", mach->drv_name, in avs_register_i2s_board()
506 mach->mach_params.i2s_link_mask); in avs_register_i2s_board()
508 return -ENOMEM; in avs_register_i2s_board()
510 ret = avs_i2s_platform_register(adev, name, mach->mach_params.i2s_link_mask, mach->pdata); in avs_register_i2s_board()
514 mach->mach_params.platform = name; in avs_register_i2s_board()
516 board = platform_device_register_data(NULL, mach->drv_name, mach->mach_params.i2s_link_mask, in avs_register_i2s_board()
519 dev_err(adev->dev, "ssp board register failed\n"); in avs_register_i2s_board()
523 ret = devm_add_action(adev->dev, board_pdev_unregister, board); in avs_register_i2s_board()
538 if (!acpi_nhlt_find_endpoint(ACPI_NHLT_LINKTYPE_SSP, -1, -1, -1)) { in avs_register_i2s_boards()
539 dev_dbg(adev->dev, "no I2S endpoints present\n"); in avs_register_i2s_boards()
546 num_ssps = adev->hw_cfg.i2s_caps.ctrl_count; in avs_register_i2s_boards()
555 dev_warn(adev->dev, "register i2s %s failed: %d\n", mach->drv_name, in avs_register_i2s_boards()
563 dev_dbg(adev->dev, "no I2S endpoints supported\n"); in avs_register_i2s_boards()
567 for (mach = boards->machs; mach->id[0]; mach++) { in avs_register_i2s_boards()
568 if (!acpi_dev_present(mach->id, mach->uid, -1)) in avs_register_i2s_boards()
571 if (mach->machine_quirk) in avs_register_i2s_boards()
572 if (!mach->machine_quirk(mach)) in avs_register_i2s_boards()
577 dev_warn(adev->dev, "register i2s %s failed: %d\n", mach->drv_name, ret); in avs_register_i2s_boards()
583 static int avs_register_hda_board(struct avs_dev *adev, struct hda_codec *codec) in avs_register_hda_board() argument
587 struct hdac_device *hdev = &codec->core; in avs_register_hda_board()
591 pname = devm_kasprintf(adev->dev, GFP_KERNEL, "%s-platform", dev_name(&hdev->dev)); in avs_register_hda_board()
593 return -ENOMEM; in avs_register_hda_board()
599 mach.pdata = codec; in avs_register_hda_board()
601 mach.tplg_filename = devm_kasprintf(adev->dev, GFP_KERNEL, "hda-%08x-tplg.bin", in avs_register_hda_board()
602 hdev->vendor_id); in avs_register_hda_board()
604 return -ENOMEM; in avs_register_hda_board()
606 id = adev->base.core.idx * HDA_MAX_CODECS + hdev->addr; in avs_register_hda_board()
610 dev_err(adev->dev, "hda board register failed\n"); in avs_register_hda_board()
614 ret = devm_add_action(adev->dev, board_pdev_unregister, board); in avs_register_hda_board()
625 struct hdac_bus *bus = &adev->base.core; in avs_register_hda_boards()
629 if (!bus->num_codecs) { in avs_register_hda_boards()
630 dev_dbg(adev->dev, "no HDA endpoints present\n"); in avs_register_hda_boards()
634 list_for_each_entry(hdev, &bus->codec_list, list) { in avs_register_hda_boards()
635 struct hda_codec *codec; in avs_register_hda_boards() local
637 codec = dev_to_hda_codec(&hdev->dev); in avs_register_hda_boards()
639 ret = avs_register_hda_board(adev, codec); in avs_register_hda_boards()
641 dev_warn(adev->dev, "register hda-%08x failed: %d\n", in avs_register_hda_boards()
642 codec->core.vendor_id, ret); in avs_register_hda_boards()
655 dev_warn(adev->dev, "enumerate PROBE endpoints failed: %d\n", ret); in avs_register_all_boards()
660 dev_warn(adev->dev, "enumerate DMIC endpoints failed: %d\n", in avs_register_all_boards()
665 dev_warn(adev->dev, "enumerate I2S endpoints failed: %d\n", in avs_register_all_boards()
670 dev_warn(adev->dev, "enumerate HDA endpoints failed: %d\n", in avs_register_all_boards()
678 snd_soc_unregister_component(adev->dev); in avs_unregister_all_boards()