cachepc-linux

Fork of AMDESE/linux with modifications for CachePC side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-linux
Log | Files | Refs | README | LICENSE | sfeed.txt

mt6797-mt6351.c (6451B)


      1// SPDX-License-Identifier: GPL-2.0
      2//
      3// mt6797-mt6351.c  --  MT6797 MT6351 ALSA SoC machine driver
      4//
      5// Copyright (c) 2018 MediaTek Inc.
      6// Author: KaiChieh Chuang <kaichieh.chuang@mediatek.com>
      7
      8#include <linux/module.h>
      9#include <sound/soc.h>
     10
     11#include "mt6797-afe-common.h"
     12
     13SND_SOC_DAILINK_DEFS(playback_1,
     14	DAILINK_COMP_ARRAY(COMP_CPU("DL1")),
     15	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     16	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     17
     18SND_SOC_DAILINK_DEFS(playback_2,
     19	DAILINK_COMP_ARRAY(COMP_CPU("DL2")),
     20	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     21	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     22
     23SND_SOC_DAILINK_DEFS(playback_3,
     24	DAILINK_COMP_ARRAY(COMP_CPU("DL3")),
     25	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     26	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     27
     28SND_SOC_DAILINK_DEFS(capture_1,
     29	DAILINK_COMP_ARRAY(COMP_CPU("UL1")),
     30	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     31	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     32
     33SND_SOC_DAILINK_DEFS(capture_2,
     34	DAILINK_COMP_ARRAY(COMP_CPU("UL2")),
     35	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     36	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     37
     38SND_SOC_DAILINK_DEFS(capture_3,
     39	DAILINK_COMP_ARRAY(COMP_CPU("UL3")),
     40	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     41	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     42
     43SND_SOC_DAILINK_DEFS(capture_mono_1,
     44	DAILINK_COMP_ARRAY(COMP_CPU("UL_MONO_1")),
     45	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     46	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     47
     48SND_SOC_DAILINK_DEFS(hostless_lpbk,
     49	DAILINK_COMP_ARRAY(COMP_CPU("Hostless LPBK DAI")),
     50	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     51	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     52
     53SND_SOC_DAILINK_DEFS(hostless_speech,
     54	DAILINK_COMP_ARRAY(COMP_CPU("Hostless Speech DAI")),
     55	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     56	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     57
     58SND_SOC_DAILINK_DEFS(primary_codec,
     59	DAILINK_COMP_ARRAY(COMP_CPU("ADDA")),
     60	DAILINK_COMP_ARRAY(COMP_CODEC(NULL, "mt6351-snd-codec-aif1")),
     61	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     62
     63SND_SOC_DAILINK_DEFS(pcm1,
     64	DAILINK_COMP_ARRAY(COMP_CPU("PCM 1")),
     65	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     66	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     67
     68SND_SOC_DAILINK_DEFS(pcm2,
     69	DAILINK_COMP_ARRAY(COMP_CPU("PCM 2")),
     70	DAILINK_COMP_ARRAY(COMP_DUMMY()),
     71	DAILINK_COMP_ARRAY(COMP_EMPTY()));
     72
     73static struct snd_soc_dai_link mt6797_mt6351_dai_links[] = {
     74	/* FE */
     75	{
     76		.name = "Playback_1",
     77		.stream_name = "Playback_1",
     78		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
     79			    SND_SOC_DPCM_TRIGGER_PRE},
     80		.dynamic = 1,
     81		.dpcm_playback = 1,
     82		SND_SOC_DAILINK_REG(playback_1),
     83	},
     84	{
     85		.name = "Playback_2",
     86		.stream_name = "Playback_2",
     87		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
     88			    SND_SOC_DPCM_TRIGGER_PRE},
     89		.dynamic = 1,
     90		.dpcm_playback = 1,
     91		SND_SOC_DAILINK_REG(playback_2),
     92	},
     93	{
     94		.name = "Playback_3",
     95		.stream_name = "Playback_3",
     96		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
     97			    SND_SOC_DPCM_TRIGGER_PRE},
     98		.dynamic = 1,
     99		.dpcm_playback = 1,
    100		SND_SOC_DAILINK_REG(playback_3),
    101	},
    102	{
    103		.name = "Capture_1",
    104		.stream_name = "Capture_1",
    105		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    106			    SND_SOC_DPCM_TRIGGER_PRE},
    107		.dynamic = 1,
    108		.dpcm_capture = 1,
    109		SND_SOC_DAILINK_REG(capture_1),
    110	},
    111	{
    112		.name = "Capture_2",
    113		.stream_name = "Capture_2",
    114		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    115			    SND_SOC_DPCM_TRIGGER_PRE},
    116		.dynamic = 1,
    117		.dpcm_capture = 1,
    118		SND_SOC_DAILINK_REG(capture_2),
    119	},
    120	{
    121		.name = "Capture_3",
    122		.stream_name = "Capture_3",
    123		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    124			    SND_SOC_DPCM_TRIGGER_PRE},
    125		.dynamic = 1,
    126		.dpcm_capture = 1,
    127		SND_SOC_DAILINK_REG(capture_3),
    128	},
    129	{
    130		.name = "Capture_Mono_1",
    131		.stream_name = "Capture_Mono_1",
    132		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    133			    SND_SOC_DPCM_TRIGGER_PRE},
    134		.dynamic = 1,
    135		.dpcm_capture = 1,
    136		SND_SOC_DAILINK_REG(capture_mono_1),
    137	},
    138	{
    139		.name = "Hostless_LPBK",
    140		.stream_name = "Hostless_LPBK",
    141		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    142			    SND_SOC_DPCM_TRIGGER_PRE},
    143		.dynamic = 1,
    144		.dpcm_playback = 1,
    145		.dpcm_capture = 1,
    146		.ignore_suspend = 1,
    147		SND_SOC_DAILINK_REG(hostless_lpbk),
    148	},
    149	{
    150		.name = "Hostless_Speech",
    151		.stream_name = "Hostless_Speech",
    152		.trigger = {SND_SOC_DPCM_TRIGGER_PRE,
    153			    SND_SOC_DPCM_TRIGGER_PRE},
    154		.dynamic = 1,
    155		.dpcm_playback = 1,
    156		.dpcm_capture = 1,
    157		.ignore_suspend = 1,
    158		SND_SOC_DAILINK_REG(hostless_speech),
    159	},
    160	/* BE */
    161	{
    162		.name = "Primary Codec",
    163		.no_pcm = 1,
    164		.dpcm_playback = 1,
    165		.dpcm_capture = 1,
    166		.ignore_suspend = 1,
    167		SND_SOC_DAILINK_REG(primary_codec),
    168	},
    169	{
    170		.name = "PCM 1",
    171		.no_pcm = 1,
    172		.dpcm_playback = 1,
    173		.dpcm_capture = 1,
    174		.ignore_suspend = 1,
    175		SND_SOC_DAILINK_REG(pcm1),
    176	},
    177	{
    178		.name = "PCM 2",
    179		.no_pcm = 1,
    180		.dpcm_playback = 1,
    181		.dpcm_capture = 1,
    182		.ignore_suspend = 1,
    183		SND_SOC_DAILINK_REG(pcm2),
    184	},
    185};
    186
    187static struct snd_soc_card mt6797_mt6351_card = {
    188	.name = "mt6797-mt6351",
    189	.owner = THIS_MODULE,
    190	.dai_link = mt6797_mt6351_dai_links,
    191	.num_links = ARRAY_SIZE(mt6797_mt6351_dai_links),
    192};
    193
    194static int mt6797_mt6351_dev_probe(struct platform_device *pdev)
    195{
    196	struct snd_soc_card *card = &mt6797_mt6351_card;
    197	struct device_node *platform_node, *codec_node;
    198	struct snd_soc_dai_link *dai_link;
    199	int ret, i;
    200
    201	card->dev = &pdev->dev;
    202
    203	platform_node = of_parse_phandle(pdev->dev.of_node,
    204					 "mediatek,platform", 0);
    205	if (!platform_node) {
    206		dev_err(&pdev->dev, "Property 'platform' missing or invalid\n");
    207		return -EINVAL;
    208	}
    209	for_each_card_prelinks(card, i, dai_link) {
    210		if (dai_link->platforms->name)
    211			continue;
    212		dai_link->platforms->of_node = platform_node;
    213	}
    214
    215	codec_node = of_parse_phandle(pdev->dev.of_node,
    216				      "mediatek,audio-codec", 0);
    217	if (!codec_node) {
    218		dev_err(&pdev->dev,
    219			"Property 'audio-codec' missing or invalid\n");
    220		return -EINVAL;
    221	}
    222	for_each_card_prelinks(card, i, dai_link) {
    223		if (dai_link->codecs->name)
    224			continue;
    225		dai_link->codecs->of_node = codec_node;
    226	}
    227
    228	ret = devm_snd_soc_register_card(&pdev->dev, card);
    229	if (ret)
    230		dev_err(&pdev->dev, "%s snd_soc_register_card fail %d\n",
    231			__func__, ret);
    232
    233	return ret;
    234}
    235
    236#ifdef CONFIG_OF
    237static const struct of_device_id mt6797_mt6351_dt_match[] = {
    238	{.compatible = "mediatek,mt6797-mt6351-sound",},
    239	{}
    240};
    241#endif
    242
    243static struct platform_driver mt6797_mt6351_driver = {
    244	.driver = {
    245		.name = "mt6797-mt6351",
    246#ifdef CONFIG_OF
    247		.of_match_table = mt6797_mt6351_dt_match,
    248#endif
    249	},
    250	.probe = mt6797_mt6351_dev_probe,
    251};
    252
    253module_platform_driver(mt6797_mt6351_driver);
    254
    255/* Module information */
    256MODULE_DESCRIPTION("MT6797 MT6351 ALSA SoC machine driver");
    257MODULE_AUTHOR("KaiChieh Chuang <kaichieh.chuang@mediatek.com>");
    258MODULE_LICENSE("GPL v2");
    259MODULE_ALIAS("mt6797 mt6351 soc card");
    260