[PATCH 1/3] ASoC: generic: simple card, use private data
From: Markus Pargmann <hidden>
Date: 2013-08-31 10:44:36
Also in:
alsa-devel, linux-devicetree
Subsystem:
sound, sound - generic sound card (simple-audio-card, audio-graph-card), sound - soc layer / dynamic audio power management (asoc), the rest · Maintainers:
Jaroslav Kysela, Takashi Iwai, Mark Brown, Kuninori Morimoto, Liam Girdwood, Linus Torvalds
Move snd_link and snd_card from platform data to private data. Signed-off-by: Markus Pargmann <redacted> --- include/sound/simple_card.h | 4 ---- sound/soc/generic/simple-card.c | 44 ++++++++++++++++++++++++++--------------- 2 files changed, 28 insertions(+), 20 deletions(-)
diff --git a/include/sound/simple_card.h b/include/sound/simple_card.h
index 6c74527..e1ac996 100644
--- a/include/sound/simple_card.h
+++ b/include/sound/simple_card.h@@ -29,10 +29,6 @@ struct asoc_simple_card_info { unsigned int daifmt; struct asoc_simple_dai cpu_dai; struct asoc_simple_dai codec_dai; - - /* used in simple-card.c */ - struct snd_soc_dai_link snd_link; - struct snd_soc_card snd_card; }; #endif /* __SIMPLE_CARD_H */
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 6cf8355..63cbf3e 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c@@ -15,6 +15,10 @@ #define asoc_simple_get_card_info(p) \ container_of(p->dai_link, struct asoc_simple_card_info, snd_link) +struct asoc_simple_card_data { + struct snd_soc_dai_link snd_link; + struct snd_soc_card snd_card; +}; static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai, struct asoc_simple_dai *set,
@@ -35,7 +39,8 @@ static int __asoc_simple_card_dai_init(struct snd_soc_dai *dai, static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd) { - struct asoc_simple_card_info *info = asoc_simple_get_card_info(rtd); + struct device *dev = rtd->card->dev; + struct asoc_simple_card_info *info = dev->platform_data; struct snd_soc_dai *codec = rtd->codec_dai; struct snd_soc_dai *cpu = rtd->cpu_dai; unsigned int daifmt = info->daifmt;
@@ -55,6 +60,7 @@ static int asoc_simple_card_dai_init(struct snd_soc_pcm_runtime *rtd) static int asoc_simple_card_probe(struct platform_device *pdev) { struct asoc_simple_card_info *cinfo = pdev->dev.platform_data; + struct asoc_simple_card_data *priv; struct device *dev = &pdev->dev; if (!cinfo) {
@@ -62,6 +68,10 @@ static int asoc_simple_card_probe(struct platform_device *pdev) return -EINVAL; } + priv = devm_kzalloc(&pdev->dev, sizeof(*priv), GFP_KERNEL); + if (!priv) + return -ENOMEM; + if (!cinfo->name || !cinfo->card || !cinfo->codec ||
@@ -75,31 +85,33 @@ static int asoc_simple_card_probe(struct platform_device *pdev) /* * init snd_soc_dai_link */ - cinfo->snd_link.name = cinfo->name; - cinfo->snd_link.stream_name = cinfo->name; - cinfo->snd_link.cpu_dai_name = cinfo->cpu_dai.name; - cinfo->snd_link.platform_name = cinfo->platform; - cinfo->snd_link.codec_name = cinfo->codec; - cinfo->snd_link.codec_dai_name = cinfo->codec_dai.name; - cinfo->snd_link.init = asoc_simple_card_dai_init; + priv->snd_link.name = cinfo->name; + priv->snd_link.stream_name = cinfo->name; + priv->snd_link.cpu_dai_name = cinfo->cpu_dai.name; + priv->snd_link.platform_name = cinfo->platform; + priv->snd_link.codec_name = cinfo->codec; + priv->snd_link.codec_dai_name = cinfo->codec_dai.name; + priv->snd_link.init = asoc_simple_card_dai_init; /* * init snd_soc_card */ - cinfo->snd_card.name = cinfo->card; - cinfo->snd_card.owner = THIS_MODULE; - cinfo->snd_card.dai_link = &cinfo->snd_link; - cinfo->snd_card.num_links = 1; - cinfo->snd_card.dev = &pdev->dev; + priv->snd_card.name = cinfo->card; + priv->snd_card.owner = THIS_MODULE; + priv->snd_card.dai_link = &priv->snd_link; + priv->snd_card.num_links = 1; + priv->snd_card.dev = &pdev->dev; - return snd_soc_register_card(&cinfo->snd_card); + dev_set_drvdata(&pdev->dev, priv); + + return snd_soc_register_card(&priv->snd_card); } static int asoc_simple_card_remove(struct platform_device *pdev) { - struct asoc_simple_card_info *cinfo = pdev->dev.platform_data; + struct asoc_simple_card_data *priv = dev_get_drvdata(&pdev->dev); - return snd_soc_unregister_card(&cinfo->snd_card); + return snd_soc_unregister_card(&priv->snd_card); } static struct platform_driver asoc_simple_card = {
--
1.8.4.rc3