int hdmi_audio_update(struct hdmi *hdmi) { struct hdmi_audio *audio = &hdmi->audio; struct hdmi_audio_infoframe *info = &audio->infoframe; const struct hdmi_msm_audio_arcs *arcs = NULL; bool enabled = audio->enabled; uint32_t acr_pkt_ctrl, vbi_pkt_ctrl, aud_pkt_ctrl; uint32_t infofrm_ctrl, audio_config; DBG("audio: enabled=%d, channels=%d, channel_allocation=0x%x, " "level_shift_value=%d, downmix_inhibit=%d, rate=%d", audio->enabled, info->channels, info->channel_allocation, info->level_shift_value, info->downmix_inhibit, audio->rate); DBG("video: power_on=%d, pixclock=%lu", hdmi->power_on, hdmi->pixclock); if (enabled && !(hdmi->power_on && hdmi->pixclock)) { DBG("disabling audio: no video"); enabled = false; } if (enabled) { arcs = get_arcs(hdmi->pixclock); if (!arcs) { DBG("disabling audio: unsupported pixclock: %lu", hdmi->pixclock); enabled = false; } } /* Read first before writing */ acr_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_ACR_PKT_CTRL); vbi_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_VBI_PKT_CTRL); aud_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_AUDIO_PKT_CTRL1); infofrm_ctrl = hdmi_read(hdmi, REG_HDMI_INFOFRAME_CTRL0); audio_config = hdmi_read(hdmi, REG_HDMI_AUDIO_CFG); /* Clear N/CTS selection bits */ acr_pkt_ctrl &= ~HDMI_ACR_PKT_CTRL_SELECT__MASK; if (enabled) { uint32_t n, cts, multiplier; enum hdmi_acr_cts select; uint8_t buf[14]; n = arcs->lut[audio->rate].n; cts = arcs->lut[audio->rate].cts; if ((MSM_HDMI_SAMPLE_RATE_192KHZ == audio->rate) || (MSM_HDMI_SAMPLE_RATE_176_4KHZ == audio->rate)) { multiplier = 4; n >>= 2; /* divide N by 4 and use multiplier */ } else if ((MSM_HDMI_SAMPLE_RATE_96KHZ == audio->rate) ||
state_node build_state_node (const fm<T>& a, const state& s) { set<inst<T> > tmp = get_arcs(a); int size = tmp.size(); inst<T> tmpinst; int count = 0; for (int i=0; i<size; i++) { tmpinst = tmp[i]; if (tmpinst.sinkis(s) == 1) //if s is the sink of the current instruction count +=1; } state_node sn; sn.stat = s; sn.count = count; return sn; }