]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
ASoC: intel: split soundwire machine driver private data
authorVijendar Mukunda <Vijendar.Mukunda@amd.com>
Thu, 1 Aug 2024 09:14:29 +0000 (14:44 +0530)
committerMark Brown <broonie@kernel.org>
Thu, 1 Aug 2024 11:44:03 +0000 (12:44 +0100)
Split intel generic SoundWire machine driver private data into two
structures. One structure is generic one which can be used by other
platform machine driver and the other one is intel specific one.
Move generic machine driver private data to soc_sdw_utils.h.
Define a void pointer in generic machine driver private data structure
and assign the vendor specific structure in mc_probe() call.

Link: https://github.com/thesofproject/linux/pull/5068
Signed-off-by: Vijendar Mukunda <Vijendar.Mukunda@amd.com>
Reviewed-by: Bard Liao <yung-chuan.liao@linux.intel.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
Link: https://patch.msgid.link/20240801091446.10457-15-Vijendar.Mukunda@amd.com
Signed-off-by: Mark Brown <broonie@kernel.org>
include/sound/soc_sdw_utils.h
sound/soc/intel/boards/sof_sdw.c
sound/soc/intel/boards/sof_sdw_common.h
sound/soc/intel/boards/sof_sdw_cs42l42.c
sound/soc/intel/boards/sof_sdw_cs42l43.c
sound/soc/intel/boards/sof_sdw_hdmi.c
sound/soc/intel/boards/sof_sdw_rt5682.c
sound/soc/intel/boards/sof_sdw_rt700.c
sound/soc/intel/boards/sof_sdw_rt711.c
sound/soc/intel/boards/sof_sdw_rt_amp.c
sound/soc/intel/boards/sof_sdw_rt_sdca_jack_common.c

index 5bc2a89bced40ef46739438c6133693711b4bfba..eb713cdf4079781b81fb9d10cee71ac2a99743b7 100644 (file)
@@ -55,6 +55,16 @@ struct asoc_sdw_codec_info {
                            struct snd_soc_codec_conf **codec_conf);
 };
 
+struct asoc_sdw_mc_private {
+       struct snd_soc_card card;
+       struct snd_soc_jack sdw_headset;
+       struct device *headset_codec_dev; /* only one headset per card */
+       struct device *amp_dev1, *amp_dev2;
+       bool append_dai_type;
+       bool ignore_internal_dmic;
+       void *private;
+};
+
 int asoc_sdw_startup(struct snd_pcm_substream *substream);
 int asoc_sdw_prepare(struct snd_pcm_substream *substream);
 int asoc_sdw_prepare(struct snd_pcm_substream *substream);
