unsigned int hdmi_set_cable_state(unsigned int state)
{
    unsigned long flags;
    struct snd_pcm_substream *substream = hdmi_audio_stream_playback;

    spin_lock_irqsave(&hdmi_cable_state_lock, flags);
    hdmi_cable_state = state;
    spin_unlock_irqrestore(&hdmi_cable_state_lock, flags);

    if (check_hdmi_state() && substream)
        substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_START);
    return 0;
}
unsigned int hdmi_set_blank_state(unsigned int state)
{
#if 0
	unsigned long flags;
	struct snd_pcm_substream *substream = hdmi_audio_stream_playback;

	spin_lock_irqsave(&hdmi_blank_state_lock, flags);
	hdmi_blank_state = state;
	spin_unlock_irqrestore(&hdmi_blank_state_lock, flags);

	if (check_hdmi_state() && substream && hdmi_abort_state) {
		hdmi_abort_state = 0;
		substream->ops->trigger(substream, SNDRV_PCM_TRIGGER_START);
	}
#endif
	return 0;
}
int mxc_hdmi_register_audio(struct snd_pcm_substream *substream)
{
    unsigned long flags, flags1;
    int ret = 0;

    snd_pcm_stream_lock_irqsave(substream, flags);

    if (substream && check_hdmi_state()) {
        spin_lock_irqsave(&hdmi_audio_lock, flags1);
        if (hdmi_audio_stream_playback) {
            pr_err("%s unconsist hdmi auido stream!\n", __func__);
            ret = -EINVAL;
        }
        hdmi_audio_stream_playback = substream;
        spin_unlock_irqrestore(&hdmi_audio_lock, flags1);
    } else
        ret = -EINVAL;

    snd_pcm_stream_unlock_irqrestore(substream, flags);

    return ret;
}