diff options
author | Manoj Gangwal <mgangwal@nvidia.com> | 2012-02-28 18:51:55 +0530 |
---|---|---|
committer | Simone Willett <swillett@nvidia.com> | 2012-03-02 17:52:45 -0800 |
commit | 2f1547fd357c90df9532740e6019a9141b9aeff3 (patch) | |
tree | 1066de15c0f89276147b63a45164aff34ab6030a /sound/soc/codecs/rt5639.c | |
parent | 6dc6dc55db9eebc83373e7bb3ef42e92ee77c8f7 (diff) |
asoc: codecs: Add Headset detect support for ALC5639/40
Add support for headset detection for ALC5639/40
codec for kai board.
Bug 937914
Change-Id: I0bb9e913601c37a1cc8f7094fbdd3885aeec92b3
Signed-off-by: Manoj Gangwal <mgangwal@nvidia.com>
Reviewed-on: http://git-master/r/86348
Reviewed-by: Chandler Zhang <chazhang@nvidia.com>
Tested-by: Chandler Zhang <chazhang@nvidia.com>
Reviewed-by: Sachin Nikam <snikam@nvidia.com>
Reviewed-by: Sumit Bhattacharya <sumitb@nvidia.com>
Diffstat (limited to 'sound/soc/codecs/rt5639.c')
-rw-r--r-- | sound/soc/codecs/rt5639.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/sound/soc/codecs/rt5639.c b/sound/soc/codecs/rt5639.c index e51c1f0f48df..74d8a318a831 100644 --- a/sound/soc/codecs/rt5639.c +++ b/sound/soc/codecs/rt5639.c @@ -418,6 +418,41 @@ static int rt5639_readable_register( } } +int rt5639_headset_detect(struct snd_soc_codec *codec, int jack_insert) +{ + int jack_type; + + if (jack_insert) { + snd_soc_update_bits(codec, RT5639_PWR_ANLG1, + RT5639_PWR_LDO2, RT5639_PWR_LDO2); + snd_soc_update_bits(codec, RT5639_PWR_ANLG2, + RT5639_PWR_MB1, RT5639_PWR_MB1); + snd_soc_update_bits(codec, RT5639_MICBIAS, + RT5639_MIC1_OVCD_MASK | RT5639_MIC1_OVTH_MASK | + RT5639_PWR_CLK25M_MASK | RT5639_PWR_MB_MASK, + RT5639_MIC1_OVCD_EN | RT5639_MIC1_OVTH_600UA | + RT5639_PWR_MB_PU | RT5639_PWR_CLK25M_PU); + snd_soc_update_bits(codec, RT5639_DUMMY1, + 0x1, 0x1); + msleep(50); + if (snd_soc_read(codec, RT5639_IRQ_CTRL2) & 0x8) + jack_type = RT5639_HEADPHO_DET; + else + jack_type = RT5639_HEADSET_DET; + snd_soc_update_bits(codec, RT5639_IRQ_CTRL2, + RT5639_MB1_OC_CLR, 0); + } else { + snd_soc_update_bits(codec, RT5639_MICBIAS, + RT5639_MIC1_OVCD_MASK, + RT5639_MIC1_OVCD_DIS); + + jack_type = RT5639_NO_JACK; + } + + return jack_type; +} +EXPORT_SYMBOL(rt5639_headset_detect); + static const DECLARE_TLV_DB_SCALE(out_vol_tlv, -4650, 150, 0); static const DECLARE_TLV_DB_SCALE(dac_vol_tlv, -65625, 375, 0); static const DECLARE_TLV_DB_SCALE(in_vol_tlv, -3450, 150, 0); |