void (*dump_phy)(struct hdmi_ip_data *ip_data, struct seq_file *s);
 
+#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
+       defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
+       void (*audio_enable)(struct hdmi_ip_data *ip_data, bool start);
+#endif
+
 };
 
 struct hdmi_ip_data {
 void ti_hdmi_4xxx_pll_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
 void ti_hdmi_4xxx_core_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
 void ti_hdmi_4xxx_phy_dump(struct hdmi_ip_data *ip_data, struct seq_file *s);
-
+#if defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI) || \
+       defined(CONFIG_SND_OMAP_SOC_OMAP4_HDMI_MODULE)
+void ti_hdmi_4xxx_wp_audio_enable(struct hdmi_ip_data *ip_data, bool enable);
+#endif
 #endif
 
        return 0;
 }
 
+void ti_hdmi_4xxx_wp_audio_enable(struct hdmi_ip_data *ip_data, bool enable)
+{
+       REG_FLD_MOD(hdmi_av_base(ip_data),
+                               HDMI_CORE_AV_AUD_MODE, enable, 0, 0);
+       REG_FLD_MOD(hdmi_wp_base(ip_data),
+                               HDMI_WP_AUDIO_CTRL, enable, 31, 31);
+       REG_FLD_MOD(hdmi_wp_base(ip_data),
+                               HDMI_WP_AUDIO_CTRL, enable, 30, 30);
+}
+
 int hdmi_audio_trigger(struct snd_pcm_substream *substream, int cmd,
                                struct snd_soc_dai *dai)
 {
        struct snd_soc_pcm_runtime *rtd = substream->private_data;
        struct snd_soc_codec *codec = rtd->codec;
+       struct platform_device *pdev = to_platform_device(codec->dev);
        struct hdmi_ip_data *ip_data = snd_soc_codec_get_drvdata(codec);
        int err = 0;
 
+       if (!(ip_data->ops) && !(ip_data->ops->audio_enable)) {
+               dev_err(&pdev->dev, "Cannot enable/disable audio\n");
+               return -ENODEV;
+       }
+
        switch (cmd) {
        case SNDRV_PCM_TRIGGER_START:
        case SNDRV_PCM_TRIGGER_RESUME:
        case SNDRV_PCM_TRIGGER_PAUSE_RELEASE:
-               REG_FLD_MOD(hdmi_av_base(ip_data),
-                                       HDMI_CORE_AV_AUD_MODE, 1, 0, 0);
-               REG_FLD_MOD(hdmi_wp_base(ip_data),
-                                       HDMI_WP_AUDIO_CTRL, 1, 31, 31);
-               REG_FLD_MOD(hdmi_wp_base(ip_data),
-                                       HDMI_WP_AUDIO_CTRL, 1, 30, 30);
+               ip_data->ops->audio_enable(ip_data, true);
                break;
 
        case SNDRV_PCM_TRIGGER_STOP:
        case SNDRV_PCM_TRIGGER_SUSPEND:
        case SNDRV_PCM_TRIGGER_PAUSE_PUSH:
-               REG_FLD_MOD(hdmi_av_base(ip_data),
-                                       HDMI_CORE_AV_AUD_MODE, 0, 0, 0);
-               REG_FLD_MOD(hdmi_wp_base(ip_data),
-                                       HDMI_WP_AUDIO_CTRL, 0, 30, 30);
-               REG_FLD_MOD(hdmi_wp_base(ip_data),
-                                       HDMI_WP_AUDIO_CTRL, 0, 31, 31);
+               ip_data->ops->audio_enable(ip_data, false);
                break;
        default:
                err = -EINVAL;