Merge remote-tracking branches 'asoc/topic/ts3a227e', 'asoc/topic/ts3a277e' and ...
authorMark Brown <broonie@kernel.org>
Mon, 9 Feb 2015 07:10:32 +0000 (15:10 +0800)
committerMark Brown <broonie@kernel.org>
Mon, 9 Feb 2015 07:10:32 +0000 (15:10 +0800)
Documentation/devicetree/bindings/sound/ts3a227e.txt
sound/soc/codecs/ts3a227e.c
sound/soc/txx9/txx9aclc.c

index e8bf23e..a836881 100644 (file)
@@ -13,6 +13,11 @@ Required properties:
  - interrupt-parent:   The parent interrupt controller
  - interrupts:         Interrupt number for /INT pin from the 227e
 
+Optional properies:
+ - ti,micbias:   Intended MICBIAS voltage (datasheet section 9.6.7).
+      Select 0/1/2/3/4/5/6/7 to specify MACBIAS voltage
+      2.1V/2.2V/2.3V/2.4V/2.5V/2.6V/2.7V/2.8V
+      Default value is "1" (2.2V).
 
 Examples:
 
index 9f2dced..9fd80ac 100644 (file)
@@ -20,6 +20,8 @@
 #include <sound/jack.h>
 #include <sound/soc.h>
 
+#include "ts3a227e.h"
+
 struct ts3a227e {
        struct regmap *regmap;
        struct snd_soc_jack *jack;
@@ -79,6 +81,10 @@ static const int ts3a227e_buttons[] = {
 /* TS3A227E_REG_SETTING_2 0x05 */
 #define KP_ENABLE 0x04
 
+/* TS3A227E_REG_SETTING_3 0x06 */
+#define MICBIAS_SETTING_SFT (3)
+#define MICBIAS_SETTING_MASK (0x7 << MICBIAS_SETTING_SFT)
+
 /* TS3A227E_REG_ACCESSORY_STATUS  0x0b */
 #define TYPE_3_POLE 0x01
 #define TYPE_4_POLE_OMTP 0x02
@@ -221,9 +227,9 @@ int ts3a227e_enable_jack_detect(struct snd_soc_component *component,
        struct ts3a227e *ts3a227e = snd_soc_component_get_drvdata(component);
 
        snd_jack_set_key(jack->jack, SND_JACK_BTN_0, KEY_MEDIA);
-       snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOLUMEUP);
-       snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEDOWN);
-       snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOICECOMMAND);
+       snd_jack_set_key(jack->jack, SND_JACK_BTN_1, KEY_VOICECOMMAND);
+       snd_jack_set_key(jack->jack, SND_JACK_BTN_2, KEY_VOLUMEUP);
+       snd_jack_set_key(jack->jack, SND_JACK_BTN_3, KEY_VOLUMEDOWN);
 
        ts3a227e->jack = jack;
        ts3a227e_jack_report(ts3a227e);
@@ -248,6 +254,21 @@ static const struct regmap_config ts3a227e_regmap_config = {
        .num_reg_defaults = ARRAY_SIZE(ts3a227e_reg_defaults),
 };
 
+static int ts3a227e_parse_dt(struct ts3a227e *ts3a227e, struct device_node *np)
+{
+       u32 micbias;
+       int err;
+
+       err = of_property_read_u32(np, "ti,micbias", &micbias);
+       if (!err) {
+               regmap_update_bits(ts3a227e->regmap, TS3A227E_REG_SETTING_3,
+                       MICBIAS_SETTING_MASK,
+                       (micbias & 0x07) << MICBIAS_SETTING_SFT);
+       }
+
+       return 0;
+}
+
 static int ts3a227e_i2c_probe(struct i2c_client *i2c,
                              const struct i2c_device_id *id)
 {
@@ -266,6 +287,14 @@ static int ts3a227e_i2c_probe(struct i2c_client *i2c,
        if (IS_ERR(ts3a227e->regmap))
                return PTR_ERR(ts3a227e->regmap);
 
+       if (dev->of_node) {
+               ret = ts3a227e_parse_dt(ts3a227e, dev->of_node);
+               if (ret) {
+                       dev_err(dev, "Failed to parse device tree: %d\n", ret);
+                       return ret;
+               }
+       }
+
        ret = devm_request_threaded_irq(dev, i2c->irq, NULL, ts3a227e_interrupt,
                                        IRQF_TRIGGER_LOW | IRQF_ONESHOT,
                                        "TS3A227E", ts3a227e);
index 070e44e..88eacfd 100644 (file)
@@ -282,11 +282,6 @@ static struct snd_pcm_ops txx9aclc_pcm_ops = {
        .pointer        = txx9aclc_pcm_pointer,
 };
 
-static void txx9aclc_pcm_free_dma_buffers(struct snd_pcm *pcm)
-{
-       snd_pcm_lib_preallocate_free_for_all(pcm);
-}
-
 static int txx9aclc_pcm_new(struct snd_soc_pcm_runtime *rtd)
 {
        struct snd_card *card = rtd->card->snd_card;
@@ -412,7 +407,6 @@ static struct snd_soc_platform_driver txx9aclc_soc_platform = {
        .remove         = txx9aclc_pcm_remove,
        .ops            = &txx9aclc_pcm_ops,
        .pcm_new        = txx9aclc_pcm_new,
-       .pcm_free       = txx9aclc_pcm_free_dma_buffers,
 };
 
 static int txx9aclc_soc_platform_probe(struct platform_device *pdev)