diff options
-rw-r--r-- | sound/soc/generic/simple-card.c | 23 |
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); |