Lines Matching +full:hdmi +full:- +full:switch

1 // SPDX-License-Identifier: GPL-2.0-only
9 #include <linux/hdmi.h>
11 #include <sound/hdmi-codec.h>
13 #include "hdmi.h"
15 /* Supported HDMI Audio sample rates */
39 /* Valid Pixel-Clock rates: 25.2MHz, 27MHz, 27.03MHz, 74.25MHz, 148.5MHz */
69 if (arcs->pixclock == pixclock) in get_arcs()
76 int msm_hdmi_audio_update(struct hdmi *hdmi) in msm_hdmi_audio_update() argument
78 struct hdmi_audio *audio = &hdmi->audio; in msm_hdmi_audio_update()
80 bool enabled = audio->enabled; in msm_hdmi_audio_update()
84 if (!hdmi->connector->display_info.is_hdmi) in msm_hdmi_audio_update()
85 return -EINVAL; in msm_hdmi_audio_update()
88 audio->enabled, audio->channels, audio->rate); in msm_hdmi_audio_update()
90 DBG("video: power_on=%d, pixclock=%lu", hdmi->power_on, hdmi->pixclock); in msm_hdmi_audio_update()
92 if (enabled && !(hdmi->power_on && hdmi->pixclock)) { in msm_hdmi_audio_update()
98 arcs = get_arcs(hdmi->pixclock); in msm_hdmi_audio_update()
101 hdmi->pixclock); in msm_hdmi_audio_update()
107 acr_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_ACR_PKT_CTRL); in msm_hdmi_audio_update()
108 vbi_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_VBI_PKT_CTRL); in msm_hdmi_audio_update()
109 aud_pkt_ctrl = hdmi_read(hdmi, REG_HDMI_AUDIO_PKT_CTRL1); in msm_hdmi_audio_update()
110 audio_config = hdmi_read(hdmi, REG_HDMI_AUDIO_CFG); in msm_hdmi_audio_update()
119 n = arcs->lut[audio->rate].n; in msm_hdmi_audio_update()
120 cts = arcs->lut[audio->rate].cts; in msm_hdmi_audio_update()
122 if ((MSM_HDMI_SAMPLE_RATE_192KHZ == audio->rate) || in msm_hdmi_audio_update()
123 (MSM_HDMI_SAMPLE_RATE_176_4KHZ == audio->rate)) { in msm_hdmi_audio_update()
126 } else if ((MSM_HDMI_SAMPLE_RATE_96KHZ == audio->rate) || in msm_hdmi_audio_update()
127 (MSM_HDMI_SAMPLE_RATE_88_2KHZ == audio->rate)) { in msm_hdmi_audio_update()
140 if ((MSM_HDMI_SAMPLE_RATE_48KHZ == audio->rate) || in msm_hdmi_audio_update()
141 (MSM_HDMI_SAMPLE_RATE_96KHZ == audio->rate) || in msm_hdmi_audio_update()
142 (MSM_HDMI_SAMPLE_RATE_192KHZ == audio->rate)) in msm_hdmi_audio_update()
144 else if ((MSM_HDMI_SAMPLE_RATE_44_1KHZ == audio->rate) || in msm_hdmi_audio_update()
145 (MSM_HDMI_SAMPLE_RATE_88_2KHZ == audio->rate) || in msm_hdmi_audio_update()
146 (MSM_HDMI_SAMPLE_RATE_176_4KHZ == audio->rate)) in msm_hdmi_audio_update()
153 hdmi_write(hdmi, REG_HDMI_ACR_0(select - 1), in msm_hdmi_audio_update()
155 hdmi_write(hdmi, REG_HDMI_ACR_1(select - 1), in msm_hdmi_audio_update()
158 hdmi_write(hdmi, REG_HDMI_AUDIO_PKT_CTRL2, in msm_hdmi_audio_update()
159 COND(audio->channels != 2, HDMI_AUDIO_PKT_CTRL2_LAYOUT) | in msm_hdmi_audio_update()
165 hdmi_write(hdmi, REG_HDMI_GC, 0); in msm_hdmi_audio_update()
184 hdmi_write(hdmi, REG_HDMI_ACR_PKT_CTRL, acr_pkt_ctrl); in msm_hdmi_audio_update()
185 hdmi_write(hdmi, REG_HDMI_VBI_PKT_CTRL, vbi_pkt_ctrl); in msm_hdmi_audio_update()
186 hdmi_write(hdmi, REG_HDMI_AUDIO_PKT_CTRL1, aud_pkt_ctrl); in msm_hdmi_audio_update()
188 hdmi_write(hdmi, REG_HDMI_AUD_INT, in msm_hdmi_audio_update()
192 hdmi_write(hdmi, REG_HDMI_AUDIO_CFG, audio_config); in msm_hdmi_audio_update()
206 struct hdmi *hdmi = hdmi_bridge->hdmi; in msm_hdmi_bridge_audio_prepare() local
210 drm_dbg_driver(bridge->dev, "%u Hz, %d bit, %d channels\n", in msm_hdmi_bridge_audio_prepare()
211 params->sample_rate, in msm_hdmi_bridge_audio_prepare()
212 params->sample_width, in msm_hdmi_bridge_audio_prepare()
213 params->cea.channels); in msm_hdmi_bridge_audio_prepare()
215 switch (params->sample_rate) { in msm_hdmi_bridge_audio_prepare()
238 drm_err(bridge->dev, "rate[%d] not supported!\n", in msm_hdmi_bridge_audio_prepare()
239 params->sample_rate); in msm_hdmi_bridge_audio_prepare()
240 return -EINVAL; in msm_hdmi_bridge_audio_prepare()
244 &params->cea); in msm_hdmi_bridge_audio_prepare()
248 hdmi->audio.rate = rate; in msm_hdmi_bridge_audio_prepare()
249 hdmi->audio.channels = params->cea.channels; in msm_hdmi_bridge_audio_prepare()
250 hdmi->audio.enabled = true; in msm_hdmi_bridge_audio_prepare()
252 return msm_hdmi_audio_update(hdmi); in msm_hdmi_bridge_audio_prepare()
259 struct hdmi *hdmi = hdmi_bridge->hdmi; in msm_hdmi_bridge_audio_shutdown() local
263 hdmi->audio.rate = 0; in msm_hdmi_bridge_audio_shutdown()
264 hdmi->audio.channels = 2; in msm_hdmi_bridge_audio_shutdown()
265 hdmi->audio.enabled = false; in msm_hdmi_bridge_audio_shutdown()
267 msm_hdmi_audio_update(hdmi); in msm_hdmi_bridge_audio_shutdown()