From: 陈金泉 <chenjq@rock-chips.com>
Date: Fri, 6 Jan 2012 08:33:57 +0000 (+0800)
Subject: 解决rt5621喇叭声音问题
X-Git-Tag: firefly_0821_release~9686
X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=79d0d94e01f3b0f1f0706521d2e9f2ca2c9c219a;p=firefly-linux-kernel-4.4.55.git

解决rt5621喇叭声音问题
---

diff --git a/sound/soc/codecs/rt5621.c b/sound/soc/codecs/rt5621.c
index c0ee91b3f40e..9652aa7fc17d 100644
--- a/sound/soc/codecs/rt5621.c
+++ b/sound/soc/codecs/rt5621.c
@@ -25,6 +25,8 @@
 #include <sound/initval.h>
 #include <sound/tlv.h>
 
+#include <mach/gpio.h>
+
 #include "rt5621.h"
 
 #if REALTEK_HWDEP
@@ -296,9 +298,9 @@ static int rt5621_ChangeCodecPowerStatus(struct snd_soc_codec *codec,int power_s
 	case POWER_STATE_D1_PLAYBACK: //Low on of Playback
 		rt5621_write_mask(codec, RT5621_PWR_MANAG_ADD2, PWR_VREF | PWR_DAC_REF_CIR |
 			PWR_L_DAC_CLK | PWR_R_DAC_CLK | PWR_L_HP_MIXER | PWR_R_HP_MIXER |
-			PWR_CLASS_AB | PWR_CLASS_D, PWR_VREF | PWR_DAC_REF_CIR |
+			PWR_CLASS_AB | PWR_CLASS_D|PWR_SPK_MIXER, PWR_VREF | PWR_DAC_REF_CIR |
 			PWR_L_DAC_CLK | PWR_R_DAC_CLK | PWR_L_HP_MIXER | PWR_R_HP_MIXER |
-			PWR_CLASS_AB | PWR_CLASS_D);
+			PWR_CLASS_AB | PWR_CLASS_D|PWR_SPK_MIXER);
 
 		rt5621_write_mask(codec, RT5621_PWR_MANAG_ADD3, PWR_MAIN_BIAS |
 			PWR_HP_R_OUT_VOL | PWR_HP_L_OUT_VOL | PWR_SPK_OUT, 
@@ -929,7 +931,7 @@ struct rt5621_init_reg{
 
 static struct rt5621_init_reg init_data[] = {
 	{RT5621_AUDIO_INTERFACE,        0x8000},    //set I2S codec to slave mode
-	{RT5621_STEREO_DAC_VOL,         0x0505},    //default stereo DAC volume to 0db
+	{RT5621_STEREO_DAC_VOL,         0x0808},    //default stereo DAC volume to 0db
 	{RT5621_OUTPUT_MIXER_CTRL,      0x2b40},    //default output mixer control	
 	{RT5621_ADC_REC_MIXER,          0x3f3f},    //set record source is Mic1 by default
 	{RT5621_MIC_CTRL,               0x0a00},    //set Mic1,Mic2 boost 20db	
@@ -939,7 +941,8 @@ static struct rt5621_init_reg init_data[] = {
 	{RT5621_STEREO_AD_DA_CLK_CTRL,  0x066d},    //set Dac filter to 256fs
 	{RT5621_ADC_REC_GAIN,		    0xfa95},    //set ADC boost to 15db	
 	{RT5621_HID_CTRL_INDEX,         0x46},	    //Class D setting
-	{RT5621_MIC_VOL,              0x1f08},
+	{RT5621_MIC_VOL,                0x0808},
+	{RT5621_MIC_ROUTING_CTRL, 		0xf0e0},
 	{RT5621_HID_CTRL_DATA,          0xFFFF},    //power on Class D Internal register
 	{RT5621_JACK_DET_CTRL,          0x4810},    //power on Class D Internal register
 };
@@ -992,6 +995,8 @@ static int rt5621_probe(struct snd_soc_codec *codec)
 {
 	int ret;
 
+	printk("##################### %s ######################\n", __FUNCTION__);
+
 	ret = snd_soc_codec_set_cache_io(codec, 8, 16, SND_SOC_I2C);
 	if (ret != 0) {
 		dev_err(codec->dev, "Failed to set cache I/O: %d\n", ret);
@@ -1172,6 +1177,18 @@ static int rt5621_i2c_probe(struct i2c_client *i2c,
 {
 	struct rt5621_priv *rt5621;
 	int ret;
+	
+	printk("##################### %s ######################\n", __FUNCTION__);
+
+	ret = gpio_request(RK29_PIN6_PB6, "spk_con");
+	if(ret < 0){
+		printk("gpio request spk_con error!\n");
+	}
+	else{
+		printk("########################### set spk_con HIGH ##################################\n");
+		gpio_direction_output(RK29_PIN6_PB6, GPIO_HIGH);
+		gpio_set_value(RK29_PIN6_PB6, GPIO_HIGH);
+	}
 
 	rt5621 = kzalloc(sizeof(struct rt5621_priv), GFP_KERNEL);
 	if (NULL == rt5621)