audio: Add Support for MIC1 and MIC2 routing based on the board type
authorKP, Jeeja <jeeja.kp@intel.com>
Fri, 16 Mar 2012 16:45:58 +0000 (22:15 +0530)
committerbuildbot <buildbot@intel.com>
Sat, 17 Mar 2012 21:41:44 +0000 (14:41 -0700)
BZ: 27733

Analog MIC on CLV VV board use MIC1 path and on PR boards it used MIC2.
This patch added support Mic routing based on board Type.

Change-Id: Ia9b3796cae2ea2d0a88f93bac6111e3f1e117db4
Signed-off-by: KP, Jeeja <jeeja.kp@intel.com>
Signed-off-by: Arulselvan M <arulselvan.m@intel.com>
Reviewed-on: http://android.intel.com:8080/39380
Reviewed-by: buildbot <buildbot@intel.com>
Tested-by: buildbot <buildbot@intel.com>
arch/x86/include/asm/intel-mid.h
arch/x86/platform/intel-mid/board-ctp.c
sound/soc/codecs/cs42l73.c
sound/soc/codecs/cs42l73.h
sound/soc/mid-x86/clv_machine.c

index 6b4e530..e104b7d 100644 (file)
@@ -139,6 +139,14 @@ enum {
 };
 extern u32 mfld_board_id(void);
 
+/* Right now board id information is updated from sfi table print*/
+
+enum {
+       CTP_BID_UNKNOWN = 0,
+       CTP_BID_VV      = 0x08,
+       CTP_BID_PR0     = 0x04
+};
+extern u32 ctp_board_id(void);
 
 /*
  * Penwell uses spread spectrum clock, so the freq number is not exactly
index 389966c..d1eb232 100644 (file)
@@ -1538,8 +1538,16 @@ static int board_id_proc_show(struct seq_file *m, void *v)
 {
        char *bid;
 
-       /* Will add IDs later, but return unknown right now. */
-       bid = "unknown";
+       switch (board_id) {
+       case CTP_BID_VV:
+               bid = "ctp-vv";
+               break;
+       case CTP_BID_PR0:
+               bid = "ctp-pr0";
+               break;
+       default:
+               bid = "unknown";
+       }
        seq_printf(m, "boardid=%s\n", bid);
 
        return 0;
index c43ac92..3b25f35 100644 (file)
@@ -28,6 +28,7 @@
 #include <sound/initval.h>
 #include <sound/tlv.h>
 #include <sound/jack.h>
+#include <asm/intel-mid.h>
 #include "cs42l73.h"
 
 struct sp_config {
@@ -1104,22 +1105,29 @@ static int cs42l73_resume(struct snd_soc_codec *codec)
        return 0;
 }
 
-static int cs42l73_set_mic2_bias(struct snd_soc_codec *codec, int state)
+static int cs42l73_set_mic_bias(struct snd_soc_codec *codec, int state)
 {
+
+       mutex_lock(&codec->mutex);
        switch (state) {
-       case MIC2_BIAS_DISABLE:
-               mutex_lock(&codec->mutex);
-               snd_soc_dapm_disable_pin(&codec->dapm, "MIC2 Bias");
-               snd_soc_dapm_sync(&codec->dapm);
-               mutex_unlock(&codec->mutex);
+       case MIC_BIAS_DISABLE:
+               if (ctp_board_id() == CTP_BID_VV)
+                       snd_soc_dapm_disable_pin(&codec->dapm, "MIC1 Bias");
+               else
+                       snd_soc_dapm_disable_pin(&codec->dapm, "MIC2 Bias");
                break;
-       case MIC2_BIAS_ENABLE:
-               mutex_lock(&codec->mutex);
-               snd_soc_dapm_force_enable_pin(&codec->dapm, "MIC2 Bias");
-               snd_soc_dapm_sync(&codec->dapm);
-               mutex_unlock(&codec->mutex);
+       case MIC_BIAS_ENABLE:
+               if (ctp_board_id() == CTP_BID_VV)
+                       snd_soc_dapm_force_enable_pin(&codec->dapm,
+                                                       "MIC1 Bias");
+               else
+                       snd_soc_dapm_force_enable_pin(&codec->dapm,
+                                                       "MIC2 Bias");
                break;
        }
+       snd_soc_dapm_sync(&codec->dapm);
+       mutex_unlock(&codec->mutex);
+
        return 0;
 }
 
@@ -1135,16 +1143,14 @@ void cs42l73_hp_detection(struct snd_soc_codec *codec,
 
        if (plug_status) {
                pr_debug("In cs42l73_hp_detection disable micbias\n");
-               cs42l73_set_mic2_bias(codec, MIC2_BIAS_DISABLE);
+               cs42l73_set_mic_bias(codec, MIC_BIAS_DISABLE);
        } else {
-
                micbias = snd_soc_read(codec, CS42L73_PWRCTL2);
-               micbias &= 0x40; /*=7*/
+               micbias &= 0xC0;
                if (micbias) {
-                       /* MICBIAS is off so this is a plug - look for HS/HP */
-                       cs42l73_set_mic2_bias(codec, MIC2_BIAS_ENABLE);
+                       cs42l73_set_mic_bias(codec, MIC_BIAS_ENABLE);
                        hs_status = 1;
-               }               
+               }
 
                snd_soc_update_bits(codec, CS42L73_IM1, MIC2_SDET, MIC2_SDET);
                mdelay(1000);
@@ -1154,7 +1160,7 @@ void cs42l73_hp_detection(struct snd_soc_codec *codec,
                if (hs_status) {
                        if ((reg & MIC2_SDET)) {
                                status = SND_JACK_HEADPHONE;
-                               cs42l73_set_mic2_bias(codec, MIC2_BIAS_DISABLE);
+                               cs42l73_set_mic_bias(codec, MIC_BIAS_DISABLE);
                                pr_debug("Headphone detected\n");
                        } else {
                                status = SND_JACK_HEADSET;
index ddc1e68..0e844d5 100644 (file)
 #define PDN_ASP_SDIN           (1 << 2)
 #define PDN_XSP_SDOUT          (1 << 1)
 #define PDN_XSP_SDIN           (1 << 0)
-#define MIC2_BIAS_DISABLE      1
-#define MIC2_BIAS_ENABLE       0
+#define MIC_BIAS_DISABLE       1
+#define MIC_BIAS_ENABLE        0
 
 /* CS42L73_PWRCTL3 */
 #define PDN_THMS               (1 << 5)
index f59e32a..f9d9a81 100644 (file)
@@ -198,6 +198,7 @@ static const struct snd_soc_dapm_widget clv_dapm_widgets[] = {
 
 /* CDB42L73 Audio Map */
 static const struct snd_soc_dapm_route clv_audio_map[] = {
+       {"MIC1", NULL, "Headset Mic"},
        {"MIC2", NULL, "Headset Mic"},
        /* Headphone (L+R)->  HPOUTA, HPOUTB */
        {"Headphone", NULL, "HPOUTA"},
@@ -254,6 +255,11 @@ static int clv_init(struct snd_soc_pcm_runtime *runtime)
        snd_soc_dapm_add_routes(dapm, clv_audio_map,
                                ARRAY_SIZE(clv_audio_map));
 
+       /*In VV board MIC1 is connected  and MIC2 is PR boards */
+       if (ctp_board_id() == CTP_BID_VV)
+               snd_soc_dapm_disable_pin(dapm, "MIC1");
+       else
+               snd_soc_dapm_disable_pin(dapm, "MIC2");
        mutex_lock(&codec->mutex);
        snd_soc_dapm_sync(dapm);
        mutex_unlock(&codec->mutex);