mfd:rk616 hdmi:fix irq respond err

This commit is contained in:
yzq
2013-05-06 14:22:00 +08:00
parent 6d6d4f4b43
commit fa3baf3406
3 changed files with 14 additions and 7 deletions

View File

@@ -147,8 +147,9 @@ static void hdmi_early_resume(struct early_suspend *h)
rk616_hdmi_initial();
if(hdmi->enable) {
enable_irq(hdmi->irq);
queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, 0);
hdmi_irq();
}
queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, msecs_to_jiffies(10));
mutex_unlock(&hdmi->enable_mutex);
return;
}
@@ -260,8 +261,8 @@ static int __devinit rk616_hdmi_probe (struct platform_device *pdev)
debugfs_create_file("hdmi", S_IRUSR,rk616->debugfs_dir,rk616,&rk616_hdmi_reg_fops);
}
#endif
//rk616_irq_work_func(NULL);
queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, msecs_to_jiffies(10));
rk616_irq_work_func(NULL);
//queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, msecs_to_jiffies(10));
dev_info(hdmi->dev, "rk616 hdmi probe success.\n");
return 0;
err1:

View File

@@ -83,6 +83,10 @@ static void rk616_hdmi_set_pwr_mode(int mode)
int rk616_hdmi_detect_hotplug(void)
{
int value = 0;
HDMIRdReg(INTERRUPT_STATUS1,&value);
if(value){
HDMIWrReg(INTERRUPT_STATUS1, value);
}
HDMIRdReg(HDMI_STATUS,&value);
hdmi_dbg(hdmi->dev, "[%s] value %02x\n", __FUNCTION__, value);
@@ -353,14 +357,15 @@ static int rk616_hdmi_config_audio(struct hdmi_audio *audio)
return -ENOENT;
}
//set_audio source I2S
if(HDMI_CODEC_SOURCE_SELECT == INPUT_IIS){
//set_audio source I2S
HDMIWrReg(AUDIO_CTRL1, 0x00);
HDMIWrReg(AUDIO_SAMPLE_RATE, rate);
HDMIWrReg(AUDIO_I2S_MODE, v_I2S_MODE(I2S_STANDARD) | v_I2S_CHANNEL(channel) );
HDMIWrReg(AUDIO_I2S_MAP, 0x00);
HDMIWrReg(AUDIO_I2S_SWAPS_SPDIF, 0); // no swap
}else{
HDMIWrReg(AUDIO_CTRL1, 0x08); //internal CTS, disable down sample, i2s input, disable MCLK
HDMIWrReg(AUDIO_CTRL1, 0x08);
HDMIWrReg(AUDIO_I2S_SWAPS_SPDIF, 0); // no swap
}
@@ -423,11 +428,12 @@ void hdmi_irq(void)
rk616_hdmi_set_pwr_mode(NORMAL);
queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, msecs_to_jiffies(10));
}
#if 0
if(hdmi->state == HDMI_SLEEP) {
// hdmi_dbg(hdmi->dev, "hdmi return to sleep mode\n");
rk616_hdmi_set_pwr_mode(LOWER_PWR);
}
#endif
#if 0
if(hdmi->hdcp_irq_cb)
hdmi->hdcp_irq_cb(interrupt2);

View File

@@ -42,7 +42,7 @@ static int hdmi_set_enable(struct rk_display_device *device, int enable)
else {
if(hdmi->irq)
enable_irq(hdmi->irq);
#if defined(CONFIG_HDMI_RK610) || defined(CONFIG_HDMI_RK2928) || defined(CONFIG_HDMI_CAT66121)
#if defined(CONFIG_HDMI_RK610) || defined(CONFIG_HDMI_RK2928) || defined(CONFIG_HDMI_CAT66121) || defined(CONFIG_HDMI_RK616)
queue_delayed_work(hdmi->workqueue, &hdmi->delay_work, 0);
#endif
mutex_unlock(&hdmi->enable_mutex);