static void cs42l52_hp_detect_queue(struct work_struct* work) { int level = 0x0; struct cs42l52_work_t* pwork = container_of(work,struct cs42l52_work_t, cs42l52_workqueue); struct snd_soc_codec* codec = (struct snd_soc_codec*)(pwork->data); if ((soc_cs42l52_dai.ac97_pdata) && ((struct cs42l52_platform_data *) (soc_cs42l52_dai.ac97_pdata))->is_hp_pluged) level = ((struct cs42l52_platform_data *) (soc_cs42l52_dai.ac97_pdata))->is_hp_pluged(); //printk("level = %x, hp_detect_flag = %x\n", level, hp_detect_flag); if(level == 0x1 && hp_detect_flag!= 0x1){ // HP printk("Headphone pluged in\n"); snd_soc_dapm_disable_pin(codec, "Ext Spk"); snd_soc_dapm_enable_pin(codec, "MIC IN"); snd_soc_dapm_sync(codec); // pull down the gpio to mute spk mute_spk(codec, 1); snd_soc_jack_report(&hp_jack, SND_JACK_HEADSET, SND_JACK_HEADSET); hp_detect_flag = level; }else if(level != hp_detect_flag){ // HDMI printk("Headphone unpluged\n"); snd_soc_dapm_enable_pin(codec, "Ext Spk"); snd_soc_dapm_enable_pin(codec, "MIC IN"); snd_soc_dapm_sync(codec); snd_soc_jack_report(&hp_jack,0, SND_JACK_HEADSET); hp_detect_flag = level; mute_spk(codec, 0); } }
static int aml_m1_set_bias_level(struct snd_soc_card *card, enum snd_soc_bias_level level) { int ret = 0; struct snd_soc_codec *codec = card->codec; // TODO printk("***Entered %s:%s: %d\n", __FILE__,__func__, level); switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: #if HP_DET del_timer_sync(&timer); timer.expires = jiffies + HZ*5; del_timer(&timer); add_timer(&timer); hp_detect_flag = 0xf0000000; #endif break; case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_STANDBY: #if HP_DET del_timer(&timer); hp_detect_flag = 0xf0000000; mute_spk(codec,1); #endif break; }; return ret; }
static int aml_m3_set_bias_level(struct snd_soc_card *card, enum snd_soc_bias_level level) { int ret = 0; struct snd_soc_codec *codec = card->codec; struct aml_audio_platform* pplatform = aml_m3_platform_device->dev.platform_data; // TODO #ifdef _AML_M3_HW_DEBUG_ printk("***Entered %s:%s: %d\n", __FILE__,__func__, level); #endif switch (level) { case SND_SOC_BIAS_ON: case SND_SOC_BIAS_PREPARE: #if HP_DET del_timer_sync(&timer); timer.expires = jiffies + HZ*5; del_timer(&timer); add_timer(&timer); hp_detect_flag = 0xf0000000; #endif break; case SND_SOC_BIAS_OFF: case SND_SOC_BIAS_STANDBY: #if HP_DET del_timer(&timer); hp_detect_flag = 0xf0000000; mute_spk(codec,1); #endif break; }; return ret; }
static void aml_audio_clock_gating_enable(void) { struct snd_soc_codec* codec; printk("***Entered %s:%s\n", __FILE__,__func__); //WRITE_CBUS_REG(HHI_GCLK_MPEG0, READ_CBUS_REG(HHI_GCLK_MPEG0)|(1<<18)); WRITE_CBUS_REG(HHI_GCLK_MPEG1, READ_CBUS_REG(HHI_GCLK_MPEG1)|(1<<2) //|(0xFF<<6) ); //WRITE_CBUS_REG(HHI_GCLK_MPEG2, READ_CBUS_REG(HHI_GCLK_MPEG2)|(1<<10)); //WRITE_CBUS_REG(HHI_GCLK_OTHER, READ_CBUS_REG(HHI_GCLK_OTHER)|(1<<10) //|(1<<18) //|(0x7<<14)); WRITE_APB_REG(APB_ADAC_POWER_CTRL_REG2, READ_APB_REG(APB_ADAC_POWER_CTRL_REG2)|(1<<7)); if(aml_m3_is_hp_pluged()){ mute_spk(codec,1); } else mute_spk(codec,0); adac_latch(); }
static void aml_m3_hp_detect_queue(struct work_struct* work) { int level = 0x0; //u16 reg; struct aml_m3_work_t* pwork = container_of(work,struct aml_m3_work_t, aml_m3_workqueue); struct snd_soc_codec* codec = (struct snd_soc_codec*)(pwork->data); //if ((aml_dai[1].ac97_pdata) && ((struct aml_m3_pdata *) (aml_dai[1].ac97_pdata))->is_hp_pluged) //level = ((struct aml_m3_pdata *) (aml_dai[1].ac97_pdata))->is_hp_pluged(); level = aml_m3_is_hp_pluged(); //printk("level = %x, hp_detect_flag = %x\n", level, hp_detect_flag); if(level == 0x1 && hp_detect_flag!= 0x1){ // HP printk("Headphone pluged in\n"); snd_soc_jack_report(&hp_jack, SND_JACK_HEADSET, SND_JACK_HEADSET); //reg = snd_soc_read(codec, ADAC_MUTE_CTRL_REG1); //reg &= ~0xc0; //snd_soc_write(codec, ADAC_MUTE_CTRL_REG1, reg); //unmute HP mute_headphone(codec, 0); //unmute HP mute_spk(codec, 1); latch_(codec); hp_detect_flag = level; switch_set_state(&sdev, 1); }else if(level != hp_detect_flag){ // HDMI printk("Headphone unpluged\n"); snd_soc_jack_report(&hp_jack,0, SND_JACK_HEADSET); //reg = snd_soc_read(codec, ADAC_MUTE_CTRL_REG1); //reg |= 0xc0; //snd_soc_write(codec, ADAC_MUTE_CTRL_REG1, reg);//mute HP mute_headphone(codec,1); //mute HP mute_spk(codec, 0); latch_(codec); hp_detect_flag = level; switch_set_state(&sdev, 0); } }
static void aml_audio_clock_gating_disable(void) { struct snd_soc_codec* codec; //printk("***Entered %s:%s\n", __FILE__,__func__); //WRITE_CBUS_REG(HHI_GCLK_MPEG0, READ_CBUS_REG(HHI_GCLK_MPEG0)&~(1<<18)); WRITE_CBUS_REG(HHI_GCLK_MPEG1, READ_CBUS_REG(HHI_GCLK_MPEG1)&~(1<<2) //&~(0xFF<<6) ); //WRITE_CBUS_REG(HHI_GCLK_MPEG2, READ_CBUS_REG(HHI_GCLK_MPEG2)&~(1<<10)); //WRITE_CBUS_REG(HHI_GCLK_OTHER, READ_CBUS_REG(HHI_GCLK_OTHER)&~(1<<10) //&~(1<<18) //&~(0x7<<14)); mute_spk(codec,1); WRITE_APB_REG(APB_ADAC_POWER_CTRL_REG2, READ_APB_REG(APB_ADAC_POWER_CTRL_REG2)&(~(1<<7))); adac_latch(); }