static int hdmi_audio_hw_params(struct snd_pcm_substream *substream, struct snd_pcm_hw_params *params, struct snd_soc_dai *dai) { struct snd_soc_pcm_runtime *rtd = substream->private_data; struct snd_soc_codec *codec = rtd->codec; struct hdmi_codec_data *priv = snd_soc_codec_get_drvdata(codec); priv->params.format = params_format(params); priv->params.sample_freq = params_rate(params); priv->params.channels_nr = params_channels(params); return hdmi_audio_set_configuration(priv); }
int hdmi_audio_notifier_callback(struct notifier_block *nb, unsigned long arg, void *ptr) { enum omap_dss_display_state state = arg; if (state == OMAP_DSS_DISPLAY_ACTIVE) { /* this happens just after hdmi_power_on */ if (hdmi_data.active) hdmi_ti_4xxx_audio_enable(&hdmi_data.ip_data, 0); hdmi_audio_set_configuration(&hdmi_data); if (hdmi_data.active) { omap_hwmod_set_slave_idlemode(hdmi_data.oh, HWMOD_IDLEMODE_NO); hdmi_ti_4xxx_audio_enable(&hdmi_data.ip_data, 1); } } return 0; }
int hdmi_audio_notifier_callback(struct notifier_block *nb, unsigned long arg, void *ptr) { enum omap_dss_display_state state = arg; if (state == OMAP_DSS_DISPLAY_ACTIVE) { /* this happens just after hdmi_power_on */ hdmi_audio_set_configuration(&hdmi_data); if (hdmi_data.active) { omap_hwmod_set_slave_idlemode(hdmi_data.oh, HWMOD_IDLEMODE_NO); hdmi_ti_4xxx_wp_audio_enable(&hdmi_data.ip_data, 1); queue_delayed_work(hdmi_data.workqueue, &hdmi_data.delayed_work, msecs_to_jiffies(1)); } } else { cancel_delayed_work_sync(&hdmi_data.delayed_work); } return 0; }