int ctp_vb_init(struct snd_soc_pcm_runtime *runtime) { struct snd_soc_codec *codec = runtime->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; int ret; struct snd_soc_card *card = runtime->card; struct ctp_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card); ret = snd_soc_add_card_controls(card, ctp_vb_snd_controls, ARRAY_SIZE(ctp_vb_snd_controls)); if (ret) { pr_err("soc_add_controls failed %d", ret); return ret; } /* Set codec bias level */ ctp_set_bias_level(card, dapm, SND_SOC_BIAS_OFF); card->dapm.idle_bias_off = true; /* Add Jack specific widgets */ ret = snd_soc_dapm_new_controls(dapm, ctp_vb_dapm_widgets, ARRAY_SIZE(ctp_vb_dapm_widgets)); if (ret) return ret; /* Set up Jack specific audio path audio_map */ snd_soc_dapm_add_routes(dapm, ctp_vb_audio_map, ARRAY_SIZE(ctp_vb_audio_map)); /* Add Comms specefic controls */ ctx->comms_ctl.ssp_bt_sco_master_mode = false; ctx->comms_ctl.ssp_voip_master_mode = false; ctx->comms_ctl.ssp_modem_master_mode = false; ret = snd_soc_add_card_controls(card, ssp_comms_controls, ARRAY_SIZE(ssp_comms_controls)); if (ret) { pr_err("Add Comms Controls failed %d", ret); return ret; } /* Keep the voice call paths active during suspend. Mark the end points ignore_suspend */ snd_soc_dapm_ignore_suspend(dapm, "EAROUT"); snd_soc_dapm_ignore_suspend(dapm, "Ext Spk"); snd_soc_dapm_ignore_suspend(dapm, "Headphone"); snd_soc_dapm_ignore_suspend(dapm, "Headset Mic"); snd_soc_dapm_ignore_suspend(dapm, "DMICA"); snd_soc_dapm_ignore_suspend(dapm, "DMICB"); snd_soc_dapm_disable_pin(dapm, "MIC2"); snd_soc_dapm_disable_pin(dapm, "SPKLINEOUT"); mutex_lock(&codec->mutex); snd_soc_dapm_sync(dapm); mutex_unlock(&codec->mutex); return ret; }
static int ctp_wm5102_init(struct snd_soc_pcm_runtime *runtime) { int ret; struct snd_soc_card *card = runtime->card; struct ctp_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card); struct snd_soc_codec *codec; struct snd_soc_dapm_context *dapm; codec = ctp_get_codec(card, "wm5102-codec"); if (!codec) return -EIO; dapm = &codec->dapm; /* Set codec bias level */ ctp_set_bias_level(card, dapm, SND_SOC_BIAS_OFF); card->dapm.idle_bias_off = true; /* Disable MICBIAS3 bypass mode and set CAP mode. * Capacitors are connected to DMIC on 1525-EV1 board */ snd_soc_update_bits(codec, ARIZONA_MIC_BIAS_CTRL_3, ARIZONA_MICB1_BYPASS_MASK | ARIZONA_MICB1_EXT_CAP_MASK, ARIZONA_MICB1_EXT_CAP); /* Set codec clock */ ret = snd_soc_codec_set_sysclk(codec, ARIZONA_CLK_SYSCLK, ARIZONA_CLK_SRC_FLL1, SYSCLK_RATE, SND_SOC_CLOCK_IN); if (ret != 0) { pr_err("failed: %d\n", ret); return ret; } /* Add Jack specific widgets */ ret = snd_soc_dapm_new_controls(dapm, ctp_dapm_widgets, ARRAY_SIZE(ctp_dapm_widgets)); if (ret) return ret; /* Set up Jack specific audio path audio_map */ snd_soc_dapm_add_routes(dapm, ctp_audio_map, ARRAY_SIZE(ctp_audio_map)); /* Add Comms specefic controls */ ctx->comms_ctl.ssp_bt_sco_master_mode = false; ctx->comms_ctl.ssp_voip_master_mode = false; ctx->comms_ctl.ssp_modem_master_mode = false; ret = snd_soc_add_card_controls(card, ssp_comms_controls, ARRAY_SIZE(ssp_comms_controls)); if (ret) { pr_err("Add Comms Controls failed %d", ret); return ret; } /* Keep the voice call paths active during suspend. Mark the end points ignore_suspend */ snd_soc_dapm_ignore_suspend(dapm, "HPOUT1R"); snd_soc_dapm_ignore_suspend(dapm, "HPOUT1L"); snd_soc_dapm_disable_pin(dapm, "MICBIAS1"); snd_soc_dapm_disable_pin(dapm, "SPKOUTLP"); snd_soc_dapm_disable_pin(dapm, "SPKOUTLN"); snd_soc_dapm_ignore_suspend(dapm, "SPKOUTRP"); snd_soc_dapm_ignore_suspend(dapm, "SPKOUTRN"); mutex_lock(&codec->mutex); snd_soc_dapm_sync(dapm); mutex_unlock(&codec->mutex); return ret; }
int ctp_init(struct snd_soc_pcm_runtime *runtime) { int ret; struct snd_soc_codec *codec = runtime->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_card *card = runtime->card; struct ctp_mc_private *ctx = snd_soc_card_get_drvdata(runtime->card); //#ifndef UART_DEBUG // static int hp_enable; //#endif pr_debug("%s\n", __func__); /* Set codec bias level */ ctp_set_bias_level(card, dapm, SND_SOC_BIAS_OFF); card->dapm.idle_bias_off = true; /* Add Jack specific widgets */ ret = snd_soc_dapm_new_controls(dapm, ctp_dapm_widgets, ARRAY_SIZE(ctp_dapm_widgets)); if (ret) return ret; /* Set up Jack specific audio path audio_map */ snd_soc_dapm_add_routes(dapm, ctp_audio_map, ARRAY_SIZE(ctp_audio_map)); /* Add Comms specefic controls */ ctx->comms_ctl.ssp_bt_sco_master_mode = false; /* Set ssp_voip to master mode by default */ #if 0 ctx->comms_ctl.ssp_voip_master_mode = false; #else ctx->comms_ctl.ssp_voip_master_mode = true; pr_debug("ctp_init ssp_voip_master_mode %d\n", ctx->comms_ctl.ssp_voip_master_mode); #endif ctx->comms_ctl.ssp_modem_master_mode = false; ret = snd_soc_add_card_controls(card, ssp_comms_controls, ARRAY_SIZE(ssp_comms_controls)); if (ret) { pr_err("Add Comms Controls failed %d", ret); return ret; } /* Keep the voice call paths active during suspend. Mark the end points ignore_suspend */ snd_soc_dapm_ignore_suspend(dapm, "HPOL"); snd_soc_dapm_ignore_suspend(dapm, "HPOR"); snd_soc_dapm_ignore_suspend(dapm, "SPOL"); snd_soc_dapm_ignore_suspend(dapm, "SPOR"); snd_soc_dapm_ignore_suspend(dapm, "AIF2 Playback"); snd_soc_dapm_ignore_suspend(dapm, "AIF2 Capture"); snd_soc_dapm_ignore_suspend(dapm, "AIF2TX"); snd_soc_dapm_ignore_suspend(dapm, "AIF2RX"); snd_soc_dapm_ignore_suspend(dapm, "MonoP"); snd_soc_dapm_ignore_suspend(dapm, "MonoN"); snd_soc_dapm_ignore_suspend(dapm, "Headset Mic"); snd_soc_dapm_ignore_suspend(dapm, "Headphone"); snd_soc_dapm_ignore_suspend(dapm, "Ext Spk"); snd_soc_dapm_ignore_suspend(dapm, "Int Mic"); snd_soc_dapm_ignore_suspend(dapm, "Receiver"); snd_soc_dapm_ignore_suspend(dapm, "DMIC L2"); snd_soc_dapm_ignore_suspend(dapm, "DMIC R2"); snd_soc_dapm_ignore_suspend(dapm, "IN1P"); snd_soc_dapm_ignore_suspend(dapm, "IN1N"); snd_soc_dapm_ignore_suspend(dapm, "IN2P"); snd_soc_dapm_ignore_suspend(dapm, "IN2N"); snd_soc_dapm_enable_pin(dapm, "Headset Mic"); snd_soc_dapm_enable_pin(dapm, "Headphone"); snd_soc_dapm_enable_pin(dapm, "Ext Spk"); snd_soc_dapm_enable_pin(dapm, "Int Mic"); snd_soc_dapm_enable_pin(dapm, "Receiver"); mutex_lock(&codec->mutex); snd_soc_dapm_sync(dapm); mutex_unlock(&codec->mutex); /*Register switch Control as misc driver*/ ret = misc_register(&switch_ctrl); if (ret) pr_err("%s: couldn't register control device\n", __func__); rt5647_codec = codec; //#ifndef UART_DEBUG // /* use hard-coded GPIO value before IFWI ready */ // /* hp_enable = get_gpio_by_name("AUDIO_DEBUG"); */ // hp_enable = 172; // if (hp_enable > 0) { // pr_info("Get AUDIO_DEBUG name!\n"); // ret = gpio_request_one(hp_enable, GPIOF_DIR_OUT, "AUDIO_DEBUG"); // if (ret) // pr_err("gpio_request AUDIO_DEBUG failed!\n"); // // /*Set GPIO O(H) to default => Low:UART; High:headset */ // gpio_direction_output(hp_enable, 1); // pr_info("AUDIO_DEBUG value = %d\n", gpio_get_value(hp_enable)); // } else // pr_err("get_gpio AUDIO_DEBUG failed!\n"); //#endif return ret; }