]> Pileus Git - ~andy/linux/commitdiff
Merge branch 'for-3.3' of git://git.kernel.org/pub/scm/linux/kernel/git/broonie/sound...
authorTakashi Iwai <tiwai@suse.de>
Thu, 12 Jan 2012 08:48:20 +0000 (09:48 +0100)
committerTakashi Iwai <tiwai@suse.de>
Thu, 12 Jan 2012 08:48:20 +0000 (09:48 +0100)
16 files changed:
sound/soc/codecs/cx20442.c
sound/soc/codecs/twl6040.c
sound/soc/codecs/twl6040.h
sound/soc/omap/am3517evm.c
sound/soc/omap/ams-delta.c
sound/soc/omap/igep0020.c
sound/soc/omap/n810.c
sound/soc/omap/omap3evm.c
sound/soc/omap/omap3pandora.c
sound/soc/omap/omap4-hdmi-card.c
sound/soc/omap/osk5912.c
sound/soc/omap/overo.c
sound/soc/omap/rx51.c
sound/soc/omap/sdp3430.c
sound/soc/omap/sdp4430.c
sound/soc/omap/zoom2.c

index ae55e31bfc721172c7210cc48b2c6706fc0d9831..d5fd00a64748097ad1794ed9cc45178c513c6b68 100644 (file)
@@ -16,6 +16,7 @@
 #include <linux/tty.h>
 #include <linux/slab.h>
 #include <linux/module.h>
+#include <linux/regulator/consumer.h>
 
 #include <sound/core.h>
 #include <sound/initval.h>
@@ -25,8 +26,8 @@
 
 
 struct cx20442_priv {
-       enum snd_soc_control_type control_type;
        void *control_data;
+       struct regulator *por;
 };
 
 #define CX20442_PM             0x0
@@ -324,6 +325,38 @@ static struct snd_soc_dai_driver cx20442_dai = {
        },
 };
 
+static int cx20442_set_bias_level(struct snd_soc_codec *codec,
+               enum snd_soc_bias_level level)
+{
+       struct cx20442_priv *cx20442 = snd_soc_codec_get_drvdata(codec);
+       int err = 0;
+
+       switch (level) {
+       case SND_SOC_BIAS_PREPARE:
+               if (codec->dapm.bias_level != SND_SOC_BIAS_STANDBY)
+                       break;
+               if (IS_ERR(cx20442->por))
+                       err = PTR_ERR(cx20442->por);
+               else
+                       err = regulator_enable(cx20442->por);
+               break;
+       case SND_SOC_BIAS_STANDBY:
+               if (codec->dapm.bias_level != SND_SOC_BIAS_PREPARE)
+                       break;
+               if (IS_ERR(cx20442->por))
+                       err = PTR_ERR(cx20442->por);
+               else
+                       err = regulator_disable(cx20442->por);
+               break;
+       default:
+               break;
+       }
+       if (!err)
+               codec->dapm.bias_level = level;
+
+       return err;
+}
+
 static int cx20442_codec_probe(struct snd_soc_codec *codec)
 {
        struct cx20442_priv *cx20442;
@@ -331,9 +364,13 @@ static int cx20442_codec_probe(struct snd_soc_codec *codec)
        cx20442 = kzalloc(sizeof(struct cx20442_priv), GFP_KERNEL);
        if (cx20442 == NULL)
                return -ENOMEM;
-       snd_soc_codec_set_drvdata(codec, cx20442);
 
+       cx20442->por = regulator_get(codec->dev, "POR");
+       if (IS_ERR(cx20442->por))
+               dev_warn(codec->dev, "failed to get the regulator");
        cx20442->control_data = NULL;
+
+       snd_soc_codec_set_drvdata(codec, cx20442);
        codec->hw_write = NULL;
        codec->card->pop_time = 0;
 
@@ -350,6 +387,12 @@ static int cx20442_codec_remove(struct snd_soc_codec *codec)
                        tty_hangup(tty);
        }
 
+       if (!IS_ERR(cx20442->por)) {
+               /* should be already in STANDBY, hence disabled */
+               regulator_put(cx20442->por);
+       }
+
+       snd_soc_codec_set_drvdata(codec, NULL);
        kfree(cx20442);
        return 0;
 }
@@ -359,6 +402,7 @@ static const u8 cx20442_reg;
 static struct snd_soc_codec_driver cx20442_codec_dev = {
        .probe =        cx20442_codec_probe,
        .remove =       cx20442_codec_remove,
+       .set_bias_level = cx20442_set_bias_level,
        .reg_cache_default = &cx20442_reg,
        .reg_cache_size = 1,
        .reg_word_size = sizeof(u8),
index 3376e6fad2a2813f0f490785cfec710f7ceeb7f4..5b9c79b6f65e104fdbbae4779452d15821752c58 100644 (file)
@@ -33,6 +33,7 @@
 #include <sound/pcm.h>
 #include <sound/pcm_params.h>
 #include <sound/soc.h>
+#include <sound/soc-dapm.h>
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
@@ -1012,6 +1013,28 @@ static int twl6040_pll_put_enum(struct snd_kcontrol *kcontrol,
        return 0;
 }
 
+int twl6040_get_dl1_gain(struct snd_soc_codec *codec)
+{
+       struct snd_soc_dapm_context *dapm = &codec->dapm;
+
+       if (snd_soc_dapm_get_pin_status(dapm, "EP"))
+               return -1; /* -1dB */
+
+       if (snd_soc_dapm_get_pin_status(dapm, "HSOR") ||
+               snd_soc_dapm_get_pin_status(dapm, "HSOL")) {
+
+               u8 val = snd_soc_read(codec, TWL6040_REG_HSLCTL);
+               if (val & TWL6040_HSDACMODE)
+                       /* HSDACL in LP mode */
+                       return -8; /* -8dB */
+               else
+                       /* HSDACL in HP mode */
+                       return -1; /* -1dB */
+       }
+       return 0; /* 0dB */
+}
+EXPORT_SYMBOL_GPL(twl6040_get_dl1_gain);
+
 int twl6040_get_clk_id(struct snd_soc_codec *codec)
 {
        struct twl6040_data *priv = snd_soc_codec_get_drvdata(codec);
index a83277bdb851129c5fb7a3db84e11e42d50dab0e..ef273f1fac2f838add14ecc8b01465e4677097af 100644 (file)
@@ -34,6 +34,7 @@ enum twl6040_trim {
 #define TWL6040_HSF_TRIM_LEFT(x)       (x & 0x0f)
 #define TWL6040_HSF_TRIM_RIGHT(x)      ((x >> 4) & 0x0f)
 
+int twl6040_get_dl1_gain(struct snd_soc_codec *codec);
 void twl6040_hs_jack_detect(struct snd_soc_codec *codec,
                            struct snd_soc_jack *jack, int report);
 int twl6040_get_clk_id(struct snd_soc_codec *codec);
index c1cd4a0cbe9e6f573625c42acd0883fe20bb7e3e..add4866d7e67bce97b95083f2d36ce4f06e4ccd9 100644 (file)
@@ -107,6 +107,7 @@ static struct snd_soc_dai_link am3517evm_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_am3517evm = {
        .name = "am3517evm",
+       .owner = THIS_MODULE,
        .dai_link = &am3517evm_dai,
        .num_links = 1,
 
index a04a4338fdac131e5542dc0a41c757e3ed5a46a7..a67f4370bc9f8fc0096e92abb8ba6cbc3771c220 100644 (file)
@@ -431,22 +431,20 @@ static int ams_delta_set_bias_level(struct snd_soc_card *card,
                                    struct snd_soc_dapm_context *dapm,
                                    enum snd_soc_bias_level level)
 {
-       struct snd_soc_codec *codec = card->rtd->codec;
-
        switch (level) {
        case SND_SOC_BIAS_ON:
        case SND_SOC_BIAS_PREPARE:
        case SND_SOC_BIAS_STANDBY:
-               if (codec->dapm.bias_level == SND_SOC_BIAS_OFF)
+               if (card->dapm.bias_level == SND_SOC_BIAS_OFF)
                        ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
                                                AMS_DELTA_LATCH2_MODEM_NRESET);
                break;
        case SND_SOC_BIAS_OFF:
-               if (codec->dapm.bias_level != SND_SOC_BIAS_OFF)
+               if (card->dapm.bias_level != SND_SOC_BIAS_OFF)
                        ams_delta_latch2_write(AMS_DELTA_LATCH2_MODEM_NRESET,
                                                0);
        }
-       codec->dapm.bias_level = level;
+       card->dapm.bias_level = level;
 
        return 0;
 }
@@ -597,6 +595,7 @@ static struct snd_soc_dai_link ams_delta_dai_link = {
 /* Audio card driver */
 static struct snd_soc_card ams_delta_audio_card = {
        .name = "AMS_DELTA",
+       .owner = THIS_MODULE,
        .dai_link = &ams_delta_dai_link,
        .num_links = 1,
        .set_bias_level = ams_delta_set_bias_level,
index 591fbf8f7cd95a57002c1980e7ac9233e55fc710..ccae58a1339cc859e88a2346663fdb812ac3b9c0 100644 (file)
@@ -72,6 +72,7 @@ static struct snd_soc_dai_link igep2_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_igep2 = {
        .name = "igep2",
+       .owner = THIS_MODULE,
        .dai_link = &igep2_dai,
        .num_links = 1,
 };
index fc6209b3f20c92ae4b1824fb29a13624b7b1f1d5..597be412f1e40080336be9604940cbfab72012fd 100644 (file)
@@ -289,6 +289,7 @@ static struct snd_soc_dai_link n810_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_n810 = {
        .name = "N810",
+       .owner = THIS_MODULE,
        .dai_link = &n810_dai,
        .num_links = 1,
 
index 68578959e4aa014b93bf6c09eb59cf2cef04996a..071fcb09b8b27df357394ef0e11adbd1bf543b6e 100644 (file)
@@ -70,6 +70,7 @@ static struct snd_soc_dai_link omap3evm_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_omap3evm = {
        .name = "omap3evm",
+       .owner = THIS_MODULE,
        .dai_link = &omap3evm_dai,
        .num_links = 1,
 };
index 7605c37c91e79f085c81d952d0fc9d09f91fdf0d..07794bd10952f7355232a64cd46790e9283d02a0 100644 (file)
@@ -233,6 +233,7 @@ static struct snd_soc_dai_link omap3pandora_dai[] = {
 /* SoC card */
 static struct snd_soc_card snd_soc_card_omap3pandora = {
        .name = "omap3pandora",
+       .owner = THIS_MODULE,
        .dai_link = omap3pandora_dai,
        .num_links = ARRAY_SIZE(omap3pandora_dai),
 };
index 52d471c1eeedc63b81be42aee5b337dded08725f..28d689b2714db4e009190fa8af3b1c31481659b8 100644 (file)
@@ -74,6 +74,7 @@ static struct snd_soc_dai_link omap4_hdmi_dai = {
 
 static struct snd_soc_card snd_soc_omap4_hdmi = {
        .name = "OMAP4HDMI",
+       .owner = THIS_MODULE,
        .dai_link = &omap4_hdmi_dai,
        .num_links = 1,
 };
index 351ec9db384d4590ae6d34103e98316d80dc9a61..d859b597e7ec973cf5477b0bd9f620f5be55b4ab 100644 (file)
@@ -108,6 +108,7 @@ static struct snd_soc_dai_link osk_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_osk = {
        .name = "OSK5912",
+       .owner = THIS_MODULE,
        .dai_link = &osk_dai,
        .num_links = 1,
 
index c3550aeee533d55a2bcbb534c811a549721d99b7..2ee889c502564f42fa69ac8ef31c3f9dd22fe0af 100644 (file)
@@ -72,6 +72,7 @@ static struct snd_soc_dai_link overo_dai = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_card_overo = {
        .name = "overo",
+       .owner = THIS_MODULE,
        .dai_link = &overo_dai,
        .num_links = 1,
 };
index ad16db5363203c9a9a8c9af4ebd5b3684bcaff8a..fada6ef43eeae736750ef60de289efb0fa48af1d 100644 (file)
@@ -383,6 +383,7 @@ static struct snd_soc_codec_conf rx51_codec_conf[] = {
 /* Audio card */
 static struct snd_soc_card rx51_sound_card = {
        .name = "RX-51",
+       .owner = THIS_MODULE,
        .dai_link = rx51_dai,
        .num_links = ARRAY_SIZE(rx51_dai),
        .aux_dev = rx51_aux_dev,
index e8fbf8efdbb85dc120dfc3173180851e9a05be81..2c850662ea7ea79f70978ac19916cf07c9ee7542 100644 (file)
@@ -213,6 +213,7 @@ static struct snd_soc_dai_link sdp3430_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_sdp3430 = {
        .name = "SDP3430",
+       .owner = THIS_MODULE,
        .dai_link = sdp3430_dai,
        .num_links = ARRAY_SIZE(sdp3430_dai),
 
index 2735fa03b74b0dcfb7d1e14f3600e33f5a15176d..175ba9a04edfbd449b8b4822df6b5d1561a25e3a 100644 (file)
@@ -226,6 +226,7 @@ static struct snd_soc_dai_link sdp4430_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_sdp4430 = {
        .name = "SDP4430",
+       .owner = THIS_MODULE,
        .dai_link = sdp4430_dai,
        .num_links = ARRAY_SIZE(sdp4430_dai),
 
index 7641a7fa8f972dc6a32460e11be18b3a3a68c889..981616d61f6762ff459f1a7dd8c3fa9e2a621fd4 100644 (file)
@@ -157,6 +157,7 @@ static struct snd_soc_dai_link zoom2_dai[] = {
 /* Audio machine driver */
 static struct snd_soc_card snd_soc_zoom2 = {
        .name = "Zoom2",
+       .owner = THIS_MODULE,
        .dai_link = zoom2_dai,
        .num_links = ARRAY_SIZE(zoom2_dai),