]> Pileus Git - ~andy/linux/blobdiff - sound/soc/soc-core.c
Merge branch 'core-fixes-for-linus' of git://git.kernel.org/pub/scm/linux/kernel...
[~andy/linux] / sound / soc / soc-core.c
index 11a881caba76dc3186b6427efb98e09f31e3cd0e..462e635dfc74bc084f2c140480c4e6fe8e8cd7cc 100644 (file)
@@ -4,8 +4,7 @@
  * Copyright 2005 Wolfson Microelectronics PLC.
  * Copyright 2005 Openedhand Ltd.
  *
- * Author: Liam Girdwood
- *         liam.girdwood@wolfsonmicro.com or linux@wolfsonmicro.com
+ * Author: Liam Girdwood <lrg@slimlogic.co.uk>
  *         with code, comments and ideas from :-
  *         Richard Purdie <richard@openedhand.com>
  *
@@ -340,6 +339,12 @@ static int soc_codec_close(struct snd_pcm_substream *substream)
        }
        codec->active--;
 
+       /* Muting the DAC suppresses artifacts caused during digital
+        * shutdown, for example from stopping clocks.
+        */
+       if (substream->stream == SNDRV_PCM_STREAM_PLAYBACK)
+               snd_soc_dai_digital_mute(codec_dai, 1);
+
        if (cpu_dai->ops.shutdown)
                cpu_dai->ops.shutdown(substream);
 
@@ -1457,8 +1462,8 @@ int snd_soc_info_volsw(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        int max = mc->max;
-       uint shift = mc->min;
-       uint rshift = mc->rshift;
+       unsigned int shift = mc->min;
+       unsigned int rshift = mc->rshift;
 
        if (max == 1)
                uinfo->type = SNDRV_CTL_ELEM_TYPE_BOOLEAN;
@@ -1487,12 +1492,12 @@ int snd_soc_get_volsw(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
-       uint shift = mc->shift;
-       uint rshift = mc->rshift;
+       unsigned int reg = mc->reg;
+       unsigned int shift = mc->shift;
+       unsigned int rshift = mc->rshift;
        int max = mc->max;
-       uint mask = (1 << fls(max)) - 1;
-       uint invert = mc->invert;
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
 
        ucontrol->value.integer.value[0] =
                (snd_soc_read(codec, reg) >> shift) & mask;
@@ -1526,12 +1531,12 @@ int snd_soc_put_volsw(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
-       uint shift = mc->shift;
-       uint rshift = mc->rshift;
+       unsigned int reg = mc->reg;
+       unsigned int shift = mc->shift;
+       unsigned int rshift = mc->rshift;
        int max = mc->max;
-       uint mask = (1 << fls(max)) - 1;
-       uint invert = mc->invert;
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
        unsigned short val, val2, val_mask;
 
        val = (ucontrol->value.integer.value[0] & mask);
@@ -1594,12 +1599,12 @@ int snd_soc_get_volsw_2r(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
-       uint reg2 = mc->rreg;
-       uint shift = mc->shift;
+       unsigned int reg = mc->reg;
+       unsigned int reg2 = mc->rreg;
+       unsigned int shift = mc->shift;
        int max = mc->max;
-       uint mask = (1<<fls(max))-1;
-       uint invert = mc->invert;
+       unsigned int mask = (1<<fls(max))-1;
+       unsigned int invert = mc->invert;
 
        ucontrol->value.integer.value[0] =
                (snd_soc_read(codec, reg) >> shift) & mask;
@@ -1631,12 +1636,12 @@ int snd_soc_put_volsw_2r(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
-       uint reg2 = mc->rreg;
-       uint shift = mc->shift;
+       unsigned int reg = mc->reg;
+       unsigned int reg2 = mc->rreg;
+       unsigned int shift = mc->shift;
        int max = mc->max;
-       uint mask = (1 << fls(max)) - 1;
-       uint invert = mc->invert;
+       unsigned int mask = (1 << fls(max)) - 1;
+       unsigned int invert = mc->invert;
        int err;
        unsigned short val, val2, val_mask;
 
@@ -1701,7 +1706,7 @@ int snd_soc_get_volsw_s8(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
+       unsigned int reg = mc->reg;
        int min = mc->min;
        int val = snd_soc_read(codec, reg);
 
@@ -1728,7 +1733,7 @@ int snd_soc_put_volsw_s8(struct snd_kcontrol *kcontrol,
        struct soc_mixer_control *mc =
                (struct soc_mixer_control *)kcontrol->private_value;
        struct snd_soc_codec *codec = snd_kcontrol_chip(kcontrol);
-       uint reg = mc->reg;
+       unsigned int reg = mc->reg;
        int min = mc->min;
        unsigned short val;
 
@@ -1880,7 +1885,7 @@ module_init(snd_soc_init);
 module_exit(snd_soc_exit);
 
 /* Module information */
-MODULE_AUTHOR("Liam Girdwood, liam.girdwood@wolfsonmicro.com, www.wolfsonmicro.com");
+MODULE_AUTHOR("Liam Girdwood, lrg@slimlogic.co.uk");
 MODULE_DESCRIPTION("ALSA SoC Core");
 MODULE_LICENSE("GPL");
 MODULE_ALIAS("platform:soc-audio");