From: Mark Brown <broonie@opensource.wolfsonmicro.com>
To: Takashi Iwai <tiwai@suse.de>
Cc: alsa-devel@alsa-project.org,
Mark Brown <broonie@opensource.wolfsonmicro.com>
Subject: [PATCH 10/18] ASoC: Add card registration API
Date: Tue, 9 Dec 2008 14:01:34 +0000 [thread overview]
Message-ID: <1228831302-17605-10-git-send-email-broonie@opensource.wolfsonmicro.com> (raw)
In-Reply-To: <1228831302-17605-9-git-send-email-broonie@opensource.wolfsonmicro.com>
ASoC v2 allows cards, codecs and platforms to instantiate separately,
with the overall ASoC device only being instantiated once all the
required components have registered. As part of backporting Liam's work
introduce an initial version of the card registration functions. At
present these do nothing active and are internal only, they will be
exposed to machine drivers after further backporting. Adding this now
allows the datastructures used for dynamic card instantiation to be
built up gradually.
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>
---
include/sound/soc.h | 5 ++++
sound/soc/soc-core.c | 62 ++++++++++++++++++++++++++++++++++++++++++++++++++
2 files changed, 67 insertions(+), 0 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h
index 79d855d..4a578b5 100644
--- a/include/sound/soc.h
+++ b/include/sound/soc.h
@@ -333,6 +333,11 @@ struct snd_soc_dai_link {
/* SoC card */
struct snd_soc_card {
char *name;
+ struct device *dev;
+
+ struct list_head list;
+
+ int instantiated;
int (*probe)(struct platform_device *pdev);
int (*remove)(struct platform_device *pdev);
diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c
index 2f2a8d9..44fbd71 100644
--- a/sound/soc/soc-core.c
+++ b/sound/soc/soc-core.c
@@ -43,6 +43,12 @@ static DECLARE_WAIT_QUEUE_HEAD(soc_pm_waitq);
static struct dentry *debugfs_root;
#endif
+static DEFINE_MUTEX(client_mutex);
+static LIST_HEAD(card_list);
+
+static int snd_soc_register_card(struct snd_soc_card *card);
+static int snd_soc_unregister_card(struct snd_soc_card *card);
+
/*
* This is a timeout to do a DAPM powerdown after a stream is closed().
* It can be used to eliminate pops between different playback streams, e.g.
@@ -784,6 +790,14 @@ static int soc_probe(struct platform_device *pdev)
/* Bodge while we push things out of socdev */
card->socdev = socdev;
+ /* Bodge while we unpick instantiation */
+ card->dev = &pdev->dev;
+ ret = snd_soc_register_card(card);
+ if (ret != 0) {
+ dev_err(&pdev->dev, "Failed to register card\n");
+ return ret;
+ }
+
if (card->probe) {
ret = card->probe(pdev);
if (ret < 0)
@@ -863,6 +877,8 @@ static int soc_remove(struct platform_device *pdev)
if (card->remove)
card->remove(pdev);
+ snd_soc_unregister_card(card);
+
return 0;
}
@@ -1957,6 +1973,52 @@ int snd_soc_dai_digital_mute(struct snd_soc_dai *dai, int mute)
}
EXPORT_SYMBOL_GPL(snd_soc_dai_digital_mute);
+/**
+ * snd_soc_register_card - Register a card with the ASoC core
+ *
+ * @param card Card to register
+ *
+ * Note that currently this is an internal only function: it will be
+ * exposed to machine drivers after further backporting of ASoC v2
+ * registration APIs.
+ */
+static int snd_soc_register_card(struct snd_soc_card *card)
+{
+ if (!card->name || !card->dev)
+ return -EINVAL;
+
+ INIT_LIST_HEAD(&card->list);
+ card->instantiated = 0;
+
+ mutex_lock(&client_mutex);
+ list_add(&card->list, &card_list);
+ mutex_unlock(&client_mutex);
+
+ dev_dbg(card->dev, "Registered card '%s'\n", card->name);
+
+ return 0;
+}
+
+/**
+ * snd_soc_unregister_card - Unregister a card with the ASoC core
+ *
+ * @param card Card to unregister
+ *
+ * Note that currently this is an internal only function: it will be
+ * exposed to machine drivers after further backporting of ASoC v2
+ * registration APIs.
+ */
+static int snd_soc_unregister_card(struct snd_soc_card *card)
+{
+ mutex_lock(&client_mutex);
+ list_del(&card->list);
+ mutex_unlock(&client_mutex);
+
+ dev_dbg(card->dev, "Unregistered card '%s'\n", card->name);
+
+ return 0;
+}
+
static int __devinit snd_soc_init(void)
{
#ifdef CONFIG_DEBUG_FS
--
1.5.6.5
next prev parent reply other threads:[~2008-12-09 14:01 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-12-09 14:01 [PATCH 00/18] ASoC updates Mark Brown
2008-12-09 14:01 ` [PATCH 01/18] ASoC: TWL4030: Correct DAPM_DAC with power control Mark Brown
2008-12-09 14:01 ` [PATCH 02/18] ASoC: TWL4030: Add Analog PGA control switch to DAPM Mark Brown
2008-12-09 14:01 ` [PATCH 03/18] ASoC: TWL4030: Add DAPM event handler for output MUX selection Mark Brown
2008-12-09 14:01 ` [PATCH 04/18] ASoC: TWL4030: DAPM mapping of the Earpiece output Mark Brown
2008-12-09 14:01 ` [PATCH 05/18] ASoC: TWL4030: DAPM mapping of the PreDriv outputs Mark Brown
2008-12-09 14:01 ` [PATCH 06/18] ASoC: TWL4030: DAPM mapping of the Headset outputs Mark Brown
2008-12-09 14:01 ` [PATCH 07/18] ASoC: TWL4030: DAPM mapping of the Carkit outputs Mark Brown
2008-12-09 14:01 ` [PATCH 08/18] ASoC: TWL4030: DAPM mapping of the Handsfree outputs Mark Brown
2008-12-09 14:01 ` [PATCH 09/18] ASoC: TWL4030: Do not alter the Headset output volume on power-up/down Mark Brown
2008-12-09 14:01 ` Mark Brown [this message]
2008-12-09 14:01 ` [PATCH 11/18] ASoC: Add DAI registration API Mark Brown
2008-12-09 14:01 ` [PATCH 12/18] ASoC: Register platform DAIs Mark Brown
2008-12-09 14:01 ` [PATCH 13/18] ASoC: Add platform registration API Mark Brown
2008-12-09 14:01 ` [PATCH 14/18] ASoC: Register platform drivers Mark Brown
2008-12-09 14:01 ` [PATCH 15/18] ASoC: Register non-AC97 codec DAIs Mark Brown
2008-12-09 14:01 ` [PATCH 16/18] ASoC: Initial framework for dynamic card instantiation Mark Brown
2008-12-09 14:01 ` [PATCH 17/18] ASoC: Wait for non-AC97 codec DAIs before instantiating Mark Brown
2008-12-09 14:01 ` [PATCH 18/18] ASoC: Convert WM8900 to allow registration by machine code Mark Brown
2008-12-09 14:38 ` [PATCH 14/18] ASoC: Register platform drivers Takashi Iwai
2008-12-09 14:40 ` [PATCH 12/18] ASoC: Register platform DAIs Takashi Iwai
2008-12-09 14:17 ` [PATCH 10/18] ASoC: Add card registration API Takashi Iwai
2008-12-09 14:24 ` Takashi Iwai
2008-12-10 8:27 ` [PATCH 06/18] ASoC: TWL4030: DAPM mapping of the Headset outputs stanley.miao
2008-12-10 9:19 ` Peter Ujfalusi
2008-12-09 14:39 ` [PATCH 00/18] ASoC updates Takashi Iwai
2008-12-09 15:01 ` Mark Brown
2008-12-09 15:03 ` [PATCH] ASoC: Fix typos in Atmel module registration Mark Brown
2008-12-09 15:06 ` [PATCH 00/18] ASoC updates Takashi Iwai
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1228831302-17605-10-git-send-email-broonie@opensource.wolfsonmicro.com \
--to=broonie@opensource.wolfsonmicro.com \
--cc=alsa-devel@alsa-project.org \
--cc=tiwai@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox