ps-mach.c 1.7 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. // SPDX-License-Identifier: GPL-2.0+
  2. /*
  3. * Machine driver for AMD Pink Sardine platform using DMIC
  4. *
  5. * Copyright 2022 Advanced Micro Devices, Inc.
  6. */
  7. #include <sound/soc.h>
  8. #include <sound/soc-dapm.h>
  9. #include <linux/module.h>
  10. #include <sound/pcm.h>
  11. #include <sound/pcm_params.h>
  12. #include <linux/io.h>
  13. #include <linux/dmi.h>
  14. #include "acp63.h"
  15. #define DRV_NAME "acp_ps_mach"
  16. SND_SOC_DAILINK_DEF(acp63_pdm,
  17. DAILINK_COMP_ARRAY(COMP_CPU("acp_ps_pdm_dma.0")));
  18. SND_SOC_DAILINK_DEF(dmic_codec,
  19. DAILINK_COMP_ARRAY(COMP_CODEC("dmic-codec.0",
  20. "dmic-hifi")));
  21. SND_SOC_DAILINK_DEF(pdm_platform,
  22. DAILINK_COMP_ARRAY(COMP_PLATFORM("acp_ps_pdm_dma.0")));
  23. static struct snd_soc_dai_link acp63_dai_pdm[] = {
  24. {
  25. .name = "acp63-dmic-capture",
  26. .stream_name = "DMIC capture",
  27. .capture_only = 1,
  28. SND_SOC_DAILINK_REG(acp63_pdm, dmic_codec, pdm_platform),
  29. },
  30. };
  31. static struct snd_soc_card acp63_card = {
  32. .name = "acp63",
  33. .owner = THIS_MODULE,
  34. .dai_link = acp63_dai_pdm,
  35. .num_links = 1,
  36. };
  37. static int acp63_probe(struct platform_device *pdev)
  38. {
  39. struct acp63_pdm *machine = NULL;
  40. struct snd_soc_card *card;
  41. int ret;
  42. platform_set_drvdata(pdev, &acp63_card);
  43. card = platform_get_drvdata(pdev);
  44. acp63_card.dev = &pdev->dev;
  45. snd_soc_card_set_drvdata(card, machine);
  46. ret = devm_snd_soc_register_card(&pdev->dev, card);
  47. if (ret) {
  48. return dev_err_probe(&pdev->dev, ret,
  49. "snd_soc_register_card(%s) failed\n",
  50. card->name);
  51. }
  52. return 0;
  53. }
  54. static struct platform_driver acp63_mach_driver = {
  55. .driver = {
  56. .name = "acp_ps_mach",
  57. .pm = &snd_soc_pm_ops,
  58. },
  59. .probe = acp63_probe,
  60. };
  61. module_platform_driver(acp63_mach_driver);
  62. MODULE_AUTHOR("[email protected]");
  63. MODULE_LICENSE("GPL v2");
  64. MODULE_ALIAS("platform:" DRV_NAME);