aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sound/soc/generic/simple-card.c23
1 files changed, 11 insertions, 12 deletions
diff --git a/sound/soc/generic/simple-card.c b/sound/soc/generic/simple-card.c
index 93163c9d46af..fe0bc5c469e2 100644
--- a/sound/soc/generic/simple-card.c
+++ b/sound/soc/generic/simple-card.c
@@ -37,7 +37,7 @@ struct simple_card_data {
37 unsigned int mclk_fs; 37 unsigned int mclk_fs;
38 struct asoc_simple_jack hp_jack; 38 struct asoc_simple_jack hp_jack;
39 struct asoc_simple_jack mic_jack; 39 struct asoc_simple_jack mic_jack;
40 struct snd_soc_dai_link dai_link[]; /* dynamically allocated */ 40 struct snd_soc_dai_link *dai_link;
41}; 41};
42 42
43#define simple_priv_to_dev(priv) ((priv)->snd_card.dev) 43#define simple_priv_to_dev(priv) ((priv)->snd_card.dev)
@@ -383,6 +383,7 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
383{ 383{
384 struct simple_card_data *priv; 384 struct simple_card_data *priv;
385 struct snd_soc_dai_link *dai_link; 385 struct snd_soc_dai_link *dai_link;
386 struct simple_dai_props *dai_props;
386 struct device_node *np = pdev->dev.of_node; 387 struct device_node *np = pdev->dev.of_node;
387 struct device *dev = &pdev->dev; 388 struct device *dev = &pdev->dev;
388 int num, ret; 389 int num, ret;
@@ -394,26 +395,24 @@ static int asoc_simple_card_probe(struct platform_device *pdev)
394 num = 1; 395 num = 1;
395 396
396 /* Allocate the private data and the DAI link array */ 397 /* Allocate the private data and the DAI link array */
397 priv = devm_kzalloc(dev, 398 priv = devm_kzalloc(dev, sizeof(*priv), GFP_KERNEL);
398 sizeof(*priv) + sizeof(*dai_link) * num,
399 GFP_KERNEL);
400 if (!priv) 399 if (!priv)
401 return -ENOMEM; 400 return -ENOMEM;
402 401
402 dai_props = devm_kzalloc(dev, sizeof(*dai_props) * num, GFP_KERNEL);
403 dai_link = devm_kzalloc(dev, sizeof(*dai_link) * num, GFP_KERNEL);
404 if (!dai_props || !dai_link)
405 return -ENOMEM;
406
407 priv->dai_props = dai_props;
408 priv->dai_link = dai_link;
409
403 /* Init snd_soc_card */ 410 /* Init snd_soc_card */
404 dai_link = priv->dai_link;
405 priv->snd_card.owner = THIS_MODULE; 411 priv->snd_card.owner = THIS_MODULE;
406 priv->snd_card.dev = dev; 412 priv->snd_card.dev = dev;
407 priv->snd_card.dai_link = priv->dai_link; 413 priv->snd_card.dai_link = priv->dai_link;
408 priv->snd_card.num_links = num; 414 priv->snd_card.num_links = num;
409 415
410 /* Get room for the other properties */
411 priv->dai_props = devm_kzalloc(dev,
412 sizeof(*priv->dai_props) * num,
413 GFP_KERNEL);
414 if (!priv->dai_props)
415 return -ENOMEM;
416
417 if (np && of_device_is_available(np)) { 416 if (np && of_device_is_available(np)) {
418 417
419 ret = asoc_simple_card_parse_of(np, priv); 418 ret = asoc_simple_card_parse_of(np, priv);