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); } }