diff options
Diffstat (limited to 'sound/soc/msm/msm8226.c')
| -rw-r--r-- | sound/soc/msm/msm8226.c | 36 |
1 files changed, 34 insertions, 2 deletions
diff --git a/sound/soc/msm/msm8226.c b/sound/soc/msm/msm8226.c index fb34d2ec827..09343622a32 100644 --- a/sound/soc/msm/msm8226.c +++ b/sound/soc/msm/msm8226.c @@ -18,6 +18,7 @@ #include <linux/slab.h> #include <linux/mfd/pm8xxx/pm8921.h> #include <linux/io.h> +#include <soc/qcom/subsystem_notif.h> #include <sound/core.h> #include <sound/soc.h> #include <sound/soc-dapm.h> @@ -25,7 +26,6 @@ #include <sound/jack.h> #include <sound/q6afe-v2.h> #include <mach/socinfo.h> -#include <mach/subsystem_notif.h> #include <qdsp6v2/msm-pcm-routing-v2.h> #include "qdsp6v2/q6core.h" #include "../codecs/wcd9xxx-common.h" @@ -93,10 +93,12 @@ static struct wcd9xxx_mbhc_config mbhc_cfg = { .swap_gnd_mic = NULL, .cs_enable_flags = (1 << MBHC_CS_ENABLE_POLLING | 1 << MBHC_CS_ENABLE_INSERTION | - 1 << MBHC_CS_ENABLE_REMOVAL), + 1 << MBHC_CS_ENABLE_REMOVAL | + 1 << MBHC_CS_ENABLE_DET_ANC), .do_recalibration = true, .use_vddio_meas = true, .enable_anc_mic_detect = false, + .hw_jack_type = FOUR_POLE_JACK, }; struct msm_auxpcm_gpio { @@ -1974,6 +1976,7 @@ static int msm8226_asoc_machine_probe(struct platform_device *pdev) struct msm8226_asoc_mach_data *pdata; int ret; const char *auxpcm_pri_gpio_set = NULL; + const char *mbhc_audio_jack_type = NULL; if (!pdev->dev.of_node) { dev_err(&pdev->dev, "No platform supplied from device tree\n"); @@ -2038,6 +2041,35 @@ static int msm8226_asoc_machine_probe(struct platform_device *pdev) mbhc_cfg.gpio_level_insert = of_property_read_bool(pdev->dev.of_node, "qcom,headset-jack-type-NC"); + ret = of_property_read_string(pdev->dev.of_node, + "qcom,mbhc-audio-jack-type", &mbhc_audio_jack_type); + if (ret) { + dev_dbg(&pdev->dev, "Looking up %s property in node %s failed", + "qcom,mbhc-audio-jack-type", + pdev->dev.of_node->full_name); + mbhc_cfg.hw_jack_type = FOUR_POLE_JACK; + mbhc_cfg.enable_anc_mic_detect = false; + dev_dbg(&pdev->dev, "Jack type properties set to default"); + } else { + if (!strcmp(mbhc_audio_jack_type, "4-pole-jack")) { + mbhc_cfg.hw_jack_type = FOUR_POLE_JACK; + mbhc_cfg.enable_anc_mic_detect = false; + dev_dbg(&pdev->dev, "This hardware has 4 pole jack"); + } else if (!strcmp(mbhc_audio_jack_type, "5-pole-jack")) { + mbhc_cfg.hw_jack_type = FIVE_POLE_JACK; + mbhc_cfg.enable_anc_mic_detect = true; + dev_dbg(&pdev->dev, "This hardware has 5 pole jack"); + } else if (!strcmp(mbhc_audio_jack_type, "6-pole-jack")) { + mbhc_cfg.hw_jack_type = SIX_POLE_JACK; + mbhc_cfg.enable_anc_mic_detect = true; + dev_dbg(&pdev->dev, "This hardware has 6 pole jack"); + } else { + mbhc_cfg.hw_jack_type = FOUR_POLE_JACK; + mbhc_cfg.enable_anc_mic_detect = false; + dev_dbg(&pdev->dev, "Unknown value, hence setting to default"); + } + } + ret = snd_soc_register_card(card); if (ret) { dev_err(&pdev->dev, "snd_soc_register_card failed (%d)\n", |
