static void msm8960_ext_spk_power_amp_off(u32 spk) { // int ret = 0; // chenjun if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if (!msm8930_ext_spk_pamp) return; #if 0 if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { gpio_free(LEFT_SPKR_AMPL_GPIO); msm8930_ext_spk_pamp = 0; return; } if (machine_is_msm8930_mtp() || machine_is_msm8930_fluid()) { pr_debug("%s: Free speaker boost gpio %u\n", __func__, SPKR_BOOST_GPIO); gpio_direction_output(SPKR_BOOST_GPIO, 0); gpio_free(SPKR_BOOST_GPIO); } else if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE) { ret = pm8xxx_gpio_config(spkr_boost_enable_gpio, &SPKR_OFF); if (ret) { pr_err("%s: Failure: spkr boost gpio OFF %u\n", __func__, spkr_boost_enable_gpio); return; } else { pr_debug("%s:Config PMIC8038 gpio for speaker" \ " OFF successfully\n", __func__); } } pm8xxx_spk_enable(MSM8930_SPK_OFF); #else // chenjun:gpio 14 and 19 are used for speaker amplifier gpio_direction_output(YDA_SPKR_EN0_GPIO, 0); gpio_free(YDA_SPKR_EN0_GPIO); pr_err("chenjun:%s:disable SPKR EN0(%d)\n", __func__, YDA_SPKR_EN0_GPIO); gpio_direction_output(YDA_SPKR_EN1_GPIO, 0); gpio_free(YDA_SPKR_EN1_GPIO); pr_err("chenjun:%s:disable SPKR EN1(%d)\n", __func__, YDA_SPKR_EN1_GPIO); #endif msm8930_ext_spk_pamp = 0; pr_debug("%s: slepping 4 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(4000, 4000); } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
static void msm8960_ext_spk_power_amp_off(u32 spk) { if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if (!msm8930_ext_spk_pamp) return; if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { gpio_free(LEFT_SPKR_AMPL_GPIO); msm8930_ext_spk_pamp = 0; return; } if (machine_is_msm8930_mtp() || machine_is_msm8930_fluid()) { pr_debug("%s: Free speaker boost gpio %u\n", __func__, SPKR_BOOST_GPIO); gpio_direction_output(SPKR_BOOST_GPIO, 0); gpio_free(SPKR_BOOST_GPIO); } pm8xxx_spk_enable(MSM8930_SPK_OFF); msm8930_ext_spk_pamp = 0; pr_debug("%s: slepping 10 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(10000, 10000); } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
static void msm8960_ext_spk_power_amp_on(u32 spk) { int ret = 0; if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { pr_debug("%s() External Bottom Speaker Ampl already " "turned on. spk = 0x%08x\n", __func__, spk); return; } msm8930_ext_spk_pamp |= spk; if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { ret = msm8930_cfg_spkr_gpio( LEFT_SPKR_AMPL_GPIO, 1, "LEFT_SPKR_AMPL"); if (ret) { pr_err("%s: Failed to config ampl gpio %u\n", __func__, LEFT_SPKR_AMPL_GPIO); return; } } else { /* * 8930 CDP does not have a 5V speaker boost, * hence the GPIO enable for speaker boost is * only required for platforms other than CDP */ if (!machine_is_msm8930_cdp()) { ret = msm8930_cfg_spkr_gpio( SPKR_BOOST_GPIO, 1, "SPKR_BOOST"); if (ret) { pr_err("%s: Failure: spkr boost gpio %u\n", __func__, SPKR_BOOST_GPIO); return; } } pm8xxx_spk_enable(MSM8930_SPK_ON); } pr_debug("%s: sleeping 10 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(10000, 10000); } } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
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 void msm8960_ext_spk_power_amp_on(u32 spk) { int ret = 0; if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { pr_debug("%s() External Bottom Speaker Ampl already " "turned on. spk = 0x%08x\n", __func__, spk); return; } msm8930_ext_spk_pamp |= spk; if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { ret = msm8930_cfg_spkr_gpio( LEFT_SPKR_AMPL_GPIO, 1, "LEFT_SPKR_AMPL"); if (ret) { pr_err("%s: Failed to config ampl gpio %u\n", __func__, LEFT_SPKR_AMPL_GPIO); return; } } else { if (machine_is_msm8930_mtp() || machine_is_msm8930_fluid()) { ret = msm8930_cfg_spkr_gpio( SPKR_BOOST_GPIO, 1, "SPKR_BOOST"); if (ret) { pr_err("%s: Failure: spkr boost gpio %u\n", __func__, SPKR_BOOST_GPIO); return; } } pm8xxx_spk_enable(MSM8930_SPK_ON); } pr_debug("%s: slepping 4 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(4000, 4000); } } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
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 void msm8960_ext_spk_power_amp_off(u32 spk) { // int ret = 0; // chenjun if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if (!msm8930_ext_spk_pamp) return; #if 0 if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { gpio_free(LEFT_SPKR_AMPL_GPIO); msm8930_ext_spk_pamp = 0; return; } if (!machine_is_msm8930_cdp()) { pr_debug("%s: Free speaker boost gpio %u\n", __func__, SPKR_BOOST_GPIO); gpio_direction_output(SPKR_BOOST_GPIO, 0); gpio_free(SPKR_BOOST_GPIO); } pm8xxx_spk_enable(MSM8930_SPK_OFF); #else // chenjun:gpio 14 and 19 are used for speaker amplifier gpio_direction_output(YDA_SPKR_EN0_GPIO, 0); gpio_free(YDA_SPKR_EN0_GPIO); pr_err("chenjun:%s:disable SPKR EN0(%d)\n", __func__, YDA_SPKR_EN0_GPIO); gpio_direction_output(YDA_SPKR_EN1_GPIO, 0); gpio_free(YDA_SPKR_EN1_GPIO); pr_err("chenjun:%s:disable SPKR EN1(%d)\n", __func__, YDA_SPKR_EN1_GPIO); #endif msm8930_ext_spk_pamp = 0; pr_debug("%s: slepping 10 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(10000, 10000); } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
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)); 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 | SND_JACK_UNSUPPORTED),/*SW-MM-RC-NONCTIA-00*/ &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); 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, 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 mipi_dsi_cdp_panel_power(int on) { static struct regulator *reg_l8, *reg_l23, *reg_l2; /* Control backlight GPIO (24) directly when using PM8917 */ #ifndef CONFIG_FB_MSM_MIPI_WARPLTE_OTM_VIDEO_WVGA_PT_PANEL int gpio24 = PM8917_GPIO_PM_TO_SYS(24); #endif int rc; printk("lizhiye, %s: state : %d, dsi_power_on = %d\n", __func__, on, dsi_power_on); if (!dsi_power_on) { reg_l8 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdc"); if (IS_ERR(reg_l8)) { pr_err("could not get 8038_l8, rc = %ld\n", PTR_ERR(reg_l8)); return -ENODEV; } reg_l23 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vddio"); if (IS_ERR(reg_l23)) { pr_err("could not get 8038_l23, rc = %ld\n", PTR_ERR(reg_l23)); return -ENODEV; } reg_l2 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdda"); if (IS_ERR(reg_l2)) { pr_err("could not get 8038_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l8, 2800000, 3000000); if (rc) { pr_err("set_voltage l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l23, 1800000, 1800000); if (rc) { pr_err("set_voltage l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } rc = gpio_request(DISP_RST_GPIO, "disp_rst_n"); if (rc) { pr_err("request gpio DISP_RST_GPIO failed, rc=%d\n", rc); gpio_free(DISP_RST_GPIO); return -ENODEV; } #ifdef CONFIG_FB_MSM_MIPI_WARPLTE_OTM_VIDEO_WVGA_PT_PANEL rc = gpio_request(DISP_BACKLIGHT_GPIO, "disp_rst_n"); if (rc) { pr_err("lizhiye, request gpio DISP_BACKLIGHT_GPIO failed, rc=%d\n", rc); gpio_free(DISP_BACKLIGHT_GPIO); return -ENODEV; } #endif rc = gpio_request(DISP_3D_2D_MODE, "disp_3d_2d"); if (rc) { pr_err("request gpio DISP_3D_2D_MODE failed, rc=%d\n", rc); gpio_free(DISP_3D_2D_MODE); return -ENODEV; } rc = gpio_direction_output(DISP_3D_2D_MODE, 0); if (rc) { pr_err("gpio_direction_output failed for %d gpio rc=%d\n", DISP_3D_2D_MODE, rc); return -ENODEV; } #ifndef CONFIG_FB_MSM_MIPI_WARPLTE_OTM_VIDEO_WVGA_PT_PANEL if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { rc = gpio_request(gpio24, "disp_bl"); if (rc) { pr_err("request for gpio 24 failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(gpio24, 0); novatek_pdata.gpio_set_backlight = pm8917_gpio_set_backlight; } #endif dsi_power_on = true; } if (on) { rc = regulator_set_optimum_mode(reg_l8, 100000); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100000); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l8); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l23); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } usleep(10000); #if 0 gpio_set_value(DISP_RST_GPIO, 1); usleep(10); gpio_set_value(DISP_RST_GPIO, 0); usleep(20); gpio_set_value(DISP_RST_GPIO, 1); #endif gpio_set_value(DISP_3D_2D_MODE, 1); usleep(20); #ifndef CONFIG_FB_MSM_MIPI_WARPLTE_OTM_VIDEO_WVGA_PT_PANEL if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio24, 1); #endif } else { gpio_set_value(DISP_RST_GPIO, 0); rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l8); if (rc) { pr_err("disable reg_l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l23); if (rc) { pr_err("disable reg_l23 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l8, 100); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } gpio_set_value(DISP_3D_2D_MODE, 0); usleep(20); #ifndef CONFIG_FB_MSM_MIPI_WARPLTE_OTM_VIDEO_WVGA_PT_PANEL if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio24, 0); #endif } return 0; }
static int lvds_panel_power(int on) { static struct regulator *reg_lvs7, *reg_l2, *reg_ext_3p3v; static int gpio36, mpp3; int rc; #ifndef CONFIG_VENDOR_EDIT static int gpio26; #endif pr_debug("%s: on=%d\n", __func__, on); if (!lvds_power_on) { reg_lvs7 = regulator_get(&msm_lvds_device.dev, "lvds_vdda"); if (IS_ERR_OR_NULL(reg_lvs7)) { pr_err("could not get 8921_lvs7, rc = %ld\n", PTR_ERR(reg_lvs7)); return -ENODEV; } reg_l2 = regulator_get(&msm_lvds_device.dev, "lvds_pll_vdda"); if (IS_ERR_OR_NULL(reg_l2)) { pr_err("could not get 8921_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } reg_ext_3p3v = regulator_get(&msm_lvds_device.dev, "lvds_vccs_3p3v"); if (IS_ERR_OR_NULL(reg_ext_3p3v)) { pr_err("could not get reg_ext_3p3v, rc = %ld\n", PTR_ERR(reg_ext_3p3v)); return -ENODEV; } #ifndef CONFIG_VENDOR_EDIT gpio26 = PM8921_GPIO_PM_TO_SYS(26); rc = gpio_request(gpio26, "pwm_backlight_ctrl"); if (rc) { pr_err("request gpio 26 failed, rc=%d\n", rc); return -ENODEV; } #endif gpio36 = PM8921_GPIO_PM_TO_SYS(36); /* lcd1_pwr_en_n */ rc = gpio_request(gpio36, "lcd1_pwr_en_n"); if (rc) { pr_err("request gpio 36 failed, rc=%d\n", rc); return -ENODEV; } mpp3 = PM8921_MPP_PM_TO_SYS(3); rc = gpio_request(mpp3, "backlight_en"); if (rc) { pr_err("request mpp3 failed, rc=%d\n", rc); return -ENODEV; } lvds_power_on = true; } if (on) { rc = regulator_enable(reg_lvs7); if (rc) { pr_err("enable lvs7 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_ext_3p3v); if (rc) { pr_err("enable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(gpio36, 0); gpio_set_value_cansleep(mpp3, 1); #ifndef CONFIG_VENDOR_EDIT if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 1); #endif } else { #ifndef CONFIG_VENDOR_EDIT if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 0); #endif gpio_set_value_cansleep(mpp3, 0); gpio_set_value_cansleep(gpio36, 1); rc = regulator_disable(reg_lvs7); if (rc) { pr_err("disable reg_lvs7 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_ext_3p3v); if (rc) { pr_err("disable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } } return 0; }
/* OPPO 2013-07-4 Neal Modify begin for LCD */ int mipi_dsi_panel_power(int on) { /* OPPO 2012-08-31 zhengzk Modify begin for LCD */ static struct regulator *reg_lvs7, *reg_l2, *reg_l11, *reg_ext_3p3v; static int gpio36, gpio25, mpp3; #ifdef CONFIG_VENDOR_EDIT static struct regulator *reg_l22; #else static int gpio26; #endif /* OPPO 2013-07-4 Neal Modify end*/ int rc; pr_debug("%s: on=%d\n", __func__, on); if (!dsi_power_on) { reg_lvs7 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_vddio"); if (IS_ERR_OR_NULL(reg_lvs7)) { pr_err("could not get 8921_lvs7, rc = %ld\n", PTR_ERR(reg_lvs7)); return -ENODEV; } reg_l2 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_pll_vdda"); if (IS_ERR_OR_NULL(reg_l2)) { pr_err("could not get 8921_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } reg_l11 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_avdd"); if (IS_ERR(reg_l11)) { pr_err("could not get 8921_l11, rc = %ld\n", PTR_ERR(reg_l11)); return -ENODEV; } /* OPPO 2012-08-31 zhengzk Modify begin for LCD */ #ifndef CONFIG_VENDOR_EDIT rc = regulator_set_voltage(reg_l11, 3000000, 3000000); #else rc = regulator_set_voltage(reg_l11, 3100000, 3100000); #endif /* OPPO 2012-08-31 zhengzk Modify end */ if (rc) { pr_err("set_voltage l11 failed, rc=%d\n", rc); return -EINVAL; } /* OPPO 2012-08-31 zhengzk Add begin for LCD */ #ifdef CONFIG_VENDOR_EDIT reg_l22 = regulator_get(NULL, "8921_l22"); if (IS_ERR(reg_l22)) { pr_err("could not get 8921_l22, rc = %ld\n", PTR_ERR(reg_l22)); return -ENODEV; } rc = regulator_set_voltage(reg_l22, 1800000, 1800000); if (rc) { pr_err("set_voltage l22 failed, rc=%d\n", rc); return -EINVAL; } #endif /* OPPO 2012-08-31 zhengzk Modify end */ if (machine_is_apq8064_liquid()) { reg_ext_3p3v = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_vccs_3p3v"); if (IS_ERR_OR_NULL(reg_ext_3p3v)) { pr_err("could not get reg_ext_3p3v, rc = %ld\n", PTR_ERR(reg_ext_3p3v)); reg_ext_3p3v = NULL; return -ENODEV; } mpp3 = PM8921_MPP_PM_TO_SYS(3); rc = gpio_request(mpp3, "backlight_en"); if (rc) { pr_err("request mpp3 failed, rc=%d\n", rc); return -ENODEV; } } gpio25 = PM8921_GPIO_PM_TO_SYS(25); rc = gpio_request(gpio25, "disp_rst_n"); if (rc) { pr_err("request gpio 25 failed, rc=%d\n", rc); return -ENODEV; } #ifndef CONFIG_VENDOR_EDIT gpio26 = PM8921_GPIO_PM_TO_SYS(26); rc = gpio_request(gpio26, "pwm_backlight_ctrl"); if (rc) { pr_err("request gpio 26 failed, rc=%d\n", rc); return -ENODEV; } #endif gpio36 = PM8921_GPIO_PM_TO_SYS(36); /* lcd1_pwr_en_n */ rc = gpio_request(gpio36, "lcd1_pwr_en_n"); if (rc) { pr_err("request gpio 36 failed, rc=%d\n", rc); return -ENODEV; } #ifdef CONFIG_VENDOR_EDIT rc = gpio_request(LCD_5V_EN_DVT, "lcd_5v_en"); if (rc) { pr_err("request gpio 86 failed, rc=%d\n", rc); return -ENODEV; } #endif dsi_power_on = true; } if (on) { rc = regulator_enable(reg_lvs7); if (rc) { pr_err("enable lvs7 failed, rc=%d\n", rc); return -ENODEV; } /* OPPO 2012-08-31 zhengzk Add begin for LCD */ #ifdef CONFIG_VENDOR_EDIT rc = regulator_enable(reg_l22); //1.8v if (rc) { pr_err("enable l22 failed, rc=%d\n", rc); return -ENODEV; } mdelay(5); /* OPPO 2012-08-31 zhengzk Modify end */ rc = gpio_direction_output(LCD_5V_EN_DVT, 1);//5v if (rc) { pr_err("%s: unable to enable LCD_5V_EN!!!!!!!!!!!!\n", __func__); return -ENODEV; } mdelay(5); gpio_set_value_cansleep(gpio36, 0); gpio_set_value_cansleep(gpio25, 1); mdelay(10); #endif rc = regulator_set_optimum_mode(reg_l11, 110000); if (rc < 0) { pr_err("set_optimum_mode l11 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l11); if (rc) { pr_err("enable l11 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } if (machine_is_apq8064_liquid()) { rc = regulator_enable(reg_ext_3p3v); if (rc) { pr_err("enable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(mpp3, 1); } gpio_set_value_cansleep(gpio36, 0); gpio_set_value_cansleep(gpio25, 1); #ifndef CONFIG_VENDOR_EDIT if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 1); #endif } else { #ifndef CONFIG_VENDOR_EDIT if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 0); #endif gpio_set_value_cansleep(gpio25, 0); gpio_set_value_cansleep(gpio36, 1); if (machine_is_apq8064_liquid()) { gpio_set_value_cansleep(mpp3, 0); rc = regulator_disable(reg_ext_3p3v); if (rc) { pr_err("disable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } } rc = regulator_disable(reg_l11); if (rc) { pr_err("disable reg_l1 failed, rc=%d\n", rc); return -ENODEV; } #ifdef CONFIG_VENDOR_EDIT rc = gpio_direction_output(LCD_5V_EN_DVT, 0); if (rc) { pr_err("%s: unable to enable LCD_5V_EN!!!!!!!!!!!!\n", __func__); return -ENODEV; } /* OPPO 2012-08-31 zhengzk Add begin for LCD */ mdelay(10); rc = regulator_disable(reg_l22); if (rc) { pr_err("disable reg_l22 failed, rc=%d\n", rc); return -ENODEV; } /* OPPO 2012-08-31 zhengzk Modify end */ #endif rc = regulator_disable(reg_lvs7); if (rc) { pr_err("disable reg_lvs7 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } } 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; }
static void msm8960_ext_spk_power_amp_on(u32 spk) { int ret = 0; if (spk & (SPK_AMP_POS | SPK_AMP_NEG)) { if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { pr_debug("%s() External Bottom Speaker Ampl already " "turned on. spk = 0x%08x\n", __func__, spk); return; } msm8930_ext_spk_pamp |= spk; if ((msm8930_ext_spk_pamp & SPK_AMP_POS) && (msm8930_ext_spk_pamp & SPK_AMP_NEG)) { #if 0 if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { ret = msm8930_cfg_spkr_gpio( LEFT_SPKR_AMPL_GPIO, 1, "LEFT_SPKR_AMPL"); if (ret) { pr_err("%s: Failed to config ampl gpio %u\n", __func__, LEFT_SPKR_AMPL_GPIO); return; } } else { if (machine_is_msm8930_mtp() || machine_is_msm8930_fluid()) { ret = msm8930_cfg_spkr_gpio( SPKR_BOOST_GPIO, 1, "SPKR_BOOST"); if (ret) { pr_err("%s: Failure: spkr boost gpio %u\n", __func__, SPKR_BOOST_GPIO); return; } } else if (socinfo_get_platform_subtype() == PLATFORM_SUBTYPE_SGLTE) { ret = pm8xxx_gpio_config( spkr_boost_enable_gpio, &SPKR_ON); if (ret) { pr_err("%s: Failure: spkr" \ "boost gpio ON %u\n", __func__, spkr_boost_enable_gpio); return; } else { pr_debug("%s:Config PMIC8038" \ "gpio for speaker ON successfully\n", __func__); } } pm8xxx_spk_enable(MSM8930_SPK_ON); } #else #if 0 // chenjun:is NOT PMIC_MODEL_PM8917 if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { pr_err("chenjun:is PMIC_MODEL_PM8917\n"); } else { pr_err("chenjun:is NOT PMIC_MODEL_PM8917\n"); } #endif // chenjun:gpio 14 and 19 are used for speaker amplifier ret = msm8930_cfg_spkr_gpio( YDA_SPKR_EN0_GPIO, 1, "YDA_SPKR_EN0"); pr_err("chenjun:%s:enable SPKR EN0(%d):ret(%d)\n", __func__, YDA_SPKR_EN0_GPIO, ret); ret = msm8930_cfg_spkr_gpio( YDA_SPKR_EN1_GPIO, 1, "YDA_SPKR_EN1"); pr_err("chenjun:%s:enable SPKR EN1(%d):ret(%d)\n", __func__, YDA_SPKR_EN1_GPIO, ret); #endif pr_debug("%s: sleeping 4 ms after turning on external " " Left Speaker Ampl\n", __func__); usleep_range(4000, 4000); } } else { pr_err("%s: ERROR : Invalid External Speaker Ampl. spk = 0x%08x\n", __func__, spk); return; } }
static int mipi_dsi_panel_power(int on) { static struct regulator *reg_lvs7, *reg_l2, *reg_l11, *reg_ext_3p3v; static int gpio36, gpio25, gpio26, mpp3; int rc; pr_debug("%s: on=%d\n", __func__, on); if (!dsi_power_on) { reg_lvs7 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_vddio"); if (IS_ERR_OR_NULL(reg_lvs7)) { pr_err("could not get 8921_lvs7, rc = %ld\n", PTR_ERR(reg_lvs7)); return -ENODEV; } reg_l2 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_pll_vdda"); if (IS_ERR_OR_NULL(reg_l2)) { pr_err("could not get 8921_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } reg_l11 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_avdd"); if (IS_ERR(reg_l11)) { pr_err("could not get 8921_l11, rc = %ld\n", PTR_ERR(reg_l11)); return -ENODEV; } rc = regulator_set_voltage(reg_l11, 3000000, 3000000); if (rc) { pr_err("set_voltage l11 failed, rc=%d\n", rc); return -EINVAL; } if (machine_is_apq8064_liquid()) { reg_ext_3p3v = regulator_get(&msm_mipi_dsi1_device.dev, "dsi1_vccs_3p3v"); if (IS_ERR_OR_NULL(reg_ext_3p3v)) { pr_err("could not get reg_ext_3p3v, rc = %ld\n", PTR_ERR(reg_ext_3p3v)); reg_ext_3p3v = NULL; return -ENODEV; } mpp3 = PM8921_MPP_PM_TO_SYS(3); rc = gpio_request(mpp3, "backlight_en"); if (rc) { pr_err("request mpp3 failed, rc=%d\n", rc); return -ENODEV; } } gpio25 = PM8921_GPIO_PM_TO_SYS(25); rc = gpio_request(gpio25, "disp_rst_n"); if (rc) { pr_err("request gpio 25 failed, rc=%d\n", rc); return -ENODEV; } gpio26 = PM8921_GPIO_PM_TO_SYS(26); rc = gpio_request(gpio26, "pwm_backlight_ctrl"); if (rc) { pr_err("request gpio 26 failed, rc=%d\n", rc); return -ENODEV; } gpio36 = PM8921_GPIO_PM_TO_SYS(36); /* lcd1_pwr_en_n */ rc = gpio_request(gpio36, "lcd1_pwr_en_n"); if (rc) { pr_err("request gpio 36 failed, rc=%d\n", rc); return -ENODEV; } dsi_power_on = true; } if (on) { rc = regulator_enable(reg_lvs7); if (rc) { pr_err("enable lvs7 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l11, 110000); if (rc < 0) { pr_err("set_optimum_mode l11 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l11); if (rc) { pr_err("enable l11 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } if (machine_is_apq8064_liquid()) { rc = regulator_enable(reg_ext_3p3v); if (rc) { pr_err("enable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(mpp3, 1); } gpio_set_value_cansleep(gpio36, 0); gpio_set_value_cansleep(gpio25, 1); if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 1); } else { if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) gpio_set_value_cansleep(gpio26, 0); gpio_set_value_cansleep(gpio25, 0); gpio_set_value_cansleep(gpio36, 1); if (machine_is_apq8064_liquid()) { gpio_set_value_cansleep(mpp3, 0); rc = regulator_disable(reg_ext_3p3v); if (rc) { pr_err("disable reg_ext_3p3v failed, rc=%d\n", rc); return -ENODEV; } } rc = regulator_disable(reg_l11); if (rc) { pr_err("disable reg_l1 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_lvs7); if (rc) { pr_err("disable reg_lvs7 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } } return 0; }
static int mipi_dsi_cdp_panel_power(int on) { static struct regulator *reg_l8, *reg_l23, *reg_l2; /* Control backlight GPIO (24) directly when using PM8917 */ int gpio24 = PM8917_GPIO_PM_TO_SYS(24); int rc; pr_debug("%s: state : %d\n", __func__, on); if (!dsi_power_on) { reg_l8 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdc"); if (IS_ERR(reg_l8)) { pr_err("could not get 8038_l8, rc = %ld\n", PTR_ERR(reg_l8)); return -ENODEV; } reg_l23 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vddio"); if (IS_ERR(reg_l23)) { pr_err("could not get 8038_l23, rc = %ld\n", PTR_ERR(reg_l23)); return -ENODEV; } reg_l2 = regulator_get(&msm_mipi_dsi1_device.dev, "dsi_vdda"); if (IS_ERR(reg_l2)) { pr_err("could not get 8038_l2, rc = %ld\n", PTR_ERR(reg_l2)); return -ENODEV; } rc = regulator_set_voltage(reg_l8, 2800000, 3000000); if (rc) { pr_err("set_voltage l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l23, 1800000, 1800000); if (rc) { pr_err("set_voltage l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_voltage(reg_l2, 1200000, 1200000); if (rc) { pr_err("set_voltage l2 failed, rc=%d\n", rc); return -EINVAL; } rc = gpio_request(DISP_RST_GPIO, "disp_rst_n"); if (rc) { pr_err("request gpio DISP_RST_GPIO failed, rc=%d\n", rc); gpio_free(DISP_RST_GPIO); return -ENODEV; } if (machine_is_msm8930_evt()) { rc = gpio_direction_output(DISP_RST_GPIO, 1); if (rc) { pr_err("gpio_direction_output failed for %d gpio rc=%d\n", DISP_RST_GPIO, rc); return -ENODEV; } } if (!machine_is_msm8930_evt()) { rc = gpio_request(DISP_3D_2D_MODE, "disp_3d_2d"); if (rc) { pr_err("request gpio DISP_3D_2D_MODE failed, rc=%d\n", rc); gpio_free(DISP_3D_2D_MODE); return -ENODEV; } rc = gpio_direction_output(DISP_3D_2D_MODE, 0); if (rc) { pr_err("gpio_direction_output failed for %d gpio rc=%d\n", DISP_3D_2D_MODE, rc); return -ENODEV; } } if (socinfo_get_pmic_model() == PMIC_MODEL_PM8917) { rc = gpio_request(gpio24, "disp_bl"); if (rc) { pr_err("request for gpio 24 failed, rc=%d\n", rc); return -ENODEV; } gpio_set_value_cansleep(gpio24, 0); novatek_pdata.gpio_set_backlight = pm8917_gpio_set_backlight; } dsi_power_on = true; } if (on) { rc = regulator_set_optimum_mode(reg_l8, 100000); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100000); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100000); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_enable(reg_l8); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l23); if (rc) { pr_err("enable l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_enable(reg_l2); if (rc) { pr_err("enable l2 failed, rc=%d\n", rc); return -ENODEV; } usleep(10000); gpio_set_value(DISP_RST_GPIO, 1); usleep(10); gpio_set_value(DISP_RST_GPIO, 0); usleep(20); gpio_set_value(DISP_RST_GPIO, 1); if (!machine_is_msm8930_evt()) gpio_set_value(DISP_3D_2D_MODE, 1); usleep(20); } else { gpio_set_value(DISP_RST_GPIO, 0); rc = regulator_disable(reg_l2); if (rc) { pr_err("disable reg_l2 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l8); if (rc) { pr_err("disable reg_l8 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_disable(reg_l23); if (rc) { pr_err("disable reg_l23 failed, rc=%d\n", rc); return -ENODEV; } rc = regulator_set_optimum_mode(reg_l8, 100); if (rc < 0) { pr_err("set_optimum_mode l8 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l23, 100); if (rc < 0) { pr_err("set_optimum_mode l23 failed, rc=%d\n", rc); return -EINVAL; } rc = regulator_set_optimum_mode(reg_l2, 100); if (rc < 0) { pr_err("set_optimum_mode l2 failed, rc=%d\n", rc); return -EINVAL; } if (!machine_is_msm8930_evt()) gpio_set_value(DISP_3D_2D_MODE, 0); usleep(20); } return 0; }