diff options
Diffstat (limited to 'sound/soc/codecs/wm8400.c')
-rw-r--r-- | sound/soc/codecs/wm8400.c | 34 |
1 files changed, 28 insertions, 6 deletions
diff --git a/sound/soc/codecs/wm8400.c b/sound/soc/codecs/wm8400.c index 510efa604008..b9ef4d915221 100644 --- a/sound/soc/codecs/wm8400.c +++ b/sound/soc/codecs/wm8400.c | |||
@@ -954,7 +954,7 @@ static int fll_factors(struct wm8400_priv *wm8400, struct fll_factors *factors, | |||
954 | factors->outdiv *= 2; | 954 | factors->outdiv *= 2; |
955 | if (factors->outdiv > 32) { | 955 | if (factors->outdiv > 32) { |
956 | dev_err(wm8400->wm8400->dev, | 956 | dev_err(wm8400->wm8400->dev, |
957 | "Unsupported FLL output frequency %dHz\n", | 957 | "Unsupported FLL output frequency %uHz\n", |
958 | Fout); | 958 | Fout); |
959 | return -EINVAL; | 959 | return -EINVAL; |
960 | } | 960 | } |
@@ -1003,7 +1003,7 @@ static int fll_factors(struct wm8400_priv *wm8400, struct fll_factors *factors, | |||
1003 | factors->k = K / 10; | 1003 | factors->k = K / 10; |
1004 | 1004 | ||
1005 | dev_dbg(wm8400->wm8400->dev, | 1005 | dev_dbg(wm8400->wm8400->dev, |
1006 | "FLL: Fref=%d Fout=%d N=%x K=%x, FRATIO=%x OUTDIV=%x\n", | 1006 | "FLL: Fref=%u Fout=%u N=%x K=%x, FRATIO=%x OUTDIV=%x\n", |
1007 | Fref, Fout, | 1007 | Fref, Fout, |
1008 | factors->n, factors->k, factors->fratio, factors->outdiv); | 1008 | factors->n, factors->k, factors->fratio, factors->outdiv); |
1009 | 1009 | ||
@@ -1022,10 +1022,15 @@ static int wm8400_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, | |||
1022 | if (freq_in == wm8400->fll_in && freq_out == wm8400->fll_out) | 1022 | if (freq_in == wm8400->fll_in && freq_out == wm8400->fll_out) |
1023 | return 0; | 1023 | return 0; |
1024 | 1024 | ||
1025 | if (freq_out != 0) { | 1025 | if (freq_out) { |
1026 | ret = fll_factors(wm8400, &factors, freq_in, freq_out); | 1026 | ret = fll_factors(wm8400, &factors, freq_in, freq_out); |
1027 | if (ret != 0) | 1027 | if (ret != 0) |
1028 | return ret; | 1028 | return ret; |
1029 | } else { | ||
1030 | /* Bodge GCC 4.4.0 uninitialised variable warning - it | ||
1031 | * doesn't seem capable of working out that we exit if | ||
1032 | * freq_out is 0 before any of the uses. */ | ||
1033 | memset(&factors, 0, sizeof(factors)); | ||
1029 | } | 1034 | } |
1030 | 1035 | ||
1031 | wm8400->fll_out = freq_out; | 1036 | wm8400->fll_out = freq_out; |
@@ -1040,7 +1045,7 @@ static int wm8400_set_dai_pll(struct snd_soc_dai *codec_dai, int pll_id, | |||
1040 | reg &= ~WM8400_FLL_OSC_ENA; | 1045 | reg &= ~WM8400_FLL_OSC_ENA; |
1041 | wm8400_write(codec, WM8400_FLL_CONTROL_1, reg); | 1046 | wm8400_write(codec, WM8400_FLL_CONTROL_1, reg); |
1042 | 1047 | ||
1043 | if (freq_out == 0) | 1048 | if (!freq_out) |
1044 | return 0; | 1049 | return 0; |
1045 | 1050 | ||
1046 | reg &= ~(WM8400_FLL_REF_FREQ | WM8400_FLL_FRATIO_MASK); | 1051 | reg &= ~(WM8400_FLL_REF_FREQ | WM8400_FLL_FRATIO_MASK); |
@@ -1473,8 +1478,8 @@ static int wm8400_codec_probe(struct platform_device *dev) | |||
1473 | 1478 | ||
1474 | codec = &priv->codec; | 1479 | codec = &priv->codec; |
1475 | codec->private_data = priv; | 1480 | codec->private_data = priv; |
1476 | codec->control_data = dev->dev.driver_data; | 1481 | codec->control_data = dev_get_drvdata(&dev->dev); |
1477 | priv->wm8400 = dev->dev.driver_data; | 1482 | priv->wm8400 = dev_get_drvdata(&dev->dev); |
1478 | 1483 | ||
1479 | ret = regulator_bulk_get(priv->wm8400->dev, | 1484 | ret = regulator_bulk_get(priv->wm8400->dev, |
1480 | ARRAY_SIZE(power), &power[0]); | 1485 | ARRAY_SIZE(power), &power[0]); |
@@ -1553,6 +1558,21 @@ static int __exit wm8400_codec_remove(struct platform_device *dev) | |||
1553 | return 0; | 1558 | return 0; |
1554 | } | 1559 | } |
1555 | 1560 | ||
1561 | #ifdef CONFIG_PM | ||
1562 | static int wm8400_pdev_suspend(struct platform_device *pdev, pm_message_t msg) | ||
1563 | { | ||
1564 | return snd_soc_suspend_device(&pdev->dev); | ||
1565 | } | ||
1566 | |||
1567 | static int wm8400_pdev_resume(struct platform_device *pdev) | ||
1568 | { | ||
1569 | return snd_soc_resume_device(&pdev->dev); | ||
1570 | } | ||
1571 | #else | ||
1572 | #define wm8400_pdev_suspend NULL | ||
1573 | #define wm8400_pdev_resume NULL | ||
1574 | #endif | ||
1575 | |||
1556 | static struct platform_driver wm8400_codec_driver = { | 1576 | static struct platform_driver wm8400_codec_driver = { |
1557 | .driver = { | 1577 | .driver = { |
1558 | .name = "wm8400-codec", | 1578 | .name = "wm8400-codec", |
@@ -1560,6 +1580,8 @@ static struct platform_driver wm8400_codec_driver = { | |||
1560 | }, | 1580 | }, |
1561 | .probe = wm8400_codec_probe, | 1581 | .probe = wm8400_codec_probe, |
1562 | .remove = __exit_p(wm8400_codec_remove), | 1582 | .remove = __exit_p(wm8400_codec_remove), |
1583 | .suspend = wm8400_pdev_suspend, | ||
1584 | .resume = wm8400_pdev_resume, | ||
1563 | }; | 1585 | }; |
1564 | 1586 | ||
1565 | static int __init wm8400_codec_init(void) | 1587 | static int __init wm8400_codec_init(void) |