ASoC: Samsung: set drvdata before adding secondary device

This change “ASoC: Samsung: set drvdata before adding secondary device” (commit c6f9b1e) in Linux kernel is authored by Prathyush K <prathyush.k [at] samsung.com> on Tue Apr 2 16:53:02 2013 +0530.

Description of "ASoC: Samsung: set drvdata before adding secondary device"

The change “ASoC: Samsung: set drvdata before adding secondary device” introduces changes as follows.

ASoC: Samsung: set drvdata before adding secondary device

Currently, a new platform device is created for secondary device
by calling platform_device_register_resndata and then the drvdata
is set for this device.

The following patch has been added to driver core:
"driver core: fix possible missing of device probe".

This results in the added device getting probed immediately but
the drvdata for the secondary device is not yet set.
This patch removes the platform_device_register_resndata call and
instead calls platform_device_alloc, platform_set_drvdata and
platform_device_add which fixes the above issue.

Signed-off-by: Prathyush K <prathyush.k@samsung.com>
Signed-off-by: Padmavathi Venna <padma.v@samsung.com>
Signed-off-by: Mark Brown <broonie@opensource.wolfsonmicro.com>

Linux kernel releases containing commit c6f9b1e

The Linux kernel releases containing this commit are as follows.

Linux kernel code changes from "ASoC: Samsung: set drvdata before adding secondary device"

There are 13 lines of Linux source code added/deleted in this change. Code changes to Linux kernel are as follows.

 sound/soc/samsung/i2s.c | 13 ++++++++-----
 1 file changed, 8 insertions(+), 5 deletions(-)
 
diff --git a/sound/soc/samsung/i2s.c b/sound/soc/samsung/i2s.c
index f1fc06419560..6bbeb0bf1a73 100644
--- a/sound/soc/samsung/i2s.c
+++ b/sound/soc/samsung/i2s.c
@@ -972,6 +972,7 @@ static const struct snd_soc_dai_ops samsung_i2s_dai_ops = {
 static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec)
 {
 	struct i2s_dai *i2s;
+	int ret;
 
 	i2s = devm_kzalloc(&pdev->dev, sizeof(struct i2s_dai), GFP_KERNEL);
 	if (i2s == NULL)
@@ -996,15 +997,17 @@ static struct i2s_dai *i2s_alloc_dai(struct platform_device *pdev, bool sec)
 		i2s->i2s_dai_drv.capture.channels_max = 2;
 		i2s->i2s_dai_drv.capture.rates = SAMSUNG_I2S_RATES;
 		i2s->i2s_dai_drv.capture.formats = SAMSUNG_I2S_FMTS;
+		dev_set_drvdata(&i2s->pdev->dev, i2s);
 	} else {	/* Create a new platform_device for Secondary */
-		i2s->pdev = platform_device_register_resndata(NULL,
-				"samsung-i2s-sec", -1, NULL, 0, NULL, 0);
+		i2s->pdev = platform_device_alloc("samsung-i2s-sec", -1);
 		if (IS_ERR(i2s->pdev))
 			return NULL;
-	}
 
-	/* Pre-assign snd_soc_dai_set_drvdata */
-	dev_set_drvdata(&i2s->pdev->dev, i2s);
+		platform_set_drvdata(i2s->pdev, i2s);
+		ret = platform_device_add(i2s->pdev);
+		if (ret < 0)
+			return NULL;
+	}
 
 	return i2s;
 }

The commit for this change in Linux stable tree is c6f9b1e (patch).

Last modified: 2020/02/10