asoc: codecs: add codec irq init to detect jack
Simon Je [Mon, 10 Jun 2013 08:50:05 +0000 (17:50 +0900)]
add codec irq init func in order to trigger interrupt to AP
when hotpluging jack

Bug 1287224

Change-Id: Iff617a74ef50f7833e270be84d308208129f83eb
Signed-off-by: Simon Je <sje@nvidia.com>
Reviewed-on: http://git-master/r/237173
Reviewed-by: Riham Haidar <rhaidar@nvidia.com>
Tested-by: Riham Haidar <rhaidar@nvidia.com>

sound/soc/codecs/rt5639.c
sound/soc/codecs/rt5639.h

index 3ff3b7e..a97f0e0 100644 (file)
@@ -109,10 +109,27 @@ static struct rt5639_init_reg init_list[] = {
        {RT5639_IRQ_CTRL2       , 0x8000},/*set MICBIAS short current to IRQ */
                                        /*( if sticky set regBE : 8800 ) */
 #endif
-       {RT5639_JD_CTRL         , 0x6000},/* JD2 as jack detection source */
+       {RT5639_JD_CTRL         , 0x6000},/* JD2 as jack detection source */
 };
 #define RT5639_INIT_REG_LEN ARRAY_SIZE(init_list)
 
+static struct rt5639_init_reg irq_jd_init_list[] = {
+   {RT5639_GPIO_CTRL1  , 0x8400},/* set GPIO1 to IRQ */
+   {RT5639_GPIO_CTRL3  , 0x0004},/* set GPIO1 output */
+   {RT5639_IRQ_CTRL1   , 0x8000},/* enable JD IRQ and set active low */
+};
+#define RT5639_IRQ_JD_INIT_REG_LEN ARRAY_SIZE(irq_jd_init_list)
+
+int rt5639_irq_jd_reg_init(struct snd_soc_codec *codec)
+{
+   int i;
+
+   for (i = 0; i < RT5639_IRQ_JD_INIT_REG_LEN; i++)
+       snd_soc_write(codec, irq_jd_init_list[i].reg, irq_jd_init_list[i].val);
+
+   return 0;
+}
+
 static int rt5639_reg_init(struct snd_soc_codec *codec)
 {
        int i;
index 05f9e6e..42cfe3f 100644 (file)
@@ -2143,4 +2143,5 @@ struct rt5639_priv {
 int rt5639_conn_mux_path(struct snd_soc_codec *codec,
                char *widget_name, char *path_name);
 
+int rt5639_irq_jd_reg_init(struct snd_soc_codec *codec);
 #endif /* __RT5639_H__ */