static int msm8930_audrx_init(struct snd_soc_pcm_runtime *rtd) { int err; struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; struct snd_soc_dai *codec_dai = rtd->codec_dai; /* Tabla SLIMBUS configuration * RX1, RX2, RX3, RX4, RX5 * TX1, TX2, TX3, TX4, TX5 */ unsigned int rx_ch[SITAR_RX_MAX] = {138, 139, 140, 141, 142}; unsigned int tx_ch[SITAR_TX_MAX] = {128, 129, 130, 131, 132}; pr_debug("%s()\n", __func__); snd_soc_dapm_new_controls(dapm, msm8930_dapm_widgets, ARRAY_SIZE(msm8930_dapm_widgets)); snd_soc_dapm_add_routes(dapm, common_audio_map, ARRAY_SIZE(common_audio_map)); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Pos"); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Neg"); snd_soc_dapm_sync(dapm); err = snd_soc_jack_new(codec, "Headset Jack", (SND_JACK_HEADSET | SND_JACK_OC_HPHL | SND_JACK_OC_HPHR), &hs_jack); if (err) { pr_err("failed to create new jack\n"); return err; } err = snd_soc_jack_new(codec, "Button Jack", SITAR_JACK_BUTTON_MASK, &button_jack); if (err) { pr_err("failed to create new jack\n"); return err; } codec_clk = clk_get(cpu_dai->dev, "osr_clk"); snd_soc_dai_set_channel_map(codec_dai, ARRAY_SIZE(tx_ch), tx_ch, ARRAY_SIZE(rx_ch), rx_ch); mbhc_cfg.gpio = 37; mbhc_cfg.gpio_irq = gpio_to_irq(mbhc_cfg.gpio); sitar_hs_detect(codec, &mbhc_cfg); if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917) { /* Initialize default PMIC speaker gain */ pm8xxx_spk_gain(DEFAULT_PMIC_SPK_GAIN); } return 0; }
static int msm8930_audrx_init(struct snd_soc_pcm_runtime *rtd) { int err; struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; pr_debug("%s()\n", __func__); rtd->pmdown_time = 0; err = snd_soc_add_controls(codec, sitar_msm8930_controls, ARRAY_SIZE(sitar_msm8930_controls)); if (err < 0) return err; snd_soc_dapm_new_controls(dapm, msm8930_dapm_widgets, ARRAY_SIZE(msm8930_dapm_widgets)); snd_soc_dapm_add_routes(dapm, common_audio_map, ARRAY_SIZE(common_audio_map)); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Pos"); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Neg"); snd_soc_dapm_sync(dapm); err = snd_soc_jack_new(codec, "Headset Jack", (SND_JACK_HEADSET | SND_JACK_OC_HPHL | SND_JACK_OC_HPHR), &hs_jack); if (err) { pr_err("failed to create new jack\n"); return err; } err = snd_soc_jack_new(codec, "Button Jack", SITAR_JACK_BUTTON_MASK, &button_jack); if (err) { pr_err("failed to create new jack\n"); return err; } codec_clk = clk_get(cpu_dai->dev, "osr_clk"); mbhc_cfg.gpio = 37; mbhc_cfg.gpio_irq = gpio_to_irq(mbhc_cfg.gpio); sitar_hs_detect(codec, &mbhc_cfg); /* Initialize default PMIC speaker gain */ pm8xxx_spk_gain(DEFAULT_PMIC_SPK_GAIN); return 0; }
static int msm8930_pmic_gain_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int ret = 0; msm8930_pmic_spk_gain = ucontrol->value.integer.value[0]; ret = pm8xxx_spk_gain(msm8930_pmic_spk_gain); pr_debug("%s: msm8930_pmic_spk_gain = %d" " ucontrol->value.integer.value[0] = %d\n", __func__, msm8930_pmic_spk_gain, (int) ucontrol->value.integer.value[0]); return ret; }
static int msm8930_pmic_gain_put(struct snd_kcontrol *kcontrol, struct snd_ctl_elem_value *ucontrol) { int ret = 0; msm8930_pmic_spk_gain = ucontrol->value.integer.value[0]; if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917) ret = pm8xxx_spk_gain(msm8930_pmic_spk_gain); pr_debug("%s: msm8930_pmic_spk_gain = %d" " ucontrol->value.integer.value[0] = %d\n", __func__, msm8930_pmic_spk_gain, (int) ucontrol->value.integer.value[0]); return ret; }
static int pm8xxx_spk_config(void) { u16 addr; int ret = 0; if (spk_defined() == false) { pr_err("Invalid spk handle or no spk_chip\n"); return -ENODEV; } addr = the_spk_chip->base + PM8XXX_SPK_TEST_REG_1_OFF; ret = pm8xxx_spk_bank_write(addr, 6, PWM_EN_MASK & 0); if (!ret) ret = pm8xxx_spk_gain(PM8XXX_SPK_GAIN); return ret; }
static int msm8930_audrx_init(struct snd_soc_pcm_runtime *rtd) { int err, ret; struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; pr_debug("%s()\n", __func__); snd_soc_dapm_new_controls(dapm, msm8930_dapm_widgets, ARRAY_SIZE(msm8930_dapm_widgets)); if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE) snd_soc_dapm_add_routes(dapm, common_audio_map_sglte, ARRAY_SIZE(common_audio_map_sglte)); else snd_soc_dapm_add_routes(dapm, common_audio_map, ARRAY_SIZE(common_audio_map)); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Pos"); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Neg"); snd_soc_dapm_sync(dapm); err = snd_soc_jack_new(codec, "Headset Jack", MSM8930_JACK_TYPES, &hs_jack); if (err) { pr_err("failed to create new jack\n"); return err; } err = snd_soc_jack_new(codec, "Button Jack", SITAR_JACK_BUTTON_MASK, &button_jack); if (err) { pr_err("failed to create new jack\n"); return err; } ret = snd_jack_set_key(button_jack.jack, SND_JACK_BTN_0, KEY_MEDIA); if (ret) { pr_err("%s: Failed to set code for btn-0\n", __func__); return err; } codec_clk = clk_get(cpu_dai->dev, "osr_clk"); /* * Switch is present only in 8930 CDP and SGLTE */ if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE || machine_is_msm8930_cdp()) mbhc_cfg.swap_gnd_mic = msm8930_swap_gnd_mic; if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE) { mbhc_cfg.gpio = GPIO_HS_DET_SGLTE; mbhc_cfg.gpio_level_insert = 0; } else mbhc_cfg.gpio = GPIO_HS_DET; /* * GPIO for headset detect is present in all devices * MTP/Fluid/CDP/SGLTE */ err = gpio_request(mbhc_cfg.gpio, "HEADSET_DETECT"); if (err) { pr_err("%s: Failed to request gpio %d\n", __func__, mbhc_cfg.gpio); return err; } mbhc_cfg.gpio_irq = gpio_to_irq(mbhc_cfg.gpio); sitar_hs_detect(codec, &mbhc_cfg); if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917) { /* Initialize default PMIC speaker gain */ pm8xxx_spk_gain(DEFAULT_PMIC_SPK_GAIN); } return 0; }
static int msm8930_audrx_init(struct snd_soc_pcm_runtime *rtd) { int err; struct snd_soc_codec *codec = rtd->codec; struct snd_soc_dapm_context *dapm = &codec->dapm; struct snd_soc_dai *cpu_dai = rtd->cpu_dai; pr_debug("%s()\n", __func__); snd_soc_dapm_new_controls(dapm, msm8930_dapm_widgets, ARRAY_SIZE(msm8930_dapm_widgets)); snd_soc_dapm_add_routes(dapm, common_audio_map, ARRAY_SIZE(common_audio_map)); #if 1 snd_soc_dapm_add_routes(dapm, boston_evt2_audio_map, ARRAY_SIZE(boston_evt2_audio_map)); #else if (system_rev < EVT2) { snd_soc_dapm_add_routes(dapm, boston_evt1_audio_map, ARRAY_SIZE(boston_evt1_audio_map)); } else { snd_soc_dapm_add_routes(dapm, boston_evt2_audio_map, ARRAY_SIZE(boston_evt2_audio_map)); } #endif snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Pos"); snd_soc_dapm_enable_pin(dapm, "Ext Spk Left Neg"); snd_soc_dapm_sync(dapm); err = snd_soc_jack_new(codec, "Headset Jack", (SND_JACK_HEADSET | SND_JACK_OC_HPHL | SND_JACK_OC_HPHR), &hs_jack); if (err) { pr_err("failed to create new jack\n"); return err; } err = snd_soc_jack_new(codec, "Button Jack", SITAR_JACK_BUTTON_MASK, &button_jack); if (err) { pr_err("failed to create new jack\n"); return err; } codec_clk = clk_get(cpu_dai->dev, "osr_clk"); /* Jen Chang modify for headset gpio detection pin */ mbhc_cfg.gpio = JACK_GPIO; //37; /* Jen Chang, 20121127 */ mbhc_cfg.gpio_irq = gpio_to_irq(mbhc_cfg.gpio); sitar_hs_detect(codec, &mbhc_cfg); if (socinfo_get_pmic_model() != PMIC_MODEL_PM8917) { /* Initialize default PMIC speaker gain */ pm8xxx_spk_gain(DEFAULT_PMIC_SPK_GAIN); } return 0; }