Boolean. Indicate MIC1/2 input and LOUT1/2/3 outputs are differential,
   rather than single-ended.
 
+- realtek,gpio-config
+  Array of six 8bit elements that configures GPIO.
+    0 - floating (reset value)
+    1 - pull down
+    2 - pull up
+
 Pins on the device (for linking into audio routes):
 
   * IN1P
        realtek,pow-ldo2-gpio =
                <&gpio TEGRA_GPIO(V, 3) GPIO_ACTIVE_HIGH>;
        realtek,in1-differential = "true";
+       realtek,gpio-config = /bits/ 8  <0 0 0 0 0 2>;   /* pull up GPIO6 */
 };
 
        return 0;
 }
 
+/** Configures the gpio as
+ *   0 - floating
+ *   1 - pull down
+ *   2 - pull up
+ */
+static void rt5677_gpio_config(struct rt5677_priv *rt5677, unsigned offset,
+               int value)
+{
+       int shift;
+
+       switch (offset) {
+       case RT5677_GPIO1 ... RT5677_GPIO2:
+               shift = 2 * (1 - offset);
+               regmap_update_bits(rt5677->regmap,
+                       RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL2,
+                       0x3 << shift,
+                       (value & 0x3) << shift);
+               break;
+
+       case RT5677_GPIO3 ... RT5677_GPIO6:
+               shift = 2 * (9 - offset);
+               regmap_update_bits(rt5677->regmap,
+                       RT5677_PR_BASE + RT5677_DIG_IN_PIN_ST_CTRL3,
+                       0x3 << shift,
+                       (value & 0x3) << shift);
+               break;
+
+       default:
+               break;
+       }
+}
+
 static struct gpio_chip rt5677_template_chip = {
        .label                  = "rt5677",
        .owner                  = THIS_MODULE,
 static int rt5677_probe(struct snd_soc_codec *codec)
 {
        struct rt5677_priv *rt5677 = snd_soc_codec_get_drvdata(codec);
+       int i;
 
        rt5677->codec = codec;
 
        regmap_write(rt5677->regmap, RT5677_DIG_MISC, 0x0020);
        regmap_write(rt5677->regmap, RT5677_PWR_DSP2, 0x0c00);
 
+       for (i = 0; i < RT5677_GPIO_NUM; i++)
+               rt5677_gpio_config(rt5677, i, rt5677->pdata.gpio_config[i]);
+
        return 0;
 }
 
                        (rt5677->pow_ldo2 != -ENOENT))
                return rt5677->pow_ldo2;
 
+       of_property_read_u8_array(np, "realtek,gpio-config",
+               rt5677->pdata.gpio_config, RT5677_GPIO_NUM);
+
        return 0;
 }