]> git.kernelconcepts.de Git - karo-tx-linux.git/commitdiff
MLK-10214-1: ASoC: fsl_asrc: sound is wrong after suspend/resume
authorShengjiu Wang <shengjiu.wang@freescale.com>
Mon, 9 Feb 2015 10:22:04 +0000 (18:22 +0800)
committerShengjiu Wang <shengjiu.wang@freescale.com>
Tue, 10 Feb 2015 03:09:24 +0000 (11:09 +0800)
The register ASRCFG is volatile, but some bits need to be recovered
after suspend/resume.

Signed-off-by: Shengjiu Wang <shengjiu.wang@freescale.com>
sound/soc/fsl/fsl_asrc.c
sound/soc/fsl/fsl_asrc.h

index 23a7119c1f137381fa6a98fae59ec71ea08b5e0a..d551ae90c4d917451e2fdae71af7e29b1aa98707 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * Freescale ASRC ALSA SoC Digital Audio Interface (DAI) driver
  *
- * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ * Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
  *
  * Author: Nicolin Chen <nicoleotsuka@gmail.com>
  *
@@ -1076,6 +1076,9 @@ static int fsl_asrc_suspend(struct device *dev)
 
        fsl_asrc_m2m_suspend(asrc_priv);
 
+       regmap_read(asrc_priv->regmap, REG_ASRCFG,
+                               &asrc_priv->regcache_cfg);
+
        regcache_cache_only(asrc_priv->regmap, true);
        regcache_mark_dirty(asrc_priv->regmap);
 
@@ -1096,6 +1099,9 @@ static int fsl_asrc_resume(struct device *dev)
        regcache_cache_only(asrc_priv->regmap, false);
        regcache_sync(asrc_priv->regmap);
 
+       regmap_update_bits(asrc_priv->regmap, REG_ASRCFG,
+                       0x1FFFC0, asrc_priv->regcache_cfg);
+
        /* Restart enabled pairs */
        regmap_update_bits(asrc_priv->regmap, REG_ASRCTR,
                           ASRCTR_ASRCEi_ALL_MASK, asrctr);
index 4c9ca0fea88e25e2a14bf7edc71897b4e37badf9..ceec8e542c37e0374e6d07a2e17596c620adb970 100644 (file)
@@ -1,7 +1,7 @@
 /*
  * fsl_asrc.h - Freescale ASRC ALSA SoC header file
  *
- * Copyright (C) 2014 Freescale Semiconductor, Inc.
+ * Copyright (C) 2014-2015 Freescale Semiconductor, Inc.
  *
  * Author: Nicolin Chen <nicoleotsuka@gmail.com>
  *
@@ -363,6 +363,8 @@ struct fsl_asrc {
        int asrc_rate;
        int asrc_width;
 
+       u32 regcache_cfg;
+
        char name[32];
 };