index e1d2b744987fed163a472abaa7160bb85bb5e01e..236e3fab66b9eb1211a47984ea69fee23f35f7da 100644 (file)
@@ -1319,7 +1319,7 @@ static int parse_sdw_endpoints(struct snd_soc_card *card,
                               int *num_devs)
 {
        struct device *dev = card->dev;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_acpi_mach *mach = dev_get_platdata(dev);
        struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params;
        const struct snd_soc_acpi_link_adr *adr_link;
@@ -1440,7 +1440,8 @@ static int create_sdw_dailink(struct snd_soc_card *card,
                              int *be_id, struct snd_soc_codec_conf **codec_conf)
 {
        struct device *dev = card->dev;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        struct sof_sdw_endpoint *sof_end;
        int stream;
        int ret;
@@ -1519,7 +1520,7 @@ static int create_sdw_dailink(struct snd_soc_card *card,
 
                        if (cur_link != sof_end->link_mask) {
                                int link_num = ffs(sof_end->link_mask) - 1;
-                               int pin_num = ctx->sdw_pin_index[link_num]++;
+                               int pin_num = intel_ctx->sdw_pin_index[link_num]++;
 
                                cur_link = sof_end->link_mask;
 
@@ -1573,11 +1574,12 @@ static int create_sdw_dailinks(struct snd_soc_card *card,
                               struct sof_sdw_dailink *sof_dais,
                               struct snd_soc_codec_conf **codec_conf)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        int ret, i;
 
        for (i = 0; i < SDW_MAX_LINKS; i++)
-               ctx->sdw_pin_index[i] = SOC_SDW_INTEL_BIDIR_PDI_BASE;
+               intel_ctx->sdw_pin_index[i] = SOC_SDW_INTEL_BIDIR_PDI_BASE;
 
        /* generate DAI links by each sdw link */
        while (sof_dais->initialised) {
@@ -1665,7 +1667,8 @@ static int create_hdmi_dailinks(struct snd_soc_card *card,
                                int hdmi_num)
 {
        struct device *dev = card->dev;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        int i, ret;
 
        for (i = 0; i < hdmi_num; i++) {
@@ -1673,7 +1676,7 @@ static int create_hdmi_dailinks(struct snd_soc_card *card,
                char *cpu_dai_name = devm_kasprintf(dev, GFP_KERNEL, "iDisp%d Pin", i + 1);
                char *codec_name, *codec_dai_name;
 
-               if (ctx->hdmi.idisp_codec) {
+               if (intel_ctx->hdmi.idisp_codec) {
                        codec_name = "ehdaudio0D2";
                        codec_dai_name = devm_kasprintf(dev, GFP_KERNEL,
                                                        "intel-hdmi-hifi%d", i + 1);
@@ -1721,7 +1724,8 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
        struct device *dev = card->dev;
        struct snd_soc_acpi_mach *mach = dev_get_platdata(card->dev);
        int sdw_be_num = 0, ssp_num = 0, dmic_num = 0, bt_num = 0;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        struct snd_soc_acpi_mach_params *mach_params = &mach->mach_params;
        struct snd_soc_codec_conf *codec_conf;
        struct asoc_sdw_codec_info *ssp_info;
@@ -1773,7 +1777,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
        }
 
        if (mach_params->codec_mask & IDISP_CODEC_MASK)
-               ctx->hdmi.idisp_codec = true;
+               intel_ctx->hdmi.idisp_codec = true;
 
        if (sof_sdw_quirk & SOF_SDW_TGL_HDMI)
                hdmi_num = SOF_TGL_HDMI_COUNT;
@@ -1789,7 +1793,7 @@ static int sof_card_dai_links_create(struct snd_soc_card *card)
 
        dev_dbg(dev, "sdw %d, ssp %d, dmic %d, hdmi %d, bt: %d\n",
                sdw_be_num, ssp_num, dmic_num,
-               ctx->hdmi.idisp_codec ? hdmi_num : 0, bt_num);
+               intel_ctx->hdmi.idisp_codec ? hdmi_num : 0, bt_num);
 
        codec_conf = devm_kcalloc(dev, num_devs, sizeof(*codec_conf), GFP_KERNEL);
        if (!codec_conf) {
@@ -1862,7 +1866,8 @@ err_dai:
 
 static int sof_sdw_card_late_probe(struct snd_soc_card *card)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        int ret = 0;
        int i;
 
@@ -1875,7 +1880,7 @@ static int sof_sdw_card_late_probe(struct snd_soc_card *card)
                }
        }
 
-       if (ctx->hdmi.idisp_codec)
+       if (intel_ctx->hdmi.idisp_codec)
                ret = sof_sdw_hdmi_card_late_probe(card);
 
        return ret;
@@ -1934,16 +1939,22 @@ static int mc_probe(struct platform_device *pdev)
 {
        struct snd_soc_acpi_mach *mach = dev_get_platdata(&pdev->dev);
        struct snd_soc_card *card;
-       struct mc_private *ctx;
+       struct asoc_sdw_mc_private *ctx;
+       struct intel_mc_ctx *intel_ctx;
        int amp_num = 0, i;
        int ret;
 
        dev_dbg(&pdev->dev, "Entry\n");
 
+       intel_ctx = devm_kzalloc(&pdev->dev, sizeof(*intel_ctx), GFP_KERNEL);
+       if (!intel_ctx)
+               return -ENOMEM;
+
        ctx = devm_kzalloc(&pdev->dev, sizeof(*ctx), GFP_KERNEL);
        if (!ctx)
                return -ENOMEM;
 
+       ctx->private = intel_ctx;
        card = &ctx->card;
        card->dev = &pdev->dev;
        card->name = "soundwire";
index c7672dc1320ca47d3b01b563664fddcdf368893e..7954472c11bb5437ec5be2aaca4ff3a956c91d27 100644 (file)
@@ -78,16 +78,10 @@ enum {
 #define SOC_SDW_DAI_TYPE_AMP           1
 #define SOC_SDW_DAI_TYPE_MIC           2
 
-struct mc_private {
-       struct snd_soc_card card;
-       struct snd_soc_jack sdw_headset;
+struct intel_mc_ctx {
        struct sof_hdmi_private hdmi;
-       struct device *headset_codec_dev; /* only one headset per card */
-       struct device *amp_dev1, *amp_dev2;
        /* To store SDW Pin index for each SoundWire link */
        unsigned int sdw_pin_index[SDW_MAX_LINKS];
-       bool append_dai_type;
-       bool ignore_internal_dmic;
 };
 
 extern unsigned long sof_sdw_quirk;
index d28477c5046909d45b7c8f2b4609010342ba4a50..3ce2f65f994acc4612537fb3f0f73a00eea69e6c 100644 (file)
@@ -39,7 +39,7 @@ static struct snd_soc_jack_pin cs42l42_jack_pins[] = {
 int asoc_sdw_cs42l42_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_card *card = rtd->card;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_component *component;
        struct snd_soc_jack *jack;
        int ret;
index bb371b2649cf39bbf860283c908ff66505312b80..47d05fe7de534d8f8ff35657ad9e170dea3a3dd0 100644 (file)
@@ -51,7 +51,7 @@ static struct snd_soc_jack_pin sof_jack_pins[] = {
 int asoc_sdw_cs42l43_hs_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_component *component = snd_soc_rtd_to_codec(rtd, 0)->component;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(rtd->card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(rtd->card);
        struct snd_soc_jack *jack = &ctx->sdw_headset;
        struct snd_soc_card *card = rtd->card;
        int ret;
index f34fabdf9d93b13969f7092e4ed803b744ace351..4084119a9a5f21ea644657cb6d173cce884a6c5c 100644 (file)
 
 int sof_sdw_hdmi_init(struct snd_soc_pcm_runtime *rtd)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(rtd->card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(rtd->card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
        struct snd_soc_dai *dai = snd_soc_rtd_to_codec(rtd, 0);
 
-       ctx->hdmi.hdmi_comp = dai->component;
+       intel_ctx->hdmi.hdmi_comp = dai->component;
 
        return 0;
 }
 
 int sof_sdw_hdmi_card_late_probe(struct snd_soc_card *card)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct intel_mc_ctx *intel_ctx = (struct intel_mc_ctx *)ctx->private;
 
-       if (!ctx->hdmi.idisp_codec)
+       if (!intel_ctx->hdmi.idisp_codec)
                return 0;
 
-       if (!ctx->hdmi.hdmi_comp)
+       if (!intel_ctx->hdmi.hdmi_comp)
                return -EINVAL;
 
-       return hda_dsp_hdmi_build_controls(card, ctx->hdmi.hdmi_comp);
+       return hda_dsp_hdmi_build_controls(card, intel_ctx->hdmi.hdmi_comp);
 }
index 3584638e21923c88754cdc6bcd9ca30cf9fee696..7e52720e0195b072ffd71c6ee09c195cd21fdf31 100644 (file)
@@ -38,7 +38,7 @@ static struct snd_soc_jack_pin rt5682_jack_pins[] = {
 int asoc_sdw_rt5682_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_card *card = rtd->card;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_component *component;
        struct snd_soc_jack *jack;
        int ret;
index a90d69573736def1eee882e80dfb1ad862969f47..0abaaeacfd90a5d315158a23a16f786df9fcba86 100644 (file)
@@ -36,7 +36,7 @@ static struct snd_soc_jack_pin rt700_jack_pins[] = {
 int asoc_sdw_rt700_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_card *card = rtd->card;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_component *component;
        struct snd_soc_jack *jack;
        int ret;
index e4d300d7d5ef54753a48ea61ed9a348b63722307..fb5bc611b5e73b64b0a78cc1140af4ab18e4c0fa 100644 (file)
@@ -62,7 +62,7 @@ static struct snd_soc_jack_pin rt711_jack_pins[] = {
 int asoc_sdw_rt711_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_card *card = rtd->card;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_component *component;
        struct snd_soc_jack *jack;
        int ret;
@@ -113,7 +113,7 @@ int asoc_sdw_rt711_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai
 
 int asoc_sdw_rt711_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
 
        if (!ctx->headset_codec_dev)
                return 0;
@@ -129,7 +129,7 @@ int asoc_sdw_rt711_init(struct snd_soc_card *card,
                        struct asoc_sdw_codec_info *info,
                        bool playback)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct device *sdw_dev;
        int ret;
 
index 4cf392c84cc7fdea303be1856b258ac15fa5ea4d..fff746671c1d65e3be4e526a5442fe9a0e0cebd1 100644 (file)
@@ -239,7 +239,7 @@ const struct snd_soc_ops soc_sdw_rt1308_i2s_ops = {
 
 int asoc_sdw_rt_amp_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
 
        if (ctx->amp_dev1) {
                device_remove_software_node(ctx->amp_dev1);
@@ -259,7 +259,7 @@ int asoc_sdw_rt_amp_init(struct snd_soc_card *card,
                         struct asoc_sdw_codec_info *info,
                         bool playback)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct device *sdw_dev1, *sdw_dev2;
        int ret;
 
index d84aec2b4c789428ca3400ca73f9c2ef555ae855..8059e483835d67da2fe0be00aacc344a574608f6 100644 (file)
@@ -86,7 +86,7 @@ static const char * const need_sdca_suffix[] = {
 int asoc_sdw_rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_soc_dai *dai)
 {
        struct snd_soc_card *card = rtd->card;
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct snd_soc_component *component;
        struct snd_soc_jack *jack;
        int ret;
@@ -163,7 +163,7 @@ int asoc_sdw_rt_sdca_jack_rtd_init(struct snd_soc_pcm_runtime *rtd, struct snd_s
 
 int asoc_sdw_rt_sdca_jack_exit(struct snd_soc_card *card, struct snd_soc_dai_link *dai_link)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
 
        if (!ctx->headset_codec_dev)
                return 0;
@@ -183,7 +183,7 @@ int asoc_sdw_rt_sdca_jack_init(struct snd_soc_card *card,
                               struct asoc_sdw_codec_info *info,
                               bool playback)
 {
-       struct mc_private *ctx = snd_soc_card_get_drvdata(card);
+       struct asoc_sdw_mc_private *ctx = snd_soc_card_get_drvdata(card);
        struct device *sdw_dev;
        int ret;