[alsa-devel] [PATCH] ASoC: Dynamically allocate the rtd device for a non-empty release
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com ---
Greg, you asked for this to be included in 3.3 but I really don't see any reason for doing so - this isn't exactly new code and there aren't any practical issues being reported. Is there any actual rush?
include/sound/soc.h | 6 +++--- sound/soc/soc-core.c | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h index a7425e9..0a56767 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -862,7 +862,7 @@ struct snd_soc_card {
/* SoC machine DAI configuration, glues a codec and cpu DAI together */ struct snd_soc_pcm_runtime { - struct device dev; + struct device *dev; struct snd_soc_card *card; struct snd_soc_dai_link *dai_link; struct mutex pcm_mutex; @@ -954,12 +954,12 @@ static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platfo static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd, void *data) { - dev_set_drvdata(&rtd->dev, data); + dev_set_drvdata(rtd->dev, data); }
static inline void *snd_soc_pcm_get_drvdata(struct snd_soc_pcm_runtime *rtd) { - return dev_get_drvdata(&rtd->dev); + return dev_get_drvdata(rtd->dev); }
static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index dcc4b62..9d8a631 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -884,9 +884,9 @@ static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order)
/* unregister the rtd device */ if (rtd->dev_registered) { - device_remove_file(&rtd->dev, &dev_attr_pmdown_time); - device_remove_file(&rtd->dev, &dev_attr_codec_reg); - device_unregister(&rtd->dev); + device_remove_file(rtd->dev, &dev_attr_pmdown_time); + device_remove_file(rtd->dev, &dev_attr_codec_reg); + device_unregister(rtd->dev); rtd->dev_registered = 0; }
@@ -1061,7 +1061,10 @@ err_probe: return ret; }
-static void rtd_release(struct device *dev) {} +static void rtd_release(struct device *dev) +{ + kfree(dev); +}
static int soc_post_component_init(struct snd_soc_card *card, struct snd_soc_codec *codec, @@ -1104,11 +1107,16 @@ static int soc_post_component_init(struct snd_soc_card *card,
/* register the rtd device */ rtd->codec = codec; - rtd->dev.parent = card->dev; - rtd->dev.release = rtd_release; - rtd->dev.init_name = name; + + rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL); + if (!rtd->dev) + return -ENOMEM; + device_initialize(rtd->dev); + rtd->dev->parent = card->dev; + rtd->dev->release = rtd_release; + rtd->dev->init_name = name; mutex_init(&rtd->pcm_mutex); - ret = device_register(&rtd->dev); + ret = device_add(rtd->dev); if (ret < 0) { dev_err(card->dev, "asoc: failed to register runtime device: %d\n", ret); @@ -1117,14 +1125,14 @@ static int soc_post_component_init(struct snd_soc_card *card, rtd->dev_registered = 1;
/* add DAPM sysfs entries for this codec */ - ret = snd_soc_dapm_sys_add(&rtd->dev); + ret = snd_soc_dapm_sys_add(rtd->dev); if (ret < 0) dev_err(codec->dev, "asoc: failed to add codec dapm sysfs entries: %d\n", ret);
/* add codec sysfs entries */ - ret = device_create_file(&rtd->dev, &dev_attr_codec_reg); + ret = device_create_file(rtd->dev, &dev_attr_codec_reg); if (ret < 0) dev_err(codec->dev, "asoc: failed to add codec sysfs files: %d\n", ret); @@ -1213,7 +1221,7 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order) if (ret) return ret;
- ret = device_create_file(&rtd->dev, &dev_attr_pmdown_time); + ret = device_create_file(rtd->dev, &dev_attr_pmdown_time); if (ret < 0) printk(KERN_WARNING "asoc: failed to add pmdown_time sysfs\n");
@@ -1311,8 +1319,8 @@ static void soc_remove_aux_dev(struct snd_soc_card *card, int num)
/* unregister the rtd device */ if (rtd->dev_registered) { - device_remove_file(&rtd->dev, &dev_attr_codec_reg); - device_unregister(&rtd->dev); + device_remove_file(rtd->dev, &dev_attr_codec_reg); + device_del(rtd->dev); rtd->dev_registered = 0; }
At Sun, 8 Jan 2012 23:02:30 -0800, Mark Brown wrote:
Signed-off-by: Mark Brown broonie@opensource.wolfsonmicro.com
Greg, you asked for this to be included in 3.3 but I really don't see any reason for doing so - this isn't exactly new code and there aren't any practical issues being reported. Is there any actual rush?
Since it's no urgent fix, rc1 is the best merge point. Of course, I know it's a bit too late for merge, but the code doesn't look so awfully intrusive. So, I find it's OK.
thanks,
Takashi
include/sound/soc.h | 6 +++--- sound/soc/soc-core.c | 34 +++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 16 deletions(-)
diff --git a/include/sound/soc.h b/include/sound/soc.h index a7425e9..0a56767 100644 --- a/include/sound/soc.h +++ b/include/sound/soc.h @@ -862,7 +862,7 @@ struct snd_soc_card {
/* SoC machine DAI configuration, glues a codec and cpu DAI together */ struct snd_soc_pcm_runtime {
- struct device dev;
- struct device *dev; struct snd_soc_card *card; struct snd_soc_dai_link *dai_link; struct mutex pcm_mutex;
@@ -954,12 +954,12 @@ static inline void *snd_soc_platform_get_drvdata(struct snd_soc_platform *platfo static inline void snd_soc_pcm_set_drvdata(struct snd_soc_pcm_runtime *rtd, void *data) {
- dev_set_drvdata(&rtd->dev, data);
- dev_set_drvdata(rtd->dev, data);
}
static inline void *snd_soc_pcm_get_drvdata(struct snd_soc_pcm_runtime *rtd) {
- return dev_get_drvdata(&rtd->dev);
- return dev_get_drvdata(rtd->dev);
}
static inline void snd_soc_initialize_card_lists(struct snd_soc_card *card) diff --git a/sound/soc/soc-core.c b/sound/soc/soc-core.c index dcc4b62..9d8a631 100644 --- a/sound/soc/soc-core.c +++ b/sound/soc/soc-core.c @@ -884,9 +884,9 @@ static void soc_remove_dai_link(struct snd_soc_card *card, int num, int order)
/* unregister the rtd device */ if (rtd->dev_registered) {
device_remove_file(&rtd->dev, &dev_attr_pmdown_time);
device_remove_file(&rtd->dev, &dev_attr_codec_reg);
device_unregister(&rtd->dev);
device_remove_file(rtd->dev, &dev_attr_pmdown_time);
device_remove_file(rtd->dev, &dev_attr_codec_reg);
rtd->dev_registered = 0; }device_unregister(rtd->dev);
@@ -1061,7 +1061,10 @@ err_probe: return ret; }
-static void rtd_release(struct device *dev) {} +static void rtd_release(struct device *dev) +{
- kfree(dev);
+}
static int soc_post_component_init(struct snd_soc_card *card, struct snd_soc_codec *codec, @@ -1104,11 +1107,16 @@ static int soc_post_component_init(struct snd_soc_card *card,
/* register the rtd device */ rtd->codec = codec;
- rtd->dev.parent = card->dev;
- rtd->dev.release = rtd_release;
- rtd->dev.init_name = name;
- rtd->dev = kzalloc(sizeof(struct device), GFP_KERNEL);
- if (!rtd->dev)
return -ENOMEM;
- device_initialize(rtd->dev);
- rtd->dev->parent = card->dev;
- rtd->dev->release = rtd_release;
- rtd->dev->init_name = name; mutex_init(&rtd->pcm_mutex);
- ret = device_register(&rtd->dev);
- ret = device_add(rtd->dev); if (ret < 0) { dev_err(card->dev, "asoc: failed to register runtime device: %d\n", ret);
@@ -1117,14 +1125,14 @@ static int soc_post_component_init(struct snd_soc_card *card, rtd->dev_registered = 1;
/* add DAPM sysfs entries for this codec */
- ret = snd_soc_dapm_sys_add(&rtd->dev);
ret = snd_soc_dapm_sys_add(rtd->dev); if (ret < 0) dev_err(codec->dev, "asoc: failed to add codec dapm sysfs entries: %d\n", ret);
/* add codec sysfs entries */
- ret = device_create_file(&rtd->dev, &dev_attr_codec_reg);
- ret = device_create_file(rtd->dev, &dev_attr_codec_reg); if (ret < 0) dev_err(codec->dev, "asoc: failed to add codec sysfs files: %d\n", ret);
@@ -1213,7 +1221,7 @@ static int soc_probe_dai_link(struct snd_soc_card *card, int num, int order) if (ret) return ret;
- ret = device_create_file(&rtd->dev, &dev_attr_pmdown_time);
- ret = device_create_file(rtd->dev, &dev_attr_pmdown_time); if (ret < 0) printk(KERN_WARNING "asoc: failed to add pmdown_time sysfs\n");
@@ -1311,8 +1319,8 @@ static void soc_remove_aux_dev(struct snd_soc_card *card, int num)
/* unregister the rtd device */ if (rtd->dev_registered) {
device_remove_file(&rtd->dev, &dev_attr_codec_reg);
device_unregister(&rtd->dev);
device_remove_file(rtd->dev, &dev_attr_codec_reg);
rtd->dev_registered = 0; }device_del(rtd->dev);
-- 1.7.7.3
Alsa-devel mailing list Alsa-devel@alsa-project.org http://mailman.alsa-project.org/mailman/listinfo/alsa-devel
On Mon, Jan 09, 2012 at 11:14:56AM +0100, Takashi Iwai wrote:
Mark Brown wrote:
Greg, you asked for this to be included in 3.3 but I really don't see any reason for doing so - this isn't exactly new code and there aren't any practical issues being reported. Is there any actual rush?
Since it's no urgent fix, rc1 is the best merge point. Of course, I know it's a bit too late for merge, but the code doesn't look so awfully intrusive. So, I find it's OK.
I'm still not thrilled by it but whatever.
participants (2)
-
Mark Brown
-
Takashi Iwai