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();
}
Example #2
0
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);
	}
